From 8b888f3cfcdbc5915b6f951b24e7e57a7df97a93 Mon Sep 17 00:00:00 2001 From: probe Date: Sat, 31 Oct 2026 11:50:27 -0500 Subject: [PATCH 001/182] Release gate: block only on open content bedrock in DEFECTS.md Implements Tim's permanent release rule (2026-10-08, permanent 2026-10-30). check_release_ready.py gains a ledger leg: reads the main checkout's .claude-local/DEFECTS.md, applies its header's open-unit rule, fails on open content BEDROCK/BEDROCK-CANDIDATE and on untagged open units, fails with a distinct UNREADABLE status on a missing ledger, prints kind x severity counts, and adds --ledger-only and selftest controls. CLAUDE.md R-DEFECTS/R-RELEASE and tools/process/defect-ledger.md restated to the ruled rule. Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01Qj4hZFmT3jz71cMudY2wno --- CLAUDE.md | 16 +- tools/process/defect-ledger.md | 64 +++++--- tools/verify/check_release_ready.py | 243 +++++++++++++++++++++++++++- 3 files changed, 291 insertions(+), 32 deletions(-) diff --git a/CLAUDE.md b/CLAUDE.md index c992810c..9c6fbbc8 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -134,8 +134,8 @@ TRIGGER you found a defect, you are choosing what to work on next, or you are a RULE record it in `.claude-local/DEFECTS.md` — never a note, a gate-findings archive, or a handoff line, and never a second copy. Verify every entry AT THE ARTIFACT before recording it open or closed. GREP LOOSELY. Burn down in FILE-SIZED - BATCHES. NO RELEASE IS CUT WHILE THE LEDGER IS NON-EMPTY; release pressure never - defers a finding to next-touch debt. The target is ZERO KNOWN defects, not zero. + BATCHES. A RELEASE BLOCKS ONLY ON OPEN CONTENT BEDROCK (`check_release_ready.py`); + ORDINARY ships as a public erratum issue. Never lower a grade to release. COST a DOI is permanent and four releases already carry latent flaws — a defect fixed before a release costs one gate round, one shipped inside a PDF is forever. READ tools/process/defect-ledger.md @@ -636,12 +636,12 @@ RULE `python tools/verify/check_release_ready.py ` must EXIT 0 and its deterministic preconditions — Engineer's Takes filled (recursive glob over `ZeroParadox/**/*.lean`), build-script hashes against `register.md`, the `LEAN_CUSTOM_REGISTRY` invariant, `.zenodo.json` valid and its description current, - no conflict markers, a `## ` entry in `RELEASES.md`, every linked PDF present. - **NO RELEASE WHILE `DEFECTS.md` IS NON-EMPTY.** Then STOP: creating the release is - Tim's command, never an agent's. Major = a new formal layer or a theorem status - change; minor = a substantive feedback round or accumulated updates. Never release - per-PR. A Lean-only milestone is an explicit QUESTION for Tim, not an automatic - trigger either way. + no conflict markers, a `## ` entry in `RELEASES.md`, every linked PDF present, + **NO OPEN CONTENT BEDROCK IN `DEFECTS.md`** (ordinary ships as erratum issues). Then + STOP: creating the release is Tim's command, never an agent's. Major = a new formal + layer or a theorem status change; minor = a substantive feedback round or + accumulated updates. Never release per-PR. A Lean-only milestone is an explicit + QUESTION for Tim, not an automatic trigger either way. COST a release mints a PERMANENT Zenodo DOI and four already carry latent flaws that cannot be withdrawn. Deposited FILES are frozen; record METADATA can still be corrected in the Zenodo UI, so a wrong release description is fixable and a flaw diff --git a/tools/process/defect-ledger.md b/tools/process/defect-ledger.md index ba645efb..ae4f6ca5 100644 --- a/tools/process/defect-ledger.md +++ b/tools/process/defect-ledger.md @@ -18,16 +18,16 @@ forbade the wrong home without providing a right one, and defects scattered into archives that this same file says to *"write, never expect to read."* Tim's observation on reviewing the triage: the classification should have been there from the start. -**The standing rule it serves: NO RELEASE IS CUT WHILE THE LEDGER IS NON-EMPTY.** A GitHub Release -mints a permanent Zenodo DOI; four already carry latent flaws that cannot be withdrawn. A defect fixed -before a release costs one gate round; a defect shipped in one is permanent. **Never rank release -readiness above defect elimination, and never let release pressure defer a finding to next-touch debt.** -(Memory `feedback_no_release_until_defects_zero`.) One correction worth carrying: deposited **files** in -a Zenodo snapshot are frozen, but record **metadata** can be corrected through the Zenodo web UI — so a -wrong claim in a release *description* is fixable; a flaw inside a published PDF is not. +**The release rule it serves: A RELEASE BLOCKS ONLY ON AN OPEN CONTENT BEDROCK UNIT.** Tim, +2026-10-08, made permanent 2026-10-30: *"Content bedrock for now. Ordinary findings can pass for +now."* — *"Yes, this would imply the bedrock rule is permanent."* The rule in full is in the section +below. A GitHub Release mints a permanent Zenodo DOI; four already carry latent flaws that cannot be +withdrawn. One distinction worth carrying: deposited **files** in a Zenodo snapshot are frozen, but +record **metadata** can be corrected through the Zenodo web UI — so a wrong claim in a release +*description* is fixable; a flaw inside a published PDF is not. -**The target is ZERO KNOWN DEFECTS, not zero defects.** The gates always find something — that is why -the severity-tiered cap exists. Do not blur the two, and do not imply a clean sheet. +**Ordinary findings still get burned down.** The rule changes what blocks a release, not what counts +as a defect: every open ordinary content finding is either fixed or carried on a public erratum issue. **Rules for the ledger:** - **Verify every entry AT THE ARTIFACT** before recording it open or closed. It goes stale exactly like @@ -43,17 +43,34 @@ the severity-tiered cap exists. Do not blur the two, and do not imply a clean sh --- -## No release while known defects are outstanding +## A release blocks only on open content bedrock -*Migrated from a private memory, 2026-08-28.* Tim, 2026-08-01: *"I've got no desire to cut 5.0 right +**The rule (Tim, 2026-10-08; permanent 2026-10-30).** A release BLOCKS only on an open +`DEFECTS.md` unit tagged **content** and **BEDROCK** (BEDROCK-CANDIDATE included until it is +graded). Content is what ships: the root PDFs and the prose of `scripts/build_*.py`, +`ZeroParadox/**`, root `.md`, `.zenodo.json` and the HTML pages. It does NOT block on ORDINARY +findings, tooling entries, published-process (`.claude/commands/**`) entries, or Tim-gated questions. +`tools/verify/check_release_ready.py` enforces this mechanically: it reads `DEFECTS.md` from the main +checkout's `.claude-local`, applies the open-unit rule printed in that file's header, fails on every +open content bedrock unit and on every open unit whose `[kind · SEVERITY]` tag cannot be read, fails +with a distinct UNREADABLE status when the ledger cannot be read, and prints the counts by kind and +severity on every run. `--ledger-only` runs that leg alone. + +**Ordinary content findings ship as public erratum issues.** One issue per defect class per +document, labels `erratum` and `open question`. The ledger stays the single source, with the issue +number beside each public row. Tooling, process, reviewer and outreach material stays private +(R-ISSUES). + +**What release pressure may never do:** lower a bedrock grade, or file a bedrock item as an erratum. + +**The pre-2026-10-08 rule, for history.** Tim, 2026-08-01: *"I've got no desire to cut 5.0 right now… I want to get that to as close to zero as we possibly can before a damn thing goes forward to -yet another release."* +yet another release."* (Migrated from a private memory, 2026-08-28.) That rule blocked a release on +any open defect. -**Why:** a GitHub Release mints a permanent Zenodo DOI snapshot. **Four existing releases already -carry latent flaws that cannot be withdrawn**, and each new release freezes the current defect set -into another citable permanent record. A defect fixed before a release costs one gate round; one -shipped in a release is forever. **Release pressure must never be why a finding is deferred to -next-touch debt.** +**Why bedrock still blocks:** a GitHub Release mints a permanent Zenodo DOI snapshot. **Four existing +releases already carry latent flaws that cannot be withdrawn**, and each new release freezes the +defect set it carries into another citable permanent record. ⚠ **THE DISTINCTION THAT MAKES THIS ACTIONABLE, because half of it is fixable:** deposited **files** in a Zenodo snapshot are frozen forever, but **record METADATA** — the `.zenodo.json`-derived @@ -61,11 +78,12 @@ description — *can* be corrected after publication through the Zenodo web UI. published PDF is permanent and a wrong claim in a release DESCRIPTION is not. **Verify before telling Tim something is unfixable.** -- When the agenda is ambiguous, rank **defect elimination above release readiness**, and say so. -- Never present cutting a release as the recommended next step while the ledger is non-empty. -- "As close to zero as possible" is reachable as **zero KNOWN defects**, not zero defects — the gates - always find something. State that distinction rather than implying a clean sheet. +- Never present cutting a release as the recommended next step while an open content bedrock unit + exists, or while an open ordinary content finding is neither fixed nor on a public erratum issue. +- Grade before releasing: a BEDROCK-CANDIDATE blocks until it is graded, and grading it ORDINARY to + unblock a release is the one move this rule exists to prevent. - **Verify each defect AT THE ARTIFACT before recording it open or closed.** Notes self-report status and have been false in both directions; a ledger built from notes inherits their rot. -- `check_release_ready.py ` stays mandatory, but passing it is **not** evidence the ledger is - empty — it checks mechanical preconditions, not open findings. +- `check_release_ready.py ` stays mandatory. Its ledger leg reads the TAGS: a bedrock finding + recorded under the wrong kind or grade passes it, so a green leg is evidence about the ledger as + written, not about the corpus. diff --git a/tools/verify/check_release_ready.py b/tools/verify/check_release_ready.py index cc902706..af053877 100644 --- a/tools/verify/check_release_ready.py +++ b/tools/verify/check_release_ready.py @@ -10,6 +10,11 @@ Exit 1 = one or more blocking checks failed -> NO-GO. Exit 2 = usage error. + python check_release_ready.py --ledger-only [--defects PATH] +runs only the defect-ledger leg (the release rule: no open content BEDROCK / BEDROCK-CANDIDATE +unit and no untagged open unit in DEFECTS.md): exit 0 CLEAR, 1 BLOCKED, 3 UNREADABLE. `--defects` +overrides the ledger path in either mode; by default it is the MAIN checkout's .claude-local. + Design: the deterministic checks are auto-verified and split into [FAIL] blocking, high-confidence, unambiguous; [WARN] best-effort / fragile-to-parse / hygiene -> surfaced, not blocking; @@ -408,6 +413,179 @@ def c_untracked_pdfs(): return not pdfs +# --------------------------------------------------------------------------- the defect ledger +# +# The release rule (Tim, 2026-10-08, made permanent 2026-10-30): a release blocks only on OPEN +# `DEFECTS.md` units tagged CONTENT and BEDROCK (BEDROCK-CANDIDATE included, until graded). Content +# is what ships: the root PDFs and the prose of `scripts/build_*.py`, `ZeroParadox/**`, root `.md`, +# `.zenodo.json`, the HTML pages. ORDINARY content findings ship as public erratum issues; tooling, +# published-process (`.claude/commands/**`) entries and Tim-gated questions do not block. +# +# The open-unit test is the one printed in DEFECTS.md's own header, applied verbatim: a heading +# (`##` to `#####`) is open if it carries the word OPEN and none of the closing words, or says +# PARTLY CLOSED / still OPEN; a table row whose first cell is a bold or backticked id is judged by the +# same test over its first two cells. An open unit whose tag cannot be read cannot be graded, so it +# FAILS CLOSED rather than being folded into a bucket. + +DEFECTS_REL = os.path.join('.claude-local', 'DEFECTS.md') +CLOSING_WORDS = ('CLOSED', 'WITHDRAWN', 'RESOLVED', 'RETRACTED', 'SUPERSEDED', 'DISCHARGED', 'ACCEPTED') +_HEADING = re.compile(r'^(#{2,5})\s+(.*)$') +_ROW = re.compile(r'^\|\s*(\*\*[^*|]+\*\*|`[^`|]+`)\s*\|([^|]*)\|') +_TAG = re.compile(r'\[([a-z][a-z+-]*)\s*·\s*([^\]]+)\]') +_SEVERITIES = ('BEDROCK', 'BEDROCK-CANDIDATE', 'ORDINARY') +_KINDS = ('content', 'tooling', 'published-process') + +# R-ZERONULL: three distinct VALUES, never one value with three messages. +LEDGER_CLEAR = 'CLEAR' # read, and no open content bedrock / untagged unit +LEDGER_BLOCKED = 'BLOCKED' # read, and at least one blocking unit +LEDGER_UNREADABLE = 'UNREADABLE' # not read at all; NOT evidence of a clear ledger + + +def defects_path(): + """(path, how) - DEFECTS.md in the MAIN checkout's `.claude-local`. + + `.claude-local` is its own gitignored repository, so a worktree does not carry it; the main + checkout is the parent of the shared git directory, which is the same answer from either. `None` + for the path means the location could not be derived, and the caller reports it as UNREADABLE.""" + rc, out = git('rev-parse', '--path-format=absolute', '--git-common-dir') + if rc == 0 and out.strip(): + main_root = os.path.dirname(os.path.normpath(out.strip())) + return os.path.join(main_root, DEFECTS_REL), 'main checkout (from the shared git dir)' + return None, 'main checkout could not be derived (rev-parse exit %s)' % rc + + +def _is_open(text): + if 'PARTLY CLOSED' in text or re.search(r'\bstill OPEN\b', text): + return True + if not re.search(r'\bOPEN\b', text): + return False + return not any(re.search(r'\b%s\b' % w, text) for w in CLOSING_WORDS) + + +def _grade(tag_kind, tag_sev): + """(kind, severity) for one tag, or None if either half is unreadable. + + Kind: anything naming `content` (`content+tooling` included) is content, because content is what + ships and the worse reading wins; `published-process` is itself; `tooling` and the bare `process` + are tooling (the ruling: tooling is everything else). Severity: any BEDROCK-prefixed grade is + bedrock (`BEDROCK-class` included), CANDIDATE kept apart; any ORDINARY-prefixed grade is ordinary + (`ORDINARY (recorded BLOCKING)` included - the audit's scale has no BLOCKING grade).""" + k = tag_kind.strip() + if 'content' in k.split('+'): + kind = 'content' + elif k == 'published-process': + kind = 'published-process' + elif k in ('tooling', 'process'): + kind = 'tooling' + else: + return None + s = tag_sev.strip().upper() + if s.startswith('BEDROCK'): + sev = 'BEDROCK-CANDIDATE' if s.startswith('BEDROCK-CANDIDATE') or s.startswith('BEDROCK CANDIDATE') \ + else 'BEDROCK' + elif s.startswith('ORDINARY'): + sev = 'ORDINARY' + else: + return None + return kind, sev + + +def _rank(g): + """Lower is more blocking: a release-blocking grade first, then by severity, content first.""" + blocks = g[0] == 'content' and g[1] != 'ORDINARY' + return (not blocks, _SEVERITIES.index(g[1]), g[0] != 'content') + + +def _unit_grade(text): + """The most blocking readable tag in `text`, or None when no tag reads.""" + grades = [g for g in (_grade(m.group(1), m.group(2)) for m in _TAG.finditer(text)) if g] + return min(grades, key=_rank) if grades else None + + +def scan_defects(text): + """{'units': [(line_no, kind, sev, label)], 'untagged': [(line_no, label)]} over open units.""" + units, untagged = [], [] + fence = False + for n, raw in enumerate(text.splitlines(), 1): + ln = raw.rstrip() + if ln.lstrip().startswith('```'): + fence = not fence + continue + if fence: + continue + m = _HEADING.match(ln) + if m: + judged, label = m.group(2), m.group(2) + else: + r = _ROW.match(ln) + if not r: + continue + judged, label = r.group(1) + ' | ' + r.group(2), r.group(1) + if not _is_open(judged): + continue + label = label.strip()[:90] + g = _unit_grade(ln) + if g is None: + untagged.append((n, label)) + else: + units.append((n, g[0], g[1], label)) + return {'units': units, 'untagged': untagged} + + +def c_defects_ledger(path=None): + """The release rule, mechanically. Returns (status, detail, counts, path_read). + + `status` is one of LEDGER_CLEAR / LEDGER_BLOCKED / LEDGER_UNREADABLE. A missing or unreadable + ledger is UNREADABLE - a distinct value from CLEAR, failing the gate with its own message, + because an absent list of defects is not a list with no defects in it.""" + how = 'given on the command line' + if path is None: + path, how = defects_path() + if path is None: + fail('Defect ledger UNREADABLE - %s; a release cannot be graded without it' % how) + return LEDGER_UNREADABLE, how, None, None + try: + text = read(path) + except (OSError, UnicodeDecodeError) as exc: + fail('Defect ledger UNREADABLE - %s (%s): %s. This is NOT a clear ledger' + % (path, how, exc.__class__.__name__)) + return LEDGER_UNREADABLE, str(exc), None, path + res = scan_defects(text) + counts = {(k, s): 0 for k in _KINDS for s in _SEVERITIES} + for _, k, s, _ in res['units']: + counts[(k, s)] += 1 + counts['untagged'] = len(res['untagged']) + blocking = [u for u in res['units'] if u[1] == 'content' and u[2] in ('BEDROCK', 'BEDROCK-CANDIDATE')] + for n, k, s, label in blocking: + fail('Open content %s defect (DEFECTS.md:%d) - %s' % (s, n, label)) + for n, label in res['untagged']: + fail('Open defect with no readable [kind · SEVERITY] tag (DEFECTS.md:%d) - cannot be graded, ' + 'so it blocks - %s' % (n, label)) + for n, k, s, label in res['units']: + if k != 'content' and s != 'ORDINARY': + warn('Open %s %s defect (DEFECTS.md:%d, does not block a release) - %s' % (k, s, n, label)) + ordc = counts[('content', 'ORDINARY')] + if ordc: + warn('%d open ORDINARY content defect(s) - owed as public erratum issues (or fixes), not a ' + 'release blocker' % ordc) + status = LEDGER_BLOCKED if (blocking or res['untagged']) else LEDGER_CLEAR + detail = '%d blocking (content bedrock %d, untagged %d)' % ( + len(blocking) + len(res['untagged']), len(blocking), len(res['untagged'])) + return status, detail, counts, path + + +def print_defect_counts(counts): + print(' open units by kind x severity (the rule in DEFECTS.md\'s header):') + print(' %-18s %8s %18s %9s %6s' % ('kind', 'BEDROCK', 'BEDROCK-CANDIDATE', 'ORDINARY', 'total')) + grand = 0 + for k in _KINDS: + row = [counts[(k, s)] for s in _SEVERITIES] + grand += sum(row) + print(' %-18s %8d %18d %9d %6d' % (k, row[0], row[1], row[2], sum(row))) + print(' %-18s %8s %18s %9s %6d' % ('untagged', '', '', '', counts['untagged'])) + print(' %-18s %8s %18s %9s %6d' % ('all open units', '', '', '', grand + counts['untagged'])) + + # --------------------------------------------------------------------------- runner def line(status, name, detail=''): @@ -483,6 +661,35 @@ def selftest(): git = real_git fails[:], warns[:] = saved + # The release rule's open-unit and grade reading, over in-memory ledgers. + print(' DEFECT LEDGER (MUST FIRE on content bedrock / untagged, MUST SUPPRESS the rest)') + + def _blocks(text): + r = scan_defects(text) + return bool(r['untagged']) or any(k == 'content' and s != 'ORDINARY' for _, k, s, _ in r['units']) + for label, text, want in ( + ('open content BEDROCK blocks', '## X-1 - **OPEN** `[content · BEDROCK]`\n', True), + ('open BEDROCK-class blocks', '#### X-2 OPEN `[content · BEDROCK-class]`\n', True), + ('open content CANDIDATE blocks', '## X-3 OPEN [content · BEDROCK-CANDIDATE]\n', True), + ('open untagged heading blocks', '## X-4 - **OPEN 2026-10-31**\n', True), + ('open bedrock table row blocks', '| **X-5** | OPEN | f `[content · BEDROCK]` |\n', True), + ('PARTLY CLOSED bedrock blocks', '## X-6 PARTLY CLOSED [content · BEDROCK]\n', True), + ('closed content BEDROCK passes', '## X-7 **CLOSED** (was OPEN) [content · BEDROCK]\n', False), + ('open content ORDINARY passes', '## X-8 OPEN [content · ORDINARY]\n', False), + ('open tooling BEDROCK passes', '## X-9 OPEN [tooling · BEDROCK]\n', False), + ('fenced heading is not a unit', '```\n## X-10 OPEN\n```\n', False)): + ok = _blocks(text) is want + bad += 0 if ok else 1 + print(' %-34s %s' % (label, 'ok' if ok else '*** WRONG ***')) + saved = (fails[:], warns[:]) + try: + st = c_defects_ledger(os.path.join(HERE, 'no-such-dir', 'DEFECTS.md'))[0] + finally: + fails[:], warns[:] = saved + ok = st == LEDGER_UNREADABLE and st != LEDGER_CLEAR + bad += 0 if ok else 1 + print(' %-34s %s' % ('missing ledger is UNREADABLE', 'ok' if ok else '*** got %s ***' % st)) + print('\n selftest: %s' % ('PASS' if not bad else 'FAIL (%d)' % bad)) return 1 if bad else 0 @@ -493,8 +700,31 @@ def main(): print('ZP Release-Readiness Gate - CONTROLS') print('=' * 64) return selftest() + defects_override = None + if '--defects' in args: + i = args.index('--defects') + if i + 1 >= len(args): + print('usage: --defects needs a path') + return 2 + defects_override = args[i + 1] + del args[i:i + 2] + if args and args[0] == '--ledger-only': + # The defect-ledger leg alone. Exit 0 CLEAR, 1 BLOCKED, 3 UNREADABLE - three values, so a + # caller branching on the code cannot read an unread ledger as a clear one. + st, detail, counts, path = c_defects_ledger(defects_override) + print('defect ledger: %s - %s' % (st, detail)) + print(' %s: %s' % ('COULD NOT READ' if st == LEDGER_UNREADABLE else 'read', + path or '(no path derived)')) + if counts is not None: + print_defect_counts(counts) + for w in warns: + print(' ! %s' % w) + for f in fails: + print(' X %s' % f) + return {LEDGER_CLEAR: 0, LEDGER_BLOCKED: 1, LEDGER_UNREADABLE: 3}[st] if not args or args[0].startswith('-'): - print('usage: python %s (e.g. v2.7)' % SELF) + print('usage: python %s [--defects PATH] (e.g. v2.7)' % SELF) + print(' python %s --ledger-only [--defects PATH]' % SELF) return 2 tag = args[0] @@ -511,6 +741,14 @@ def main(): line('PASS' if c_conflict_markers() else 'FAIL', 'No conflict markers (tracked files)') line('PASS' if c_releases_entry(tag) else 'FAIL', f'RELEASES.md has "## {tag}" entry') line('PASS' if c_doc_links() else 'FAIL', 'README/GUIDE linked PDFs exist') + d_status, d_detail, d_counts, d_path = c_defects_ledger(defects_override) + line({LEDGER_CLEAR: 'PASS', LEDGER_BLOCKED: 'FAIL', LEDGER_UNREADABLE: 'FAIL'}[d_status], + 'No open content BEDROCK / BEDROCK-CANDIDATE or untagged defect', + '%s: %s' % (d_status, d_detail)) + print(' %s: %s' % ('COULD NOT READ' if d_status == LEDGER_UNREADABLE else 'read', + d_path or '(no path derived - see the failure below)')) + if d_counts is not None: + print_defect_counts(d_counts) print('BEST-EFFORT / HYGIENE (warn-only):') line('PASS' if c_register_vs_script_version() else 'WARN', 'register <-> script VERSION') @@ -537,6 +775,9 @@ def main(): 'Companion synced for every formal doc whose version bumped.', 'Major-vs-minor version decision is correct; Lean-only-change release question raised if applicable.', '.zenodo.json description reflects this release (cannot be updated retroactively).', + 'Every open ORDINARY content finding in DEFECTS.md is fixed or on a public erratum issue ' + '(labels erratum, open question), its issue number beside the ledger row. No bedrock item ' + 'is filed as an erratum, and no grade was lowered to make this release.', 'Release body drafted and Tim approved it BEFORE `gh release create`.', 'Post-release: confirm the Zenodo snapshot minted. README badge is the CONCEPT DOI ' '(auto-resolves to latest) - NO per-release badge edit needed.', From 1b4288bdaa8b4ce0c9f12b0309e06a8a2e4c773a Mon Sep 17 00:00:00 2001 From: probe Date: Sat, 31 Oct 2026 12:36:43 -0500 Subject: [PATCH 002/182] README: Axiom Ledger badge; scope its label, run it weekly The badge sits with the other CI badges. The workflow's name, which GitHub uses as the badge label, now reads "Axiom Ledger (choice-free computability)", so it does not read as a check of T-SNAP or CLAIMS.md. A weekly schedule re-checks the ledger on main, since the path filters miss Kleene.lean and its imports. Editorial r2 PASS, adversary r2 PASS (two ordinary findings carried as outstanding); R-AR confirmed by Tim 2026-10-31. Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01Qj4hZFmT3jz71cMudY2wno --- .github/workflows/axiom_ledger.yml | 7 ++++++- README.md | 2 +- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/.github/workflows/axiom_ledger.yml b/.github/workflows/axiom_ledger.yml index f79456f4..51cdfec5 100644 --- a/.github/workflows/axiom_ledger.yml +++ b/.github/workflows/axiom_ledger.yml @@ -1,4 +1,4 @@ -name: Axiom Ledger +name: Axiom Ledger (choice-free computability) # The axiom-profile gate. Re-elaborates ZeroParadox/Meta/AxiomLedger.lean, whose `#eval` # recomputes every ledgered declaration's axiom profile with the vendored auditor @@ -7,8 +7,13 @@ name: Axiom Ledger # "Complete Project" also fails on drift; this job isolates it and shows the table. Fires on a # toolchain or Mathlib bump too, because that is when a profile drifts. A last step checks the # gate fails closed: a ledger with one planted wrong profile must come out red. +# The path filters below do not cover the ledgered files' whole import closure (Kleene.lean and +# its imports, for one), so a weekly scheduled run re-checks the ledger on the default branch +# whatever changed. GitHub disables scheduled runs after 60 days with no repository activity. on: workflow_dispatch: + schedule: + - cron: '17 6 * * 1' push: branches: - main diff --git a/README.md b/README.md index 0b95fef0..713aaff1 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ *A Lean 4 formalization: one diagonal fixed point at the bottom of five mathematical fields - the snap off it a theorem, the recurrence machine-verified, the boundary proved.* -[![Minimal Core](https://github.com/timbrigham/ZeroParadox/actions/workflows/minimal_core.yml/badge.svg)](https://github.com/timbrigham/ZeroParadox/actions/workflows/minimal_core.yml) [![Complete Project](https://github.com/timbrigham/ZeroParadox/actions/workflows/lean_action_ci.yml/badge.svg)](https://github.com/timbrigham/ZeroParadox/actions/workflows/lean_action_ci.yml) [![Sponsor](https://img.shields.io/badge/Sponsor-%E2%9D%A4-ff69b4?logo=githubsponsors&logoColor=white)](https://github.com/sponsors/timbrigham) [![DOI](https://zenodo.org/badge/DOI/10.5281/zenodo.20060860.svg)](https://doi.org/10.5281/zenodo.20060860) +[![Minimal Core](https://github.com/timbrigham/ZeroParadox/actions/workflows/minimal_core.yml/badge.svg)](https://github.com/timbrigham/ZeroParadox/actions/workflows/minimal_core.yml) [![Complete Project](https://github.com/timbrigham/ZeroParadox/actions/workflows/lean_action_ci.yml/badge.svg)](https://github.com/timbrigham/ZeroParadox/actions/workflows/lean_action_ci.yml) [![Axiom Ledger (choice-free computability)](https://github.com/timbrigham/ZeroParadox/actions/workflows/axiom_ledger.yml/badge.svg)](https://github.com/timbrigham/ZeroParadox/actions/workflows/axiom_ledger.yml) [![Sponsor](https://img.shields.io/badge/Sponsor-%E2%9D%A4-ff69b4?logo=githubsponsors&logoColor=white)](https://github.com/sponsors/timbrigham) [![DOI](https://zenodo.org/badge/DOI/10.5281/zenodo.20060860.svg)](https://doi.org/10.5281/zenodo.20060860) Code: Apache License, Version 2.0. Documents (the PDFs, the site layouts, and every Markdown file except `CLAUDE.md` and those under `tools/` and `.claude/`): CC BY-NC-ND 4.0. Third-party material keeps its own licence. See [NOTICE](NOTICE). From 6639c26998ac0af4e1004de03440118f1774cf2a Mon Sep 17 00:00:00 2001 From: probe Date: Sat, 31 Oct 2026 15:00:39 -0500 Subject: [PATCH 003/182] Prior-art ladder: formal theoremsearch and a Lean-libraries rung Rung B now requires one phrasing with formality "both" and states the measured 2026-10-31 formal coverage, so a formal null reads as bounded. New rung B2 searches Lean libraries: LeanExplore search_summary, then get_source_code on candidates, then GitHub code search language:Lean for the Reservoir long tail. tools/process/prior-art.md and CLAUDE.md R-PRIORART name the new ladder order (R-PRIORART line count unchanged). Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01Qj4hZFmT3jz71cMudY2wno --- .claude/commands/prior-art-review.md | 13 ++++++++++--- CLAUDE.md | 8 ++++---- tools/process/prior-art.md | 24 ++++++++++++++++++------ 3 files changed, 32 insertions(+), 13 deletions(-) diff --git a/.claude/commands/prior-art-review.md b/.claude/commands/prior-art-review.md index 8be38452..b76ce809 100644 --- a/.claude/commands/prior-art-review.md +++ b/.claude/commands/prior-art-review.md @@ -112,12 +112,19 @@ Evaluate only **synthesis / bridge claims**: a distinctive claim that unifies or 2. **DISPLAY is this rung's own exposure.** `theoremsearch` returns a capped list, so a scout who reads the cap and stops **has measured the cap, not the literature**. Re-run untruncated. 3. **IGNORE the `similarity`/`score` field.** The 7-case calibration of 2026-08-23 found **no threshold that keeps the garbage out without discarding the find** — noise scored 0.69 while genuine prior art scored 0.61. ⚠ That is a claim about THRESHOLDS, **not** that the score runs backwards. Measured 2026-08-24 across two independent probes: exact statements of Lawvere's fixed-point theorem returned 0.676, 0.683 and 0.686, other exact hits 0.834 and 0.777, and relevant fixed-point theorems 0.732 and 0.728 against irrelevant ones at 0.687 and 0.680. **Rank by reading; never filter on the number.** 4. ⚠ **`paper_filter` takes a TITLE, not an arXiv id.** Passing an id returns empty and reads exactly like absence. - - **Rung C — the open web.** Run it when rung B returns no good match, **and also when rung B returns a neighbourhood hit whose real source still needs identifying**. Everything pre-arXiv lives here — Lawvere 1969, Aczel 1988, Ostrowski, Gentzen, Carlström. `theoremsearch` cannot return those as sources, only as work other people cite, **and the reason is the corpus boundary rather than a quirk: the index is built from arXiv, so a work published before arXiv existed appears in the index only inside the reference lists of papers that cite it.** A Gentzen-1936 query returns modern arXiv papers citing Gentzen, never Gentzen. + 5. **AT LEAST ONE PHRASING RUNS WITH `formality: "both"`** (or `"formal"`). The default is `"informal"`, papers and textbooks only, so without it this rung never searches a Lean library. Formal coverage is bounded, measured 2026-10-31: formal mode (source `Lean Repo`) HITS Mathlib v4.27, pfr and carleson, and MISSES ImperialCollegeLondon/FLT, teorth/equational_theories and this repository itself. **A formal null is a statement about those repositories only**, which is why rung B2 runs regardless. + - **Rung B2 — Lean libraries.** Reaches Lean declarations that rung B's formal index does not hold. Run it whenever the claim could exist as a Lean declaration. + 1. **LeanExplore** — `mcp__lean-explore__search_summary(query, limit)`, **at least two phrasings** varied along the `R-NOTINLIB` axes. Each hit is `{id, name, description}`. Measured 2026-10-31: a Frey-curve query returned the Imperial FLT project's own `FreyPackage.*` declarations, which rung B misses; a Pataraia query returned only Mathlib's `OrderHom.lfp`. + 2. **For any candidate, `mcp__lean-explore__get_source_code(declaration_id)`.** Its output IS the Lean declaration, so for a Lean declaration it is the source in hand that rung D asks for. The `description` field is an AI-generated paraphrase: a snippet, like rung B's `slogan`, never the source. + 3. **The long tail of Reservoir**, the Lean package registry (913 packages on 2026-10-31, and no search service covers them): `mcp__github__search_code` with `language:Lean`, on keywords and on the declaration names a library would likely choose. + 4. **ITS NULL IS UNINFORMATIVE**, for the same coverage reason as rung B's. + 5. **LeanExplore is a hosted service.** It allows 30 requests per minute per client IP, counting initialize and tool discovery; past that it answers HTTP 429 with `Retry-After`, which is a wait, never a null. The server sees every query, so phrase it neutrally rather than pasting unpublished claim text. + - **Rung C — the open web.** Run it when rungs B and B2 return no good match, **and also when either returns a neighbourhood hit whose real source still needs identifying**. Everything pre-arXiv lives here — Lawvere 1969, Aczel 1988, Ostrowski, Gentzen, Carlström. `theoremsearch` cannot return those as sources, only as work other people cite, **and the reason is the corpus boundary rather than a quirk: the index is built from arXiv, so a work published before arXiv existed appears in the index only inside the reference lists of papers that cite it.** A Gentzen-1936 query returns modern arXiv papers citing Gentzen, never Gentzen. - **Rung D — RETRIEVE AND READ THE FULL SOURCE.** Use WebFetch; if a domain is not reachable that way, download it via PowerShell `Invoke-WebRequest -Uri -OutFile .claude-local/papers/.pdf` and open it with the Read tool (this works for any publisher — arXiv, Dagstuhl/LIPIcs, nLab, journal sites). **Download straight into `.claude-local/papers/` under that name** — one destination, so filing is not a second step anyone can skip — and **validate before you rely on it** (a tiny PDF is an error page, not a paper). ⚠ **This is the one place the read-only rule yields, and it is deliberate**: filing the source is what feeds rung A for every later scout, so a review that reads a PDF and leaves nothing behind makes the library decay while looking like diligence. - ⚠⚠ **RUNGS A–C ARE DISCOVERY. ONLY RUNG D IS VERIFICATION.** **Draft from source, not from snippets — and a `theoremsearch` theorem body is a snippet, not a passage in hand.** Measured 2026-08-23: a returned body read as our recorded citation renumbered for a journal version, and the PDF showed the two statements were different (connexity versus splitting). The returned `slogan` field is an **LLM paraphrase**, `label`/`link` come back **null**, and ambient hypotheses are inconsistently included. If you genuinely cannot read the source, say so and treat the citation as **unverified**. + ⚠⚠ **RUNGS A–C ARE DISCOVERY. ONLY RUNG D IS VERIFICATION** (for a Lean declaration, rung B2's `get_source_code` is that retrieval). **Draft from source, not from snippets — and a `theoremsearch` theorem body is a snippet, not a passage in hand.** Measured 2026-08-23: a returned body read as our recorded citation renumbered for a journal version, and the PDF showed the two statements were different (connexity versus splitting). The returned `slogan` field is an **LLM paraphrase**, `label`/`link` come back **null**, and ambient hypotheses are inconsistently included. If you genuinely cannot read the source, say so and treat the citation as **unverified**. - ⚠ **A NULL FROM RUNG B IS UNINFORMATIVE ON ITS OWN.** The index is coverage-bounded and the bound is invisible from the result — a paper this project holds on disk is verifiably absent from it. Never write "no prior art exists" from rung B, and do not record "none located as of <date>" until rung C has also run. + ⚠ **A NULL FROM RUNG B IS UNINFORMATIVE ON ITS OWN.** The index is coverage-bounded and the bound is invisible from the result — a paper this project holds on disk is verifiably absent from it. Never write "no prior art exists" from rung B, and do not record "none located as of <date>" until rungs B2 and C have also run. 5. **Verdict for this claim:** - **Prior art exists and is already cited** in the content → OK (after confirming the citation is real and correctly directed). - **Prior art exists and is NOT cited** → FAIL for this claim: give the full citation (author, year, venue), state the claim's honest *delta* against it (what the framework genuinely adds), and the credit direction (framework is an instance joining the program, never subsuming it). diff --git a/CLAUDE.md b/CLAUDE.md index 9c6fbbc8..3ca165f3 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -597,10 +597,10 @@ TRIGGER you can state the claim in one sentence of standard mathematical Englis RULE three steps, ~10 minutes, BEFORE building. (1) grep our own corpus. (2) grep the pinned Mathlib for the CONCEPT — and if the claim is a Lean statement, RUN `exact?`; it searches statement SHAPE, not names, and reaches attribute-generated siblings - that have no source line. (3) one literature search, run as the four-rung LADDER: - `.claude-local/papers/` → `theoremsearch` → the open web → RETRIEVE THE FULL - DOCUMENT. Three phrasings minimum at rung 2; ignore its similarity score; its null - is UNINFORMATIVE. Rungs 1–3 are DISCOVERY, only rung 4 is VERIFICATION — a returned + that have no source line. (3) one literature search, run as the LADDER: papers → + `theoremsearch` (one phrasing `formality: "both"`) → Lean libraries (LeanExplore, + GitHub `language:Lean`) → open web → RETRIEVE. Three phrasings at `theoremsearch`; + ignore its score; every null is UNINFORMATIVE. Only RETRIEVAL is VERIFICATION — a theorem body is not a passage in hand. Standard framing, once found, is ADOPTED, not noted and worked around; check purity before swapping a proof. `/prior-art-review` is the deep gate, a fresh agent, and it records its verdict in the verdictLedger. diff --git a/tools/process/prior-art.md b/tools/process/prior-art.md index 7bddb413..bae57daf 100644 --- a/tools/process/prior-art.md +++ b/tools/process/prior-art.md @@ -52,7 +52,7 @@ precedent: no regression. **3. One literature search** if the object has a name (Glauber dynamics, coalgebra, covering relation). **Run the LADDER in § 2a** — it has four rungs and the last one is not optional. -## 2a. The literature-search LADDER — four rungs, and a citation is not confirmed until rung 4 +## 2a. The literature-search LADDER — papers → theoremsearch (formal too) → Lean libraries → open web → retrieve; a citation is not confirmed until rung 4 **Adopted 2026-08-23, after calibrating `theoremsearch` (an MCP theorem-statement search over the arXiv-era literature) against cases where this project already knew the answer. The measurements are @@ -77,9 +77,19 @@ the thing a title search cannot reach. Three standing rules, each measured: API's confidence. - **A NULL RESULT IS UNINFORMATIVE.** The index is coverage-bounded and the bound is invisible from the result. Never write "no prior art exists" from a rung-2 null; it does not even license - "none located as of <date>" on its own, because rung 3 has not run yet. - -**Rung 3 — the open web.** Runs when rung 2 returns no good match, **and also when it returns a + "none located as of <date>" on its own, because rungs 2b and 3 have not run yet. +- **ONE PHRASING RUNS WITH `formality: "both"`.** The default is `"informal"`, so without it no Lean + library is searched. Measured 2026-10-31: formal mode reaches Mathlib v4.27, pfr and carleson, and + misses ImperialCollegeLondon/FLT, teorth/equational_theories and ZeroParadox itself. + +**Rung 2b — Lean libraries.** LeanExplore (`search_summary`, two phrasings minimum; then +`get_source_code` on any candidate, whose output is the declaration itself, while `description` is an +AI paraphrase), then GitHub code search with `language:Lean` for the long tail of Reservoir, which no +search service covers. Measured 2026-10-31: a Frey-curve query reached the Imperial FLT project's own +declarations that rung 2 misses. Its null is uninformative too. It is a hosted service: it rate-limits +per IP and sees every query. Full rules: `.claude/commands/prior-art-review.md`, rung B2. + +**Rung 3 — the open web.** Runs when rungs 2 and 2b return no good match, **and also when it returns a neighbourhood hit whose actual source needs identifying**. This is where everything pre-arXiv lives — Lawvere 1969, Aczel 1988, Ostrowski, Gentzen, Carlström — and `theoremsearch` structurally cannot return those as sources, only as things other people cite. Skipping rung 3 on a rung-2 null is how a coverage @@ -90,7 +100,8 @@ gap becomes a recorded novelty claim. until this rung.** Draft-from-source is unchanged by any of the above: existence may be cited freely; a source's *content* may not be asserted without the passage in hand. -⚠ **RUNGS 1-3 ARE DISCOVERY. ONLY RUNG 4 IS VERIFICATION.** The ladder makes finding candidates +⚠ **RUNGS 1-3 ARE DISCOVERY. ONLY RUNG 4 IS VERIFICATION** (for a Lean declaration, rung 2b's +`get_source_code` is that retrieval). The ladder makes finding candidates cheaper; it does not make any of them citable. See § 2b for the measurement that settles this. ## 2b. Why the ladder is shaped this way — the calibration, 2026-08-23 @@ -268,7 +279,8 @@ free analyticity lemmas, and the standard NAME for a thing described longhand. name you would never have guessed, and it reaches the attribute-generated siblings (`@[to_dual]`, `@[simps]`) that have **no source line to grep**. 3. **One literature search** if the object has a name — **run the LADDER in order: `.claude-local/papers/` - → `theoremsearch` → the open web → RETRIEVE THE FULL DOCUMENT.** Three phrasings minimum at + → `theoremsearch` (one phrasing `formality: "both"`) → Lean libraries (LeanExplore, GitHub + `language:Lean`) → the open web → RETRIEVE THE FULL DOCUMENT.** Three phrasings minimum at `theoremsearch`; ignore its similarity score; **its null is UNINFORMATIVE** (coverage-bounded). **Rungs 1–3 are DISCOVERY, only rung 4 is VERIFICATION** — a returned body is not a passage in hand. 📖 `tools/process/prior-art.md` §§ 2a–2b. From dc6453c6fd7d96804590dcf5b4404457c7410532 Mon Sep 17 00:00:00 2001 From: probe Date: Sat, 31 Oct 2026 15:10:50 -0500 Subject: [PATCH 004/182] Prior-art ladder: formal not both, B2 always runs, coverage as a sample Gate round 1 fixes. Rung B rule 5 requires a "formal" phrasing ("both" crowds Lean hits out of the capped list) and states coverage as a dated sample, withdrawing the single-probe FLT miss. Rung B2 always runs, records NOT RUN when LeanExplore is unavailable, credits LeanExplore, and reads hypotheses off the elaborated type since source text can drop section binders. Rung C, the null rule and the discovery line follow; tools/process/prior-art.md renumbers to five rungs; CLAUDE.md says "formal" (R-PRIORART line count unchanged). Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01Qj4hZFmT3jz71cMudY2wno --- .claude/commands/prior-art-review.md | 20 +++++------ CLAUDE.md | 2 +- tools/process/prior-art.md | 53 +++++++++++++++------------- 3 files changed, 40 insertions(+), 35 deletions(-) diff --git a/.claude/commands/prior-art-review.md b/.claude/commands/prior-art-review.md index b76ce809..22a01fef 100644 --- a/.claude/commands/prior-art-review.md +++ b/.claude/commands/prior-art-review.md @@ -107,24 +107,24 @@ Evaluate only **synthesis / bridge claims**: a distinctive claim that unifies or 3. **Identify the specialist branch** that would own it (the subfield and the kind of result). 4. **Search the literature — run the LADDER in order. Do not skip a rung, and do not stop early.** - **Rung A — `.claude-local/papers/`.** The downloaded-source library. **Grep loosely** (OCR'd scans carry intra-word spaces, so a tight-pattern miss is not absence). - - **Rung B — `theoremsearch`** (MCP tool `mcp__theoremsearch__theorem_search`). Matches on the STATEMENT, not the title, so it reaches claims a title search cannot. Four rules, each measured: + - **Rung B — `theoremsearch`** (MCP tool `mcp__theoremsearch__theorem_search`). Matches on the STATEMENT, not the title, so it reaches claims a title search cannot. Five rules, each measured: 1. **THREE PHRASINGS MINIMUM.** Vary them along the four axes in CLAUDE.md § `R-NOTINLIB` (body: `tools/process/not-in-the-library.md`): **POLARITY** (how the corpus would say it if it DISAGREED with you), **PART OF SPEECH** (the verb that builds it, not the noun), **VOCABULARY** (the domain's words), **DISPLAY** (never conclude absence from TRUNCATED output). Measured 2026-08-23: the noun form put the right theorem at rank 1 and the **verb** form dropped it out of the top 5 entirely — same claim, same index. **A single-phrasing negative is worthless.** 2. **DISPLAY is this rung's own exposure.** `theoremsearch` returns a capped list, so a scout who reads the cap and stops **has measured the cap, not the literature**. Re-run untruncated. 3. **IGNORE the `similarity`/`score` field.** The 7-case calibration of 2026-08-23 found **no threshold that keeps the garbage out without discarding the find** — noise scored 0.69 while genuine prior art scored 0.61. ⚠ That is a claim about THRESHOLDS, **not** that the score runs backwards. Measured 2026-08-24 across two independent probes: exact statements of Lawvere's fixed-point theorem returned 0.676, 0.683 and 0.686, other exact hits 0.834 and 0.777, and relevant fixed-point theorems 0.732 and 0.728 against irrelevant ones at 0.687 and 0.680. **Rank by reading; never filter on the number.** 4. ⚠ **`paper_filter` takes a TITLE, not an arXiv id.** Passing an id returns empty and reads exactly like absence. - 5. **AT LEAST ONE PHRASING RUNS WITH `formality: "both"`** (or `"formal"`). The default is `"informal"`, papers and textbooks only, so without it this rung never searches a Lean library. Formal coverage is bounded, measured 2026-10-31: formal mode (source `Lean Repo`) HITS Mathlib v4.27, pfr and carleson, and MISSES ImperialCollegeLondon/FLT, teorth/equational_theories and this repository itself. **A formal null is a statement about those repositories only**, which is why rung B2 runs regardless. - - **Rung B2 — Lean libraries.** Reaches Lean declarations that rung B's formal index does not hold. Run it whenever the claim could exist as a Lean declaration. - 1. **LeanExplore** — `mcp__lean-explore__search_summary(query, limit)`, **at least two phrasings** varied along the `R-NOTINLIB` axes. Each hit is `{id, name, description}`. Measured 2026-10-31: a Frey-curve query returned the Imperial FLT project's own `FreyPackage.*` declarations, which rung B misses; a Pataraia query returned only Mathlib's `OrderHom.lfp`. - 2. **For any candidate, `mcp__lean-explore__get_source_code(declaration_id)`.** Its output IS the Lean declaration, so for a Lean declaration it is the source in hand that rung D asks for. The `description` field is an AI-generated paraphrase: a snippet, like rung B's `slogan`, never the source. - 3. **The long tail of Reservoir**, the Lean package registry (913 packages on 2026-10-31, and no search service covers them): `mcp__github__search_code` with `language:Lean`, on keywords and on the declaration names a library would likely choose. + 5. **AT LEAST ONE PHRASING RUNS WITH `formality: "formal"`.** The default is `"informal"`, so without it this rung never searches a Lean library, and `"both"` does NOT satisfy this rule: informal hits crowd the capped list (measured 2026-10-31, a Carleson query at `n_results` 10 returned 6 carleson-repo hits under `"formal"` and 0 under `"both"`). Formal coverage, as a dated SAMPLE (2026-10-31): hits in Mathlib, pfr, carleson, FLT, cam-combi and HarderNarasimhan; misses, on the probes run, teorth/equational_theories and this repository. **A formal null is coverage-bounded, and the index does not list its extent.** + - **Rung B2 — Lean libraries. Always run it.** It reaches Lean libraries that rung B's formal index does not hold (equational_theories and this repository on the probes run, and Reservoir's long tail); LeanExplore's index overlaps rung B's in part. LeanExplore is Justin Asher's search engine for Lean declarations (arXiv:2506.11085; https://github.com/lean-explore/lean-explore), served as a hosted MCP at https://www.leanexplore.com/mcp. **If the `mcp__lean-explore__*` tools are not available to you, record steps 1–2 as NOT RUN with the reason, never as a null, and still do step 3.** + 1. **LeanExplore** — `mcp__lean-explore__search_summary(query, limit)`, **at least two phrasings** varied along the `R-NOTINLIB` axes. Each hit is `{id, name, description}`. Example, 2026-10-31: a Pataraia query returned Mathlib's `lfp` / Knaster–Tarski declarations only. + 2. **For any candidate, `mcp__lean-explore__get_source_code(declaration_id)`, then the elaborated type.** The source returns the declaration TEXT, which can omit section-level binders: measured 2026-10-31, `OrderHom.lfp` came back without `[CompleteLattice α]`. Read the hypotheses off the elaborated type (`#check` in a scratch file, or `mcp__lean-explore__get_dependencies`) before relying on it. The `description` field is AI-generated (per the project's `docs/mcp-server.md`): a snippet, like rung B's `slogan`, never the source. + 3. **Reservoir** (about 920 packages, 2026-10-31): for the long tail neither index holds, `mcp__github__search_code` with `language:Lean`, on keywords and on the declaration names a library would likely choose. GitHub code search indexes default branches only. 4. **ITS NULL IS UNINFORMATIVE**, for the same coverage reason as rung B's. - 5. **LeanExplore is a hosted service.** It allows 30 requests per minute per client IP, counting initialize and tool discovery; past that it answers HTTP 429 with `Retry-After`, which is a wait, never a null. The server sees every query, so phrase it neutrally rather than pasting unpublished claim text. - - **Rung C — the open web.** Run it when rungs B and B2 return no good match, **and also when either returns a neighbourhood hit whose real source still needs identifying**. Everything pre-arXiv lives here — Lawvere 1969, Aczel 1988, Ostrowski, Gentzen, Carlström. `theoremsearch` cannot return those as sources, only as work other people cite, **and the reason is the corpus boundary rather than a quirk: the index is built from arXiv, so a work published before arXiv existed appears in the index only inside the reference lists of papers that cite it.** A Gentzen-1936 query returns modern arXiv papers citing Gentzen, never Gentzen. + 5. **LeanExplore is a hosted service.** Per `docs/mcp-server.md`, it allows 30 POST requests per client IP per 60 s, counting initialize and tool discovery; past that it answers HTTP 429 with `Retry-After`, which is a wait, never a null. The server sees every query, so phrase it neutrally rather than pasting unpublished claim text. + - **Rung C — the open web.** Run it when rung B returns no good match, **and also when any rung (B or B2) returns a neighbourhood hit whose real source still needs identifying**. A Lean declaration from B2 is not a literature citation: step 5's author, year and venue still come from rungs C and D. Everything pre-arXiv lives here — Lawvere 1969, Aczel 1988, Ostrowski, Gentzen, Carlström. `theoremsearch` cannot return those as sources, only as work other people cite, **and the reason is the corpus boundary rather than a quirk: per the tool's own description the index covers arXiv, the Stacks Project, ProofWiki, four open textbooks and Lean repositories, so a pre-arXiv paper reaches it as something later work cites, not as the source.** A Gentzen-1936 query returns modern arXiv papers citing Gentzen, never Gentzen. - **Rung D — RETRIEVE AND READ THE FULL SOURCE.** Use WebFetch; if a domain is not reachable that way, download it via PowerShell `Invoke-WebRequest -Uri -OutFile .claude-local/papers/.pdf` and open it with the Read tool (this works for any publisher — arXiv, Dagstuhl/LIPIcs, nLab, journal sites). **Download straight into `.claude-local/papers/` under that name** — one destination, so filing is not a second step anyone can skip — and **validate before you rely on it** (a tiny PDF is an error page, not a paper). ⚠ **This is the one place the read-only rule yields, and it is deliberate**: filing the source is what feeds rung A for every later scout, so a review that reads a PDF and leaves nothing behind makes the library decay while looking like diligence. - ⚠⚠ **RUNGS A–C ARE DISCOVERY. ONLY RUNG D IS VERIFICATION** (for a Lean declaration, rung B2's `get_source_code` is that retrieval). **Draft from source, not from snippets — and a `theoremsearch` theorem body is a snippet, not a passage in hand.** Measured 2026-08-23: a returned body read as our recorded citation renumbered for a journal version, and the PDF showed the two statements were different (connexity versus splitting). The returned `slogan` field is an **LLM paraphrase**, `label`/`link` come back **null**, and ambient hypotheses are inconsistently included. If you genuinely cannot read the source, say so and treat the citation as **unverified**. + ⚠⚠ **RUNGS A–C ARE DISCOVERY. ONLY RUNG D IS VERIFICATION.** For a Lean declaration, rung D's retrieval is its source text plus its elaborated type (rung B2, step 2). **Draft from source, not from snippets — and a `theoremsearch` theorem body is a snippet, not a passage in hand.** Measured 2026-08-23: a returned body read as our recorded citation renumbered for a journal version, and the PDF showed the two statements were different (connexity versus splitting). The returned `slogan` field is an **LLM paraphrase**, `label`/`link` come back **null**, and ambient hypotheses are inconsistently included. If you genuinely cannot read the source, say so and treat the citation as **unverified**. - ⚠ **A NULL FROM RUNG B IS UNINFORMATIVE ON ITS OWN.** The index is coverage-bounded and the bound is invisible from the result — a paper this project holds on disk is verifiably absent from it. Never write "no prior art exists" from rung B, and do not record "none located as of <date>" until rungs B2 and C have also run. + ⚠ **A NULL FROM RUNG B IS UNINFORMATIVE ON ITS OWN.** The index is coverage-bounded and the bound is invisible from the result — a paper this project holds on disk is verifiably absent from it. Never write "no prior art exists" from rung B, and do not record "none located as of <date>" until rung B (including a `"formal"` phrasing), rung B2 (or B2 recorded NOT RUN, with the reason) and rung C have all run. 5. **Verdict for this claim:** - **Prior art exists and is already cited** in the content → OK (after confirming the citation is real and correctly directed). - **Prior art exists and is NOT cited** → FAIL for this claim: give the full citation (author, year, venue), state the claim's honest *delta* against it (what the framework genuinely adds), and the credit direction (framework is an instance joining the program, never subsuming it). diff --git a/CLAUDE.md b/CLAUDE.md index 3ca165f3..b9b0de3e 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -598,7 +598,7 @@ RULE three steps, ~10 minutes, BEFORE building. (1) grep our own corpus. (2) pinned Mathlib for the CONCEPT — and if the claim is a Lean statement, RUN `exact?`; it searches statement SHAPE, not names, and reaches attribute-generated siblings that have no source line. (3) one literature search, run as the LADDER: papers → - `theoremsearch` (one phrasing `formality: "both"`) → Lean libraries (LeanExplore, + `theoremsearch` (one phrasing `formality: "formal"`) → Lean libraries (LeanExplore, GitHub `language:Lean`) → open web → RETRIEVE. Three phrasings at `theoremsearch`; ignore its score; every null is UNINFORMATIVE. Only RETRIEVAL is VERIFICATION — a theorem body is not a passage in hand. Standard framing, once found, is ADOPTED, not diff --git a/tools/process/prior-art.md b/tools/process/prior-art.md index bae57daf..498fb2f6 100644 --- a/tools/process/prior-art.md +++ b/tools/process/prior-art.md @@ -50,9 +50,9 @@ statement of what the theorem obstructs.** Purity was checked before swapping, p precedent: no regression. **3. One literature search** if the object has a name (Glauber dynamics, coalgebra, covering -relation). **Run the LADDER in § 2a** — it has four rungs and the last one is not optional. +relation). **Run the LADDER in § 2a** — it has five rungs and the last one is not optional. -## 2a. The literature-search LADDER — papers → theoremsearch (formal too) → Lean libraries → open web → retrieve; a citation is not confirmed until rung 4 +## 2a. The literature-search LADDER — papers → theoremsearch (one formal phrasing) → Lean libraries → open web → retrieve; a citation is not confirmed until rung 5 **Adopted 2026-08-23, after calibrating `theoremsearch` (an MCP theorem-statement search over the arXiv-era literature) against cases where this project already knew the answer. The measurements are @@ -63,7 +63,7 @@ once declared Aczel unobtainable while it sat on disk. **Grep loosely** — scan intra-word spaces, so a tight-pattern miss is not evidence of absence. **Rung 2 — `theoremsearch`.** Claim-shaped rather than file-shaped: it matches on *statement*, which is -the thing a title search cannot reach. Three standing rules, each measured: +the thing a title search cannot reach. Four standing rules, each measured: - **THREE PHRASINGS MINIMUM**, along the four axes in § `R-NOTINLIB` (body: `tools/process/not-in-the-library.md`) — POLARITY, PART OF SPEECH, VOCABULARY, DISPLAY. Measured: the noun form put the right theorem at rank 1 and the **verb** form dropped it out of the top 5 entirely, @@ -77,31 +77,36 @@ the thing a title search cannot reach. Three standing rules, each measured: API's confidence. - **A NULL RESULT IS UNINFORMATIVE.** The index is coverage-bounded and the bound is invisible from the result. Never write "no prior art exists" from a rung-2 null; it does not even license - "none located as of <date>" on its own, because rungs 2b and 3 have not run yet. -- **ONE PHRASING RUNS WITH `formality: "both"`.** The default is `"informal"`, so without it no Lean - library is searched. Measured 2026-10-31: formal mode reaches Mathlib v4.27, pfr and carleson, and - misses ImperialCollegeLondon/FLT, teorth/equational_theories and ZeroParadox itself. - -**Rung 2b — Lean libraries.** LeanExplore (`search_summary`, two phrasings minimum; then -`get_source_code` on any candidate, whose output is the declaration itself, while `description` is an -AI paraphrase), then GitHub code search with `language:Lean` for the long tail of Reservoir, which no -search service covers. Measured 2026-10-31: a Frey-curve query reached the Imperial FLT project's own -declarations that rung 2 misses. Its null is uninformative too. It is a hosted service: it rate-limits -per IP and sees every query. Full rules: `.claude/commands/prior-art-review.md`, rung B2. - -**Rung 3 — the open web.** Runs when rungs 2 and 2b return no good match, **and also when it returns a -neighbourhood hit whose actual source needs identifying**. This is where everything pre-arXiv lives — + "none located as of <date>" on its own, because rungs 3 and 4 have not run yet. +- **ONE PHRASING RUNS WITH `formality: "formal"`; `"both"` does not count.** The default is + `"informal"`, so without it no Lean library is searched, and under `"both"` informal hits crowd the + capped list (2026-10-31: a Carleson query returned 6 carleson-repo hits under `"formal"`, 0 under + `"both"`). Coverage, a dated sample (2026-10-31): hits in Mathlib, pfr, carleson, FLT, cam-combi, + HarderNarasimhan; misses on the probes run, teorth/equational_theories and this repository. A formal + null is coverage-bounded. + +**Rung 3 — Lean libraries, always run.** LeanExplore (Justin Asher, arXiv:2506.11085): `search_summary`, +two phrasings minimum, then `get_source_code` on any candidate plus its elaborated type, because the +returned text can omit section binders (2026-10-31: `OrderHom.lfp` lost `[CompleteLattice α]`); its +`description` is AI-generated. Then GitHub code search with `language:Lean` for the Reservoir long tail +(about 920 packages, 2026-10-31). If the LeanExplore tools are unavailable, record that half NOT RUN, +never a null. Its null is uninformative too; it is hosted, rate-limited and sees every query. Full +rules: `.claude/commands/prior-art-review.md`, rung B2. + +**Rung 4 — the open web.** Runs when rung 2 returns no good match, **and also when rung 2 or 3 returns +a neighbourhood hit whose actual source needs identifying**; a Lean declaration is not a literature +citation. This is where everything pre-arXiv lives — Lawvere 1969, Aczel 1988, Ostrowski, Gentzen, Carlström — and `theoremsearch` structurally cannot return -those as sources, only as things other people cite. Skipping rung 3 on a rung-2 null is how a coverage +those as sources, only as things other people cite. Skipping rung 4 on a rung-2 null is how a coverage gap becomes a recorded novelty claim. -**Rung 4 — RETRIEVE AND READ THE FULL DOCUMENT.** File it in `papers/` as `author_topic_year[_id].pdf`, +**Rung 5 — RETRIEVE AND READ THE FULL DOCUMENT.** File it in `papers/` as `author_topic_year[_id].pdf`, **validating before filing** (a tiny PDF is an error page, not a paper). **A citation is not confirmed until this rung.** Draft-from-source is unchanged by any of the above: existence may be cited freely; a source's *content* may not be asserted without the passage in hand. -⚠ **RUNGS 1-3 ARE DISCOVERY. ONLY RUNG 4 IS VERIFICATION** (for a Lean declaration, rung 2b's -`get_source_code` is that retrieval). The ladder makes finding candidates +⚠ **RUNGS 1-4 ARE DISCOVERY. ONLY RUNG 5 IS VERIFICATION.** For a Lean declaration, rung 5's +retrieval is its source text plus its elaborated type. The ladder makes finding candidates cheaper; it does not make any of them citable. See § 2b for the measurement that settles this. ## 2b. Why the ladder is shaped this way — the calibration, 2026-08-23 @@ -279,10 +284,10 @@ free analyticity lemmas, and the standard NAME for a thing described longhand. name you would never have guessed, and it reaches the attribute-generated siblings (`@[to_dual]`, `@[simps]`) that have **no source line to grep**. 3. **One literature search** if the object has a name — **run the LADDER in order: `.claude-local/papers/` - → `theoremsearch` (one phrasing `formality: "both"`) → Lean libraries (LeanExplore, GitHub + → `theoremsearch` (one phrasing `formality: "formal"`) → Lean libraries (LeanExplore, GitHub `language:Lean`) → the open web → RETRIEVE THE FULL DOCUMENT.** Three phrasings minimum at - `theoremsearch`; ignore its similarity score; **its null is UNINFORMATIVE** (coverage-bounded). - **Rungs 1–3 are DISCOVERY, only rung 4 is VERIFICATION** — a returned body is not a passage in hand. + `theoremsearch`; ignore its similarity score; **every null is UNINFORMATIVE** (coverage-bounded). + **Rungs 1–4 are DISCOVERY, only rung 5 is VERIFICATION** — a returned body is not a passage in hand. 📖 `tools/process/prior-art.md` §§ 2a–2b. **⚠ AND WHEN YOU FETCH A SOURCE, FILE IT** — `.claude-local/papers/`, named From bf2a09d04a8c2f53f40e2fab2357576b586f0e46 Mon Sep 17 00:00:00 2001 From: probe Date: Sat, 31 Oct 2026 15:25:08 -0500 Subject: [PATCH 005/182] Prior-art ladder: extension:lean, #check only, revert rung C trigger Gate round 2 fixes. GitHub code search uses extension:lean (language:Lean returned 0 files where extension:lean returned 9). The elaborated type comes from #check only; get_dependencies returns names. paper_filter is restated to the tool schema. cam-combi dropped from the coverage sample. The null rule matches B2's NOT RUN scope. Rung C's trigger is reverted and the B2-citation rule deleted. prior-art.md mirrors these and names R-NOCONV's rung 5 explicitly; CLAUDE.md line count unchanged. Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01Qj4hZFmT3jz71cMudY2wno --- .claude/commands/prior-art-review.md | 16 +++++++------- CLAUDE.md | 2 +- tools/process/prior-art.md | 32 ++++++++++++++-------------- 3 files changed, 25 insertions(+), 25 deletions(-) diff --git a/.claude/commands/prior-art-review.md b/.claude/commands/prior-art-review.md index 22a01fef..eca3bfa2 100644 --- a/.claude/commands/prior-art-review.md +++ b/.claude/commands/prior-art-review.md @@ -111,20 +111,20 @@ Evaluate only **synthesis / bridge claims**: a distinctive claim that unifies or 1. **THREE PHRASINGS MINIMUM.** Vary them along the four axes in CLAUDE.md § `R-NOTINLIB` (body: `tools/process/not-in-the-library.md`): **POLARITY** (how the corpus would say it if it DISAGREED with you), **PART OF SPEECH** (the verb that builds it, not the noun), **VOCABULARY** (the domain's words), **DISPLAY** (never conclude absence from TRUNCATED output). Measured 2026-08-23: the noun form put the right theorem at rank 1 and the **verb** form dropped it out of the top 5 entirely — same claim, same index. **A single-phrasing negative is worthless.** 2. **DISPLAY is this rung's own exposure.** `theoremsearch` returns a capped list, so a scout who reads the cap and stops **has measured the cap, not the literature**. Re-run untruncated. 3. **IGNORE the `similarity`/`score` field.** The 7-case calibration of 2026-08-23 found **no threshold that keeps the garbage out without discarding the find** — noise scored 0.69 while genuine prior art scored 0.61. ⚠ That is a claim about THRESHOLDS, **not** that the score runs backwards. Measured 2026-08-24 across two independent probes: exact statements of Lawvere's fixed-point theorem returned 0.676, 0.683 and 0.686, other exact hits 0.834 and 0.777, and relevant fixed-point theorems 0.732 and 0.728 against irrelevant ones at 0.687 and 0.680. **Rank by reading; never filter on the number.** - 4. ⚠ **`paper_filter` takes a TITLE, not an arXiv id.** Passing an id returns empty and reads exactly like absence. - 5. **AT LEAST ONE PHRASING RUNS WITH `formality: "formal"`.** The default is `"informal"`, so without it this rung never searches a Lean library, and `"both"` does NOT satisfy this rule: informal hits crowd the capped list (measured 2026-10-31, a Carleson query at `n_results` 10 returned 6 carleson-repo hits under `"formal"` and 0 under `"both"`). Formal coverage, as a dated SAMPLE (2026-10-31): hits in Mathlib, pfr, carleson, FLT, cam-combi and HarderNarasimhan; misses, on the probes run, teorth/equational_theories and this repository. **A formal null is coverage-bounded, and the index does not list its extent.** - - **Rung B2 — Lean libraries. Always run it.** It reaches Lean libraries that rung B's formal index does not hold (equational_theories and this repository on the probes run, and Reservoir's long tail); LeanExplore's index overlaps rung B's in part. LeanExplore is Justin Asher's search engine for Lean declarations (arXiv:2506.11085; https://github.com/lean-explore/lean-explore), served as a hosted MCP at https://www.leanexplore.com/mcp. **If the `mcp__lean-explore__*` tools are not available to you, record steps 1–2 as NOT RUN with the reason, never as a null, and still do step 3.** + 4. **`paper_filter`: arXiv ids match as a prefix, other tokens match title substrings** (the tool's schema; measured 2026-10-31, `math/0307008` returned hits from that paper). + 5. **AT LEAST ONE PHRASING RUNS WITH `formality: "formal"`.** The default is `"informal"`, so without it this rung never searches a Lean library, and `"both"` does NOT satisfy this rule: informal hits crowd the capped list (measured 2026-10-31, a Carleson query at `n_results` 10 returned 6 carleson-repo hits under `"formal"` and 0 under `"both"`). Formal coverage, as a dated SAMPLE (2026-10-31): hits in Mathlib, pfr, carleson, FLT and HarderNarasimhan; misses, on the probes run, teorth/equational_theories and this repository. **A formal null is coverage-bounded, and the index does not list its extent.** + - **Rung B2 — Lean libraries. Always run it.** It reaches Lean libraries that rung B's formal index does not hold; on the 2026-10-31 probes, equational_theories and this repository were reached only by step 3, and only partially. LeanExplore's index overlaps rung B's in part. LeanExplore is Justin Asher's search engine for Lean declarations (arXiv:2506.11085; https://github.com/lean-explore/lean-explore), served as a hosted MCP at https://www.leanexplore.com/mcp. **If the `mcp__lean-explore__*` tools are not available to you, record steps 1–2 as NOT RUN with the reason, never as a null, and still do step 3.** 1. **LeanExplore** — `mcp__lean-explore__search_summary(query, limit)`, **at least two phrasings** varied along the `R-NOTINLIB` axes. Each hit is `{id, name, description}`. Example, 2026-10-31: a Pataraia query returned Mathlib's `lfp` / Knaster–Tarski declarations only. - 2. **For any candidate, `mcp__lean-explore__get_source_code(declaration_id)`, then the elaborated type.** The source returns the declaration TEXT, which can omit section-level binders: measured 2026-10-31, `OrderHom.lfp` came back without `[CompleteLattice α]`. Read the hypotheses off the elaborated type (`#check` in a scratch file, or `mcp__lean-explore__get_dependencies`) before relying on it. The `description` field is AI-generated (per the project's `docs/mcp-server.md`): a snippet, like rung B's `slogan`, never the source. - 3. **Reservoir** (about 920 packages, 2026-10-31): for the long tail neither index holds, `mcp__github__search_code` with `language:Lean`, on keywords and on the declaration names a library would likely choose. GitHub code search indexes default branches only. + 2. **For any candidate, `mcp__lean-explore__get_source_code(declaration_id)`, then the elaborated type.** The source returns the declaration TEXT, which can omit section-level binders: measured 2026-10-31, `OrderHom.lfp` came back without `[CompleteLattice α]`. Read the hypotheses off the elaborated type before relying on it; `#check` in a scratch file is the only route. `mcp__lean-explore__get_dependencies` returns names only (`["OrderHom"]` for `OrderHom.lfp`, measured 2026-10-31) and is not a substitute. `#check` reaches only this project's dependency closure; for a declaration outside it, read the source file around the declaration (`mcp__lean-explore__get_source_link`) for its section `variable` lines. The search hit's `description` is a short title of the AI-generated `get_description` text (per `docs/mcp-server.md`; measured 2026-10-31): a snippet, never the source. + 3. **Reservoir** (about 920 packages, 2026-10-31): for the long tail neither index holds, `mcp__github__search_code` with `extension:lean`, NOT `language:Lean` (measured 2026-10-31, a query on this repository returned 9 files with `extension:lean` and 0 with `language:Lean`), on keywords and on the declaration names a library would likely choose. GitHub code search indexes default branches only. 4. **ITS NULL IS UNINFORMATIVE**, for the same coverage reason as rung B's. - 5. **LeanExplore is a hosted service.** Per `docs/mcp-server.md`, it allows 30 POST requests per client IP per 60 s, counting initialize and tool discovery; past that it answers HTTP 429 with `Retry-After`, which is a wait, never a null. The server sees every query, so phrase it neutrally rather than pasting unpublished claim text. - - **Rung C — the open web.** Run it when rung B returns no good match, **and also when any rung (B or B2) returns a neighbourhood hit whose real source still needs identifying**. A Lean declaration from B2 is not a literature citation: step 5's author, year and venue still come from rungs C and D. Everything pre-arXiv lives here — Lawvere 1969, Aczel 1988, Ostrowski, Gentzen, Carlström. `theoremsearch` cannot return those as sources, only as work other people cite, **and the reason is the corpus boundary rather than a quirk: per the tool's own description the index covers arXiv, the Stacks Project, ProofWiki, four open textbooks and Lean repositories, so a pre-arXiv paper reaches it as something later work cites, not as the source.** A Gentzen-1936 query returns modern arXiv papers citing Gentzen, never Gentzen. + 5. **Both are hosted services.** Per `docs/mcp-server.md`, LeanExplore allows 30 POST requests per client IP per 60 s, counting initialize and tool discovery; past that it answers HTTP 429 with `Retry-After`. GitHub code search is rate-limited too. A 403 or 429 is a wait, never a null. The server sees every query, so phrase it neutrally rather than pasting unpublished claim text. + - **Rung C — the open web.** Run it when rung B returns no good match, **and also when rung B returns a neighbourhood hit whose real source still needs identifying**. Everything pre-arXiv lives here — Lawvere 1969, Aczel 1988, Ostrowski, Gentzen, Carlström. `theoremsearch` cannot return those as sources, only as work other people cite, **and the reason is the corpus boundary rather than a quirk: per the tool's own description the index covers arXiv, the Stacks Project, ProofWiki, four open textbooks and Lean repositories, so a pre-arXiv paper reaches it as something later work cites, not as the source.** A Gentzen-1936 query returns modern arXiv papers citing Gentzen, never Gentzen. - **Rung D — RETRIEVE AND READ THE FULL SOURCE.** Use WebFetch; if a domain is not reachable that way, download it via PowerShell `Invoke-WebRequest -Uri -OutFile .claude-local/papers/.pdf` and open it with the Read tool (this works for any publisher — arXiv, Dagstuhl/LIPIcs, nLab, journal sites). **Download straight into `.claude-local/papers/` under that name** — one destination, so filing is not a second step anyone can skip — and **validate before you rely on it** (a tiny PDF is an error page, not a paper). ⚠ **This is the one place the read-only rule yields, and it is deliberate**: filing the source is what feeds rung A for every later scout, so a review that reads a PDF and leaves nothing behind makes the library decay while looking like diligence. ⚠⚠ **RUNGS A–C ARE DISCOVERY. ONLY RUNG D IS VERIFICATION.** For a Lean declaration, rung D's retrieval is its source text plus its elaborated type (rung B2, step 2). **Draft from source, not from snippets — and a `theoremsearch` theorem body is a snippet, not a passage in hand.** Measured 2026-08-23: a returned body read as our recorded citation renumbered for a journal version, and the PDF showed the two statements were different (connexity versus splitting). The returned `slogan` field is an **LLM paraphrase**, `label`/`link` come back **null**, and ambient hypotheses are inconsistently included. If you genuinely cannot read the source, say so and treat the citation as **unverified**. - ⚠ **A NULL FROM RUNG B IS UNINFORMATIVE ON ITS OWN.** The index is coverage-bounded and the bound is invisible from the result — a paper this project holds on disk is verifiably absent from it. Never write "no prior art exists" from rung B, and do not record "none located as of <date>" until rung B (including a `"formal"` phrasing), rung B2 (or B2 recorded NOT RUN, with the reason) and rung C have all run. + ⚠ **A NULL FROM RUNG B IS UNINFORMATIVE ON ITS OWN.** The index is coverage-bounded and the bound is invisible from the result — a paper this project holds on disk is verifiably absent from it. Never write "no prior art exists" from rung B, and do not record "none located as of <date>" until rung B (including a `"formal"` phrasing), rung B2 and rung C have all run. In rung B2, steps 1–2 may be recorded NOT RUN (tool unavailable, with the reason); step 3 is always required, and nothing records "none located" with it skipped. 5. **Verdict for this claim:** - **Prior art exists and is already cited** in the content → OK (after confirming the citation is real and correctly directed). - **Prior art exists and is NOT cited** → FAIL for this claim: give the full citation (author, year, venue), state the claim's honest *delta* against it (what the framework genuinely adds), and the credit direction (framework is an instance joining the program, never subsuming it). diff --git a/CLAUDE.md b/CLAUDE.md index b9b0de3e..7cda7864 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -599,7 +599,7 @@ RULE three steps, ~10 minutes, BEFORE building. (1) grep our own corpus. (2) it searches statement SHAPE, not names, and reaches attribute-generated siblings that have no source line. (3) one literature search, run as the LADDER: papers → `theoremsearch` (one phrasing `formality: "formal"`) → Lean libraries (LeanExplore, - GitHub `language:Lean`) → open web → RETRIEVE. Three phrasings at `theoremsearch`; + GitHub `extension:lean`) → open web → RETRIEVE. Three phrasings at `theoremsearch`; ignore its score; every null is UNINFORMATIVE. Only RETRIEVAL is VERIFICATION — a theorem body is not a passage in hand. Standard framing, once found, is ADOPTED, not noted and worked around; check purity before swapping a proof. `/prior-art-review` diff --git a/tools/process/prior-art.md b/tools/process/prior-art.md index 498fb2f6..2b8d6308 100644 --- a/tools/process/prior-art.md +++ b/tools/process/prior-art.md @@ -81,21 +81,21 @@ the thing a title search cannot reach. Four standing rules, each measured: - **ONE PHRASING RUNS WITH `formality: "formal"`; `"both"` does not count.** The default is `"informal"`, so without it no Lean library is searched, and under `"both"` informal hits crowd the capped list (2026-10-31: a Carleson query returned 6 carleson-repo hits under `"formal"`, 0 under - `"both"`). Coverage, a dated sample (2026-10-31): hits in Mathlib, pfr, carleson, FLT, cam-combi, + `"both"`). Coverage, a dated sample (2026-10-31): hits in Mathlib, pfr, carleson, FLT, HarderNarasimhan; misses on the probes run, teorth/equational_theories and this repository. A formal null is coverage-bounded. **Rung 3 — Lean libraries, always run.** LeanExplore (Justin Asher, arXiv:2506.11085): `search_summary`, -two phrasings minimum, then `get_source_code` on any candidate plus its elaborated type, because the -returned text can omit section binders (2026-10-31: `OrderHom.lfp` lost `[CompleteLattice α]`); its -`description` is AI-generated. Then GitHub code search with `language:Lean` for the Reservoir long tail -(about 920 packages, 2026-10-31). If the LeanExplore tools are unavailable, record that half NOT RUN, -never a null. Its null is uninformative too; it is hosted, rate-limited and sees every query. Full -rules: `.claude/commands/prior-art-review.md`, rung B2. - -**Rung 4 — the open web.** Runs when rung 2 returns no good match, **and also when rung 2 or 3 returns -a neighbourhood hit whose actual source needs identifying**; a Lean declaration is not a literature -citation. This is where everything pre-arXiv lives — +two phrasings minimum, then `get_source_code` on any candidate plus its elaborated type from `#check` +(the only route; `get_dependencies` returns names only), because the returned text can omit section +binders (2026-10-31: `OrderHom.lfp` lost `[CompleteLattice α]`). Then GitHub code search with +`extension:lean`, not `language:Lean` (2026-10-31: 9 files against 0), for the Reservoir long tail +(about 920 packages, 2026-10-31). The LeanExplore half may be recorded NOT RUN if the tools are +unavailable; the code search is always required. Its null is uninformative too; both services are +rate-limited. Full rules: `.claude/commands/prior-art-review.md`, rung B2. + +**Rung 4 — the open web.** Runs when rung 2 returns no good match, **and also when it returns a +neighbourhood hit whose actual source needs identifying**. This is where everything pre-arXiv lives — Lawvere 1969, Aczel 1988, Ostrowski, Gentzen, Carlström — and `theoremsearch` structurally cannot return those as sources, only as things other people cite. Skipping rung 4 on a rung-2 null is how a coverage gap becomes a recorded novelty claim. @@ -121,8 +121,8 @@ content-exact statements. Veltri, Ahrens–Capriotti–Spadotti and Yanofsky wer **Coverage is real and provable.** arXiv:2104.02549 is **verifiably absent** from the index while sitting in `papers/`. So a gate blocking on "no prior art found" would have returned clear for a claim whose prior -art this project is physically holding. ⚠ `paper_filter` takes a **TITLE, not an arXiv id** — passing an -id returns empty, which reads exactly like absence. Verify the filter before believing its zero. +art this project is physically holding. `paper_filter` matches arXiv ids as a prefix and other tokens as +title substrings (the tool's schema; 2026-10-31). Verify the filter before believing its zero. **Precision: one correct abstention, and one control that was itself wrong.** The two-forks universal negative (`ZeroParadox/Algebra/WheelFrac.md`) drew only unrelated combinatorics — correct abstention. @@ -147,8 +147,8 @@ which is precisely the AMM Thm 8.1 trap this project already records (those cond ⚠ **WHY THIS IS NOT A GATE, and the reasoning transfers to the next such tool.** A gate must be able to fail informatively. Here a null is uninformative (coverage) and a hit is a candidate, not a finding — so -enforcement would manufacture the appearance of coverage, which is `RLY25-1` exactly. This is the rung-5 -shape from § *WHEN A FAILURE RECURS*: **the screen may replace the ENUMERATION, never the VERDICT.** +enforcement would manufacture the appearance of coverage, which is `RLY25-1` exactly. This is rung 5 of +the recurrence escalation ladder (`R-NOCONV`), not of the literature ladder above: **the screen may replace the ENUMERATION, never the VERDICT.** ⚠ **ITS CONTROLS SHIP WITH IT**, per the `check_checkers.py` move — the control is the deliverable. The two standing controls are the WheelFrac two-forks negative (must return nothing usable) and a Lawvere / @@ -285,7 +285,7 @@ free analyticity lemmas, and the standard NAME for a thing described longhand. `@[simps]`) that have **no source line to grep**. 3. **One literature search** if the object has a name — **run the LADDER in order: `.claude-local/papers/` → `theoremsearch` (one phrasing `formality: "formal"`) → Lean libraries (LeanExplore, GitHub - `language:Lean`) → the open web → RETRIEVE THE FULL DOCUMENT.** Three phrasings minimum at + `extension:lean`) → the open web → RETRIEVE THE FULL DOCUMENT.** Three phrasings minimum at `theoremsearch`; ignore its similarity score; **every null is UNINFORMATIVE** (coverage-bounded). **Rungs 1–4 are DISCOVERY, only rung 5 is VERIFICATION** — a returned body is not a passage in hand. 📖 `tools/process/prior-art.md` §§ 2a–2b. From 39b7c7d74ddfdc54c94e5c0004f29ca515f24ebe Mon Sep 17 00:00:00 2001 From: probe Date: Sat, 31 Oct 2026 15:26:26 -0500 Subject: [PATCH 006/182] prior-art brief: B2 step 5 names which service sees each query Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01Qj4hZFmT3jz71cMudY2wno --- .claude/commands/prior-art-review.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.claude/commands/prior-art-review.md b/.claude/commands/prior-art-review.md index eca3bfa2..f325f53d 100644 --- a/.claude/commands/prior-art-review.md +++ b/.claude/commands/prior-art-review.md @@ -118,7 +118,7 @@ Evaluate only **synthesis / bridge claims**: a distinctive claim that unifies or 2. **For any candidate, `mcp__lean-explore__get_source_code(declaration_id)`, then the elaborated type.** The source returns the declaration TEXT, which can omit section-level binders: measured 2026-10-31, `OrderHom.lfp` came back without `[CompleteLattice α]`. Read the hypotheses off the elaborated type before relying on it; `#check` in a scratch file is the only route. `mcp__lean-explore__get_dependencies` returns names only (`["OrderHom"]` for `OrderHom.lfp`, measured 2026-10-31) and is not a substitute. `#check` reaches only this project's dependency closure; for a declaration outside it, read the source file around the declaration (`mcp__lean-explore__get_source_link`) for its section `variable` lines. The search hit's `description` is a short title of the AI-generated `get_description` text (per `docs/mcp-server.md`; measured 2026-10-31): a snippet, never the source. 3. **Reservoir** (about 920 packages, 2026-10-31): for the long tail neither index holds, `mcp__github__search_code` with `extension:lean`, NOT `language:Lean` (measured 2026-10-31, a query on this repository returned 9 files with `extension:lean` and 0 with `language:Lean`), on keywords and on the declaration names a library would likely choose. GitHub code search indexes default branches only. 4. **ITS NULL IS UNINFORMATIVE**, for the same coverage reason as rung B's. - 5. **Both are hosted services.** Per `docs/mcp-server.md`, LeanExplore allows 30 POST requests per client IP per 60 s, counting initialize and tool discovery; past that it answers HTTP 429 with `Retry-After`. GitHub code search is rate-limited too. A 403 or 429 is a wait, never a null. The server sees every query, so phrase it neutrally rather than pasting unpublished claim text. + 5. **Both are hosted services.** Per `docs/mcp-server.md`, LeanExplore allows 30 POST requests per client IP per 60 s, counting initialize and tool discovery; past that it answers HTTP 429 with `Retry-After`. GitHub code search is rate-limited too. A 403 or 429 is a wait, never a null. Each service sees every query, so phrase it neutrally rather than pasting unpublished claim text. - **Rung C — the open web.** Run it when rung B returns no good match, **and also when rung B returns a neighbourhood hit whose real source still needs identifying**. Everything pre-arXiv lives here — Lawvere 1969, Aczel 1988, Ostrowski, Gentzen, Carlström. `theoremsearch` cannot return those as sources, only as work other people cite, **and the reason is the corpus boundary rather than a quirk: per the tool's own description the index covers arXiv, the Stacks Project, ProofWiki, four open textbooks and Lean repositories, so a pre-arXiv paper reaches it as something later work cites, not as the source.** A Gentzen-1936 query returns modern arXiv papers citing Gentzen, never Gentzen. - **Rung D — RETRIEVE AND READ THE FULL SOURCE.** Use WebFetch; if a domain is not reachable that way, download it via PowerShell `Invoke-WebRequest -Uri -OutFile .claude-local/papers/.pdf` and open it with the Read tool (this works for any publisher — arXiv, Dagstuhl/LIPIcs, nLab, journal sites). **Download straight into `.claude-local/papers/` under that name** — one destination, so filing is not a second step anyone can skip — and **validate before you rely on it** (a tiny PDF is an error page, not a paper). ⚠ **This is the one place the read-only rule yields, and it is deliberate**: filing the source is what feeds rung A for every later scout, so a review that reads a PDF and leaves nothing behind makes the library decay while looking like diligence. From c0a2f86284f18ffeeb707b7bc135883e22d213ec Mon Sep 17 00:00:00 2001 From: probe Date: Sat, 31 Oct 2026 19:31:28 -0500 Subject: [PATCH 007/182] Prior-art brief: rung B2 fixes from its first live run First live run of the Lean-library rung (Kleene.lean, 2026-10-31) found the brief silent or wrong in several places; each change below was re-measured. - A tool present but refused by the permission mode is NOT RUN, never a null. - In-closure verification: scratch file, `lake env lean`, `#check` + `exact?`. - Out-of-closure declarations: PARTLY VERIFIED, source read, type not elaborated (Tim's ruling, 2026-10-31). - get_dependencies is a partial list returned as a JSON-encoded string; packages= filter; GitHub perPage and -repo: self-exclusion; LeanExplore index snapshot differs from the pinned Mathlib. - Caller pre-flight: coverage_gap is the owed list; find is a per-file lookup. - Lean-only citation form; paper_filter needs a full arXiv id; only a rate-limit 403/429 is a wait; theoremsearch `name` carries in-paper labels on arXiv hits but numbering is not unique. Gates: editorial, adversary, prior_art PASS at round 2 with ordinaries carried; copy_editor signed by Tim. Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01Qj4hZEe22hsY1FqfbKnnU2 --- .claude/commands/prior-art-review.md | 29 ++++++++++++-------- tools/process/prior-art.md | 40 +++++++++++++++++++--------- 2 files changed, 45 insertions(+), 24 deletions(-) diff --git a/.claude/commands/prior-art-review.md b/.claude/commands/prior-art-review.md index f325f53d..f96c16d0 100644 --- a/.claude/commands/prior-art-review.md +++ b/.claude/commands/prior-art-review.md @@ -35,6 +35,12 @@ loop, so it enforces the cap. Paste this into the brief verbatim: This is distinct from the scout's *search* job: it still hunts for prior art we have NOT cited. This pre-flight covers the other half — prior art we HAVE cited and may be describing wrongly. +--- + +## CALLER PRE-FLIGHT — ask the ledger what is OWED before choosing the scope + +**Before choosing a target or scope, query what is owed (`R-LEDGER`).** The owed list is `mcp__verdictLedger__coverage_gap(step='prior_art', admission=[…])`, with the admission set taken from `mcp__gitRobot__admission`: it names every path in the step's scope that has no passing `prior_art` verdict over its current bytes. Measured 2026-10-31 at `ref='HEAD'`: 140 paths owed, and `ZeroParadox/Computability/Kleene.lean` not among them, while it had just been re-reviewed. For a per-file lookup, `mcp__verdictLedger__find(step='prior_art', subject_sha=)` lists the `prior_art` records naming those bytes, at any basis or revision; it shows what was recorded, not which record decides an action. A path the owed list does not name is either covered by a passing `prior_art` verdict on its current bytes or outside the step's scope; the response gives the size of that scope as `applies_to`, a count rather than a list (381 at that measurement). Either way the step owes it nothing. + --- Spawn the Agent with this prompt (substitute ARGUMENTS_VALUE for the actual value of $ARGUMENTS): @@ -105,29 +111,30 @@ Evaluate only **synthesis / bridge claims**: a distinctive claim that unifies or 1. **Check our own corpus FIRST (before any web search).** Grep the repo and `.claude-local` (notes, `external/`, outreach) for an existing reference to the claim/concept — much of this project's prior-art knowledge already lives there (citations inside `.lean` docstrings, vendored libraries, outreach drafts, research notes). Anything already cited there is NOT a gap; do not "rediscover" it. Only what is genuinely uncited in our own corpus proceeds to a web search. 2. **State the claim** in the target field's own terms. 3. **Identify the specialist branch** that would own it (the subfield and the kind of result). -4. **Search the literature — run the LADDER in order. Do not skip a rung, and do not stop early.** +4. **Search the literature — run the LADDER in order, and do not stop early.** Rungs A, B and B2 always run; rung C runs on the condition stated at rung C; rung D runs for every source you cite. - **Rung A — `.claude-local/papers/`.** The downloaded-source library. **Grep loosely** (OCR'd scans carry intra-word spaces, so a tight-pattern miss is not absence). - - **Rung B — `theoremsearch`** (MCP tool `mcp__theoremsearch__theorem_search`). Matches on the STATEMENT, not the title, so it reaches claims a title search cannot. Five rules, each measured: + - **Rung B — `theoremsearch`** (MCP tool `mcp__theoremsearch__theorem_search`). Matches on the STATEMENT, not the title, so it reaches claims a title search cannot. Six rules, each measured: 1. **THREE PHRASINGS MINIMUM.** Vary them along the four axes in CLAUDE.md § `R-NOTINLIB` (body: `tools/process/not-in-the-library.md`): **POLARITY** (how the corpus would say it if it DISAGREED with you), **PART OF SPEECH** (the verb that builds it, not the noun), **VOCABULARY** (the domain's words), **DISPLAY** (never conclude absence from TRUNCATED output). Measured 2026-08-23: the noun form put the right theorem at rank 1 and the **verb** form dropped it out of the top 5 entirely — same claim, same index. **A single-phrasing negative is worthless.** 2. **DISPLAY is this rung's own exposure.** `theoremsearch` returns a capped list, so a scout who reads the cap and stops **has measured the cap, not the literature**. Re-run untruncated. 3. **IGNORE the `similarity`/`score` field.** The 7-case calibration of 2026-08-23 found **no threshold that keeps the garbage out without discarding the find** — noise scored 0.69 while genuine prior art scored 0.61. ⚠ That is a claim about THRESHOLDS, **not** that the score runs backwards. Measured 2026-08-24 across two independent probes: exact statements of Lawvere's fixed-point theorem returned 0.676, 0.683 and 0.686, other exact hits 0.834 and 0.777, and relevant fixed-point theorems 0.732 and 0.728 against irrelevant ones at 0.687 and 0.680. **Rank by reading; never filter on the number.** - 4. **`paper_filter`: arXiv ids match as a prefix, other tokens match title substrings** (the tool's schema; measured 2026-10-31, `math/0307008` returned hits from that paper). + 4. **`paper_filter` takes a FULL arXiv id**; other tokens match title substrings. The tool's schema says ids "match as a prefix", but measured 2026-10-31 a truncated id returned empty (`0801.209`; earlier the same day `math/030700`, `0906.310`) where the full id hit (`0801.2097`, `math/0307008`). An empty result under a short id measures the id, not the paper. 5. **AT LEAST ONE PHRASING RUNS WITH `formality: "formal"`.** The default is `"informal"`, so without it this rung never searches a Lean library, and `"both"` does NOT satisfy this rule: informal hits crowd the capped list (measured 2026-10-31, a Carleson query at `n_results` 10 returned 6 carleson-repo hits under `"formal"` and 0 under `"both"`). Formal coverage, as a dated SAMPLE (2026-10-31): hits in Mathlib, pfr, carleson, FLT and HarderNarasimhan; misses, on the probes run, teorth/equational_theories and this repository. **A formal null is coverage-bounded, and the index does not list its extent.** - - **Rung B2 — Lean libraries. Always run it.** It reaches Lean libraries that rung B's formal index does not hold; on the 2026-10-31 probes, equational_theories and this repository were reached only by step 3, and only partially. LeanExplore's index overlaps rung B's in part. LeanExplore is Justin Asher's search engine for Lean declarations (arXiv:2506.11085; https://github.com/lean-explore/lean-explore), served as a hosted MCP at https://www.leanexplore.com/mcp. **If the `mcp__lean-explore__*` tools are not available to you, record steps 1–2 as NOT RUN with the reason, never as a null, and still do step 3.** - 1. **LeanExplore** — `mcp__lean-explore__search_summary(query, limit)`, **at least two phrasings** varied along the `R-NOTINLIB` axes. Each hit is `{id, name, description}`. Example, 2026-10-31: a Pataraia query returned Mathlib's `lfp` / Knaster–Tarski declarations only. - 2. **For any candidate, `mcp__lean-explore__get_source_code(declaration_id)`, then the elaborated type.** The source returns the declaration TEXT, which can omit section-level binders: measured 2026-10-31, `OrderHom.lfp` came back without `[CompleteLattice α]`. Read the hypotheses off the elaborated type before relying on it; `#check` in a scratch file is the only route. `mcp__lean-explore__get_dependencies` returns names only (`["OrderHom"]` for `OrderHom.lfp`, measured 2026-10-31) and is not a substitute. `#check` reaches only this project's dependency closure; for a declaration outside it, read the source file around the declaration (`mcp__lean-explore__get_source_link`) for its section `variable` lines. The search hit's `description` is a short title of the AI-generated `get_description` text (per `docs/mcp-server.md`; measured 2026-10-31): a snippet, never the source. - 3. **Reservoir** (about 920 packages, 2026-10-31): for the long tail neither index holds, `mcp__github__search_code` with `extension:lean`, NOT `language:Lean` (measured 2026-10-31, a query on this repository returned 9 files with `extension:lean` and 0 with `language:Lean`), on keywords and on the declaration names a library would likely choose. GitHub code search indexes default branches only. + 6. **A tool that is present but REFUSED is NOT RUN, never a null** — refused by the permission mode, or answering with an error that is not a rate limit (rung B2, step 5). Record the step NOT RUN with the refusal message verbatim. Measured 2026-10-31: every rung-B call of one review, the required `"formal"` one included, was refused by the permission mode. + - **Rung B2 — Lean libraries. Always run it.** It reaches Lean libraries that rung B's formal index does not hold; on the 2026-10-31 probes, equational_theories and this repository were reached only by step 3. LeanExplore's index overlaps rung B's in part. LeanExplore is Justin Asher's search engine for Lean declarations (arXiv:2506.11085; https://github.com/lean-explore/lean-explore), served as a hosted MCP at https://www.leanexplore.com/mcp. **If the `mcp__lean-explore__*` tools are not available to you, or are present but refused (rung B, rule 6), record steps 1–2 as NOT RUN with the reason or the refusal message verbatim, never as a null, and still do step 3.** + 1. **LeanExplore** — `mcp__lean-explore__search_summary(query, limit)`, **at least two phrasings** varied along the `R-NOTINLIB` axes. Each hit is `{id, name, description}`. Example, 2026-10-31: a Pataraia query returned Mathlib's `lfp` / Knaster–Tarski declarations only. `packages=[...]` restricts a search to named packages (measured 2026-10-31: `packages=["Cslib"]` returned only `Cslib.*` hits). + 2. **For any candidate, `mcp__lean-explore__get_source_code(declaration_id)`, then the elaborated type.** The source returns the declaration TEXT, which can omit section-level binders: measured 2026-10-31, `OrderHom.lfp` came back without `[CompleteLattice α]`. Read the hypotheses off the elaborated type before relying on it. **Inside this project's dependency closure, running it is the only route:** write a scratch `.lean` in the session scratchpad holding `#check @` and an `example` of the claimed statement closed `by exact?`, then run `lake env lean ` from the repo root (`lake build` does not reach a file outside the tree). `exact?` turns a search miss into an executed result. **Outside the closure (FLT, carleson, pfr, …), Tim's ruling of 2026-10-31:** read the source file around the declaration via `mcp__lean-explore__get_source_link`, its section `variable` lines included, and cite it as **PARTLY VERIFIED: source read, type not elaborated**. The two routes can disagree: on `OrderHom.lfp` the source's `variable` line declares `(f : α →o α)`, while the elaborated type is `(α →o α) →o α`. `mcp__lean-explore__get_dependencies` returns a PARTIAL list, as a JSON-encoded STRING rather than an array: measured 2026-10-31, for `Nat.Partrec.Code.fixed_point₂` it returned `"[\"Nat.Partrec.Code\", \"Eq\", \"Nat.Partrec.Code.eval\"]"`, which includes some constants of the statement and omits `Partrec₂` (the constant of the hypothesis `hf`) and the constants the proof uses. The search hit's `description` is the bold header of the AI-generated informalization (LeanExplore's `docs/data-models.md`; measured 2026-10-31): a snippet, never the source. **The index is a snapshot:** `get_source_link` points at Mathlib commit `aae61ae…` and this project pins `5450b53…` (`lake-manifest.json`), so line numbers can drift (`Nat.Partrec.Code.fixed_point₂`: L1021–1025 there, L1022–1026 at the pin; `OrderHom.lfp` did not move). A hit shows the name exists in their snapshot; confirm it at the pin. + 3. **Reservoir** (about 920 packages, 2026-10-31): for the long tail neither index holds, `mcp__github__search_code` with `extension:lean`, NOT `language:Lean` (measured 2026-10-31, a query on this repository returned 9 files with `extension:lean` and 0 with `language:Lean`), on keywords and on the declaration names a library would likely choose. Pass `perPage` ≤ 10 and add `-repo:timbrigham/ZeroParadox`: payloads are large and this repository ranks high (measured 2026-10-31: `epsilon0_eq_nfp_bot extension:lean` returned 10 files, all ours, and 0 with the exclusion). GitHub code search indexes default branches only. 4. **ITS NULL IS UNINFORMATIVE**, for the same coverage reason as rung B's. - 5. **Both are hosted services.** Per `docs/mcp-server.md`, LeanExplore allows 30 POST requests per client IP per 60 s, counting initialize and tool discovery; past that it answers HTTP 429 with `Retry-After`. GitHub code search is rate-limited too. A 403 or 429 is a wait, never a null. Each service sees every query, so phrase it neutrally rather than pasting unpublished claim text. + 5. **Both are hosted services.** Per LeanExplore's `docs/mcp-server.md`, it allows 30 POST requests per client IP per 60 s, counting initialize and tool discovery; past that it answers HTTP 429 with `Retry-After`. GitHub code search is rate-limited too. A rate-limit response (a 429, or a 403 that carries `Retry-After` or names a rate limit) is a wait, never a null; any other 403 is a refusal, recorded NOT RUN (rung B, rule 6). Each service sees every query, so phrase it neutrally rather than pasting unpublished claim text. - **Rung C — the open web.** Run it when rung B returns no good match, **and also when rung B returns a neighbourhood hit whose real source still needs identifying**. Everything pre-arXiv lives here — Lawvere 1969, Aczel 1988, Ostrowski, Gentzen, Carlström. `theoremsearch` cannot return those as sources, only as work other people cite, **and the reason is the corpus boundary rather than a quirk: per the tool's own description the index covers arXiv, the Stacks Project, ProofWiki, four open textbooks and Lean repositories, so a pre-arXiv paper reaches it as something later work cites, not as the source.** A Gentzen-1936 query returns modern arXiv papers citing Gentzen, never Gentzen. - **Rung D — RETRIEVE AND READ THE FULL SOURCE.** Use WebFetch; if a domain is not reachable that way, download it via PowerShell `Invoke-WebRequest -Uri -OutFile .claude-local/papers/.pdf` and open it with the Read tool (this works for any publisher — arXiv, Dagstuhl/LIPIcs, nLab, journal sites). **Download straight into `.claude-local/papers/` under that name** — one destination, so filing is not a second step anyone can skip — and **validate before you rely on it** (a tiny PDF is an error page, not a paper). ⚠ **This is the one place the read-only rule yields, and it is deliberate**: filing the source is what feeds rung A for every later scout, so a review that reads a PDF and leaves nothing behind makes the library decay while looking like diligence. - ⚠⚠ **RUNGS A–C ARE DISCOVERY. ONLY RUNG D IS VERIFICATION.** For a Lean declaration, rung D's retrieval is its source text plus its elaborated type (rung B2, step 2). **Draft from source, not from snippets — and a `theoremsearch` theorem body is a snippet, not a passage in hand.** Measured 2026-08-23: a returned body read as our recorded citation renumbered for a journal version, and the PDF showed the two statements were different (connexity versus splitting). The returned `slogan` field is an **LLM paraphrase**, `label`/`link` come back **null**, and ambient hypotheses are inconsistently included. If you genuinely cannot read the source, say so and treat the citation as **unverified**. + ⚠⚠ **RUNGS A–C ARE DISCOVERY. ONLY RUNG D IS VERIFICATION.** For a Lean declaration, rung D's retrieval is its source text plus its elaborated type; outside the dependency closure it reaches only PARTLY VERIFIED (rung B2, step 2). **Draft from source, not from snippets — and a `theoremsearch` theorem body is a snippet, not a passage in hand.** Measured 2026-08-23: a returned body read as our recorded citation renumbered for a journal version, and the PDF showed the two statements were different (connexity versus splitting). The returned `slogan` field is an **LLM paraphrase**; the `name` field carries the paper's own label on arXiv hits (measured 2026-10-31, `paper_filter="0801.2097"` returned "Lemma 1" and "Theorem 1" to "Theorem 3", matching the labels in Miller's PDF, where an appendix restarts the numbering, so two different statements both came back as "Theorem 2"), but numbering is version-specific and unverified until the source is open; `link` is **null** on Lean Repo hits; and ambient hypotheses are inconsistently included. If you genuinely cannot read the source, say so and treat the citation as **unverified**. - ⚠ **A NULL FROM RUNG B IS UNINFORMATIVE ON ITS OWN.** The index is coverage-bounded and the bound is invisible from the result — a paper this project holds on disk is verifiably absent from it. Never write "no prior art exists" from rung B, and do not record "none located as of <date>" until rung B (including a `"formal"` phrasing), rung B2 and rung C have all run. In rung B2, steps 1–2 may be recorded NOT RUN (tool unavailable, with the reason); step 3 is always required, and nothing records "none located" with it skipped. + ⚠ **A NULL FROM RUNG B IS UNINFORMATIVE ON ITS OWN.** The index is coverage-bounded and the bound is invisible from the result — a paper this project holds on disk is verifiably absent from it. Never write "no prior art exists" from rung B, and do not record "none located as of <date>" until rung B (including a `"formal"` phrasing), rung B2 and rung C have all run. A step recorded NOT RUN (rung B, rule 6) has not run. In rung B2, steps 1–2 may be recorded NOT RUN (tool unavailable or refused, with the reason); step 3 is always required, and nothing records "none located" with it skipped. 5. **Verdict for this claim:** - **Prior art exists and is already cited** in the content → OK (after confirming the citation is real and correctly directed). - - **Prior art exists and is NOT cited** → FAIL for this claim: give the full citation (author, year, venue), state the claim's honest *delta* against it (what the framework genuinely adds), and the credit direction (framework is an instance joining the program, never subsuming it). + - **Prior art exists and is NOT cited** → FAIL for this claim: give the full citation (author, year, venue; for prior art that exists only as a Lean declaration, the repository, the declaration name and the commit you read it at, plus its status from rung B2 step 2, elaborated at the pin or PARTLY VERIFIED), state the claim's honest *delta* against it (what the framework genuinely adds), and the credit direction (framework is an instance joining the program, never subsuming it). - **A diligent search finds no closer specialist prior art** → OK, but record "searched [date], no closer prior art found" so the determination is on file. 6. **Citation-direction check:** for any prior art the content already cites, confirm it is cited in the correct direction (framework as instance/extension, not the prior work as an instance of the framework) and that the source actually says what the content claims it says. diff --git a/tools/process/prior-art.md b/tools/process/prior-art.md index 2b8d6308..a7cb777d 100644 --- a/tools/process/prior-art.md +++ b/tools/process/prior-art.md @@ -63,7 +63,7 @@ once declared Aczel unobtainable while it sat on disk. **Grep loosely** — scan intra-word spaces, so a tight-pattern miss is not evidence of absence. **Rung 2 — `theoremsearch`.** Claim-shaped rather than file-shaped: it matches on *statement*, which is -the thing a title search cannot reach. Four standing rules, each measured: +the thing a title search cannot reach. Five standing rules, each measured: - **THREE PHRASINGS MINIMUM**, along the four axes in § `R-NOTINLIB` (body: `tools/process/not-in-the-library.md`) — POLARITY, PART OF SPEECH, VOCABULARY, DISPLAY. Measured: the noun form put the right theorem at rank 1 and the **verb** form dropped it out of the top 5 entirely, @@ -84,15 +84,26 @@ the thing a title search cannot reach. Four standing rules, each measured: `"both"`). Coverage, a dated sample (2026-10-31): hits in Mathlib, pfr, carleson, FLT, HarderNarasimhan; misses on the probes run, teorth/equational_theories and this repository. A formal null is coverage-bounded. +- **A TOOL PRESENT BUT REFUSED IS NOT RUN, NEVER A NULL** — by the permission mode, or by an error that + is not a rate limit. Record the refusal message verbatim (2026-10-31: every rung-2 call of one review + was refused by the permission mode). **Rung 3 — Lean libraries, always run.** LeanExplore (Justin Asher, arXiv:2506.11085): `search_summary`, -two phrasings minimum, then `get_source_code` on any candidate plus its elaborated type from `#check` -(the only route; `get_dependencies` returns names only), because the returned text can omit section -binders (2026-10-31: `OrderHom.lfp` lost `[CompleteLattice α]`). Then GitHub code search with -`extension:lean`, not `language:Lean` (2026-10-31: 9 files against 0), for the Reservoir long tail -(about 920 packages, 2026-10-31). The LeanExplore half may be recorded NOT RUN if the tools are -unavailable; the code search is always required. Its null is uninformative too; both services are -rate-limited. Full rules: `.claude/commands/prior-art-review.md`, rung B2. +two phrasings minimum (`packages=[...]` narrows to named packages), then `get_source_code` on any +candidate plus its elaborated type, because the returned text can omit section binders (2026-10-31: +`OrderHom.lfp` lost `[CompleteLattice α]`). Inside this project's dependency closure, running it is the +only route: `#check` and `exact?` in a scratchpad `.lean`, run with `lake env lean ` from +the repo root. Outside it (FLT, carleson, pfr), Tim ruled 2026-10-31 that the source file read via +`get_source_link`, section `variable` lines included, is cited **PARTLY VERIFIED: source read, type not +elaborated**. `get_dependencies` returns a partial list as a JSON-encoded string (2026-10-31: for +`Nat.Partrec.Code.fixed_point₂`, some statement constants, but not `Partrec₂` from its hypothesis, nor +the proof's constants), and LeanExplore's snapshot is not the pinned Mathlib, so confirm a hit at the pin. +Then GitHub code search with `extension:lean`, not `language:Lean` (2026-10-31: 9 files against 0), +`perPage` ≤ 10 and `-repo:timbrigham/ZeroParadox`, for the Reservoir long tail (about 920 packages, +2026-10-31). The LeanExplore half may be recorded NOT RUN if the tools are unavailable or refused; the +code search is always required. Its null is uninformative too; both services are rate-limited, and only +a rate-limit response is a wait. A Lean-only prior art is cited by repository, declaration name and +commit read, plus that verification status. Full rules: `.claude/commands/prior-art-review.md`, rung B2. **Rung 4 — the open web.** Runs when rung 2 returns no good match, **and also when it returns a neighbourhood hit whose actual source needs identifying**. This is where everything pre-arXiv lives — @@ -106,7 +117,8 @@ until this rung.** Draft-from-source is unchanged by any of the above: existence source's *content* may not be asserted without the passage in hand. ⚠ **RUNGS 1-4 ARE DISCOVERY. ONLY RUNG 5 IS VERIFICATION.** For a Lean declaration, rung 5's -retrieval is its source text plus its elaborated type. The ladder makes finding candidates +retrieval is its source text plus its elaborated type; outside the dependency closure it reaches only +PARTLY VERIFIED. The ladder makes finding candidates cheaper; it does not make any of them citable. See § 2b for the measurement that settles this. ## 2b. Why the ladder is shaped this way — the calibration, 2026-08-23 @@ -121,8 +133,8 @@ content-exact statements. Veltri, Ahrens–Capriotti–Spadotti and Yanofsky wer **Coverage is real and provable.** arXiv:2104.02549 is **verifiably absent** from the index while sitting in `papers/`. So a gate blocking on "no prior art found" would have returned clear for a claim whose prior -art this project is physically holding. `paper_filter` matches arXiv ids as a prefix and other tokens as -title substrings (the tool's schema; 2026-10-31). Verify the filter before believing its zero. +art this project is physically holding. `paper_filter` needs a FULL arXiv id, despite the schema's "prefix": +on 2026-10-31 `0801.209` returned empty and `0801.2097` hit. Verify the filter before believing its zero. **Precision: one correct abstention, and one control that was itself wrong.** The two-forks universal negative (`ZeroParadox/Algebra/WheelFrac.md`) drew only unrelated combinatorics — correct abstention. @@ -138,8 +150,10 @@ arXiv:2104.02549 — *"≤ is connex, `(X≤Y) ⊎ (X≥Y)`"* ⟹ LEM. **From th as Thm 38(d) renumbered for the journal version. Opening the PDF on disk shows they are different statements** — connexity versus splitting. Trusting the body would have produced a wrong citation. -Three reasons the body is not a passage, all observed: `label` and `link` come back **null**, so there is -no in-paper locator and numbering shifts between versions of one work; the `slogan` field is an **LLM +Three reasons the body is not a passage, all observed: the `name` field carries the in-paper label on +arXiv hits (2026-10-31, `paper_filter="0801.2097"`: Miller's own labels, two distinct statements both +"Theorem 2" because an appendix restarts the numbering), but numbering is version-specific and +unverified until the source is open, and `link` is **null** on Lean Repo hits; the `slogan` field is an **LLM paraphrase** sitting beside the body and is the most quotable thing on the screen; and ambient hypotheses are inconsistently present — sometimes in the body (*"If H preserves monomorphisms…"*), sometimes not, which is precisely the AMM Thm 8.1 trap this project already records (those conditions are the From 08ce753aad0bea14db4268f33629efee8ec560ea Mon Sep 17 00:00:00 2001 From: probe Date: Sat, 31 Oct 2026 22:42:01 -0500 Subject: [PATCH 008/182] Die index errata: carried ordinary findings fixed (lane C) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit DieCannotBe: loop/climb survey re-run and recorded verbatim; the ℕ∞ summary Statement names wiring one's c ≠ ⊤ and wiring two's join-free loop; "might fill both roles"; the no-switch underclaim replaced by an example (UpAndOver's die motion fires the corner, legs agree, oppose in neither order); a stronger no-corner CONTROL with OVER at a landing; Rocq Diaconescu.v pointer names the compatibility section; registration sentence rewrapped so "decided" attaches to UP-definedness; full path for LawvereTaboo; Harary-Palmer cited for the term only; ε₀ given both faces; "image motion" second sense dropped; t_snap_given_cover premise named; Rutten Cor 5.6 last clause split into its two halves; isolating test "exists"; toPart equation stated alone; Lemma 7.2 values as points of ℕ∞; 2-adic reversed doubling drops by exactly one (example). Die: bisimilar_equivalence and isBisim_preimage Readings; NO-GO Prop for 2 holds only classically; wlpo_of_isolating_infty names basic-discontinuity; isolating_infty_of_decEq docstring says "exists". ChoiceCannotBe: case 3 de Jong example pins Prop.instHeytingAlgebra (measured [propext] pinned, [propext, Quot.sound] unpinned); case 5 Rocq pointer names the compatibility section. Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01Qj4hZEe22hsY1FqfbKnnU2 --- ZeroParadox/Category/ChoiceCannotBe.lean | 11 +- ZeroParadox/Die.lean | 25 ++-- ZeroParadox/DieCannotBe.lean | 149 +++++++++++++++-------- 3 files changed, 117 insertions(+), 68 deletions(-) diff --git a/ZeroParadox/Category/ChoiceCannotBe.lean b/ZeroParadox/Category/ChoiceCannotBe.lean index 88478a62..27d15c2d 100644 --- a/ZeroParadox/Category/ChoiceCannotBe.lean +++ b/ZeroParadox/Category/ChoiceCannotBe.lean @@ -369,8 +369,11 @@ is essential. -/ -- for every `c` in D, hence `c = False ∨ c ≠ False` (next `example`); an instance of theirs, not a -- generalization. -- Statement: the piece at ⊥ of `Prop` gives some `a ≠ False` on whose down-set `{c | c → a}` every --- `c = False` is decided (`[propext]`). -example (h : ZeroParadox.BotIntervalTwo Prop) : +-- `c = False` is decided (`[propext]`); ⊥ of `Prop` is pinned to `Prop.instHeytingAlgebra` (§ III's +-- instance hazard), since under this file's imports an unpinned `OrderBot Prop` resolves through +-- `Prop.instCompleteLattice` and the statement then measures `[propext, Quot.sound]`. +example (h : @ZeroParadox.BotIntervalTwo Prop _ + (@HeytingAlgebra.toOrderBot Prop Prop.instHeytingAlgebra)) : ∃ a : Prop, a ≠ False ∧ ∀ c : {c : Prop // c → a}, c.1 = False ∨ c.1 ≠ False := by obtain ⟨a, hlt, h2⟩ := h exact ⟨a, hlt.ne', fun c => (h2 c.1 c.2).imp id @@ -430,7 +433,9 @@ example : ∀ (β : Type) (M : ZeroParadox.Motion β), M.RegisteredDecidable := -- 3's, that theorem is a class-level witness no other framework proof names. Neither hypothesis form -- measures any axiom alone (statement control, 2026-10-18). -- Reading (cited, not claimed): PRIOR ART, Diaconescu's argument as in the Rocq standard library, --- `theories/Logic/Diaconescu.v` Part A (`pred_ext_and_rel_choice_imp_EM`), on the same two classes +-- `theories/Logic/Diaconescu.v` Part A, section `PredExt_RelChoice_imp_EM`, which the file marks "kept +-- for backwards compatibility" (`pred_ext_and_rel_choice_imp_EM`; the current Part A theorem +-- `prop_ext_and_rel_choice_imp_EM` uses other classes), on that section's two classes -- `b = true ∨ p`, `b = false ∨ p`, with a selector given as data; an instance of theirs, not a -- generalization (`ZeroParadox/DieCannotBe.lean` § X). #check @ZeroParadox.Motion.em_of_selectedData diff --git a/ZeroParadox/Die.lean b/ZeroParadox/Die.lean index 6d3a0479..6b958a5f 100644 --- a/ZeroParadox/Die.lean +++ b/ZeroParadox/Die.lean @@ -3018,8 +3018,8 @@ example : -- `f ↦ (x ↦ (V ↦ x (V ∘ f)))` fails `PreservesWeakPullbacksElementwise`, at `f : Bool → Bool` -- constant `false` and `g : Unit → Bool` constant `true`, whose pullback is empty. Reading: the -- functor is the contravariant powerset composed with itself, the neighbourhood functor with `Prop` --- for `2`, which Gumm and Freese (arXiv:2103.09566, p. 1) name as an exception to weak preservation --- of pullbacks. +-- in place of `2` (the two agree only classically); Gumm and Freese (arXiv:2103.09566, p. 1) name the +-- neighbourhood functor as an exception to weak preservation of pullbacks. example : ¬ PreservesWeakPullbacksElementwise { obj := fun S : Type => (S → Prop) → Prop map := fun f => TypeCat.ofHom fun x V => x fun a => V (f a) } := by @@ -3191,7 +3191,9 @@ theorem isBisim_comp {M : Motion α} {N : Motion β} {P : Motion γ} {R : α → def Bisimilar (M : Motion α) (N : Motion β) (a : α) (b : β) : Prop := ∃ R, IsBisim M N R ∧ R a b /-- `Statement:` `Bisimilar M M` is an equivalence relation (Mathlib `Equivalence`). `Reading:` the - last clause of Rutten's Corollary 5.6 (p. 33); transitivity here uses `isBisim_comp`. -/ + equivalence half of the last clause of Rutten's Corollary 5.6 (p. 33), that the greatest + bisimulation on one system is a bisimulation equivalence; the bisimulation half is + `isBisim_bisimilar` at `N := M`. Transitivity here uses `isBisim_comp`. -/ theorem bisimilar_equivalence (M : Motion α) : Equivalence (Bisimilar M M) := ⟨fun _ => ⟨Eq, isBisim_eq M, rfl⟩, fun ⟨R, hR, r⟩ => ⟨flip R, isBisim_flip hR, r⟩, @@ -3255,7 +3257,7 @@ theorem isBisim_ker_coalgHom {α β : Type u} {M : Motion α} {N : Motion β} /-- `Statement:` if `f` carries steps to steps and has `StepBack` and `UpStrict`, and `Q` is a bisimulation from `N` to itself, `fun a a' => Q (f a) (f a')` is one from `M` to itself. - `Reading:` Rutten's Proposition* 5.9(2) (p. 34). -/ + `Reading:` for carriers in one universe, Rutten's Proposition* 5.9(2) (p. 34). -/ theorem isBisim_preimage {M : Motion α} {N : Motion β} {f : α → β} (hf : ∀ a b, M.step a b → N.step (f a) (f b)) (hb : StepBack M N f) (hu : UpStrict M N f) {Q : β → β → Prop} (hQ : IsBisim N N Q) : IsBisim M M (fun a a' => Q (f a) (f a')) := by @@ -3840,12 +3842,12 @@ end Motion namespace NInf /-- `Statement:` if a `Bool` test `t` isolates `∞`, deciding membership in `{∞}`, the weak limited - principle of omniscience (WLPO) holds. `Reading:` "isolated": Escardó, arXiv:2609.10447v3, Def. - 3.2 (p. 14), as data; compare his Examples 3.3(5) with the `Nonempty` iff example, whose forward - direction this is at the `Prop` level (`ZeroParadox/DieCannotBe.lean` § XXVII). Via - `isolating_infty_iff`, the choice-free reduction is the WLPO row with Lemma 3.3 (p. 4) of his - preprint of JSL 78(3) (2013), formalized for the `ℕ∞`-indexed `WLPO` as TypeTopology - `basic-discontinuity-taboo` (`Taboos.BasicDiscontinuity`, retrieved 2026-10-29). -/ + principle of omniscience (WLPO) holds. `Reading:` "isolates": `∞` is isolated (Escardó, + arXiv:2609.10447v3, Def. 3.2, p. 14), as data; compare his Examples 3.3(5) with the `Nonempty` iff + example, whose forward direction this is at the `Prop` level (`ZeroParadox/DieCannotBe.lean` + § XXVII). By `isolating_infty_iff`, `t` is TypeTopology's `basic-discontinuity`; the reduction is + his WLPO row with Lemma 3.3 (p. 4) of the preprint of JSL 78(3) (2013), formalized for the + `ℕ∞`-indexed `WLPO` as `basic-discontinuity-taboo` (`Taboos.BasicDiscontinuity`, 2026-10-29). -/ theorem wlpo_of_isolating_infty (t : NInf → Bool) (ht : ∀ b, t b = true ↔ b = infty) : ∀ r : ℕ → Bool, (∀ n, r n = false) ∨ ¬ ∀ n, r n = false := fun r => by cases h : t (det r) with @@ -3950,7 +3952,8 @@ def decEq_of_isolating_infty (t : NInf → Bool) (ht : ∀ b, t b = true ↔ b = DecidableEq NInf := decEq_of_wlpoData fun r => @decidable_of_iff _ _ ((ht (det r)).trans (det_eq_infty_iff r)) (instDecidableEqBool (t (det r)) true) -/-- `Statement:` and back: decidable equality on `NInf` gives a `Bool` test isolating `∞`. -/ +/-- `Statement:` and back: decidable equality on `NInf` gives that a `Bool` test isolating `∞` + exists. -/ theorem isolating_infty_of_decEq (d : DecidableEq NInf) : ∃ t : NInf → Bool, ∀ b, t b = true ↔ b = infty := ⟨fun b => @decide _ (d b infty), fun b => @decide_eq_true_iff _ (d b infty)⟩ diff --git a/ZeroParadox/DieCannotBe.lean b/ZeroParadox/DieCannotBe.lean index 4fe2c4ed..b01d9199 100644 --- a/ZeroParadox/DieCannotBe.lean +++ b/ZeroParadox/DieCannotBe.lean @@ -104,11 +104,15 @@ example {α : Type} (f : α → α) : IsIdempotentElem (show Function.End α fro -- as of 2026-10-18 (UP is total in both; their text, searched for "partial", "loop" and "cycle", has -- no hit bearing on a switch); the dated search for the pair is in `LEAN_CUSTOM_REGISTRY.md`. The -- loop/climb split as a named pair, not located closer than Meseguer and R. Diaconescu as of --- 2026-10-22, searched by theoremsearch alone (its null is uninformative on its own) in three --- phrasings: "rewrite step from a normal form followed by normalization returns to the same or a --- different normal form"; "stuttering step ... quotient transition system"; "closing a cover of a --- closed element yields the next closed element"; and by one web search the same day in rewriting, --- normal-form, stutter and closure-cover vocabulary. +-- 2026-10-31, searched as follows: theoremsearch only (its null is uninformative on its own), three +-- phrasings varied by axis, verbatim: "a rewrite step from a normal form followed by normalization +-- returns to the same normal form or reaches a different one" (rewriting vocabulary); "after one +-- rule application and renormalization the normal form never returns to the original normal form" +-- (polarity: the wording if the split were refused); "stuttering steps versus visible steps of a +-- transition system on equivalence classes of states" (concurrency vocabulary). The third returned +-- stutter-step and stuttering-equivalence definitions (a transition whose two ends carry one label), +-- the nearest vocabulary located for the loop read on transitions between landings; none was +-- retrieved, so none is cited. No web search is recorded for this survey. -- Reading: the adjoined-points switch is a CHOICE OF CARRIER: `Option σ` adjoins one point and -- `Option (Option σ)` two (the `TriStep` example below). `Pointed` and `Bipointed` carry -- distinguished points, not adjoined ones, and `Bipointed`'s two may coincide. @@ -216,9 +220,12 @@ example : ∃ M : ZeroParadox.Motion (Fin 4), -- (`corner_iff_loop_or_climb`), not exclusively (`Fin 4` above). In a partial order agreeing legs give -- no loop (`not_loop_of_agree`), and the legs of `UpAndOver.toMotion`, whose OVER is every cover of the -- carrier (one chosen wiring, § XIX `cover_overs_differ`), agree (`toMotion_agree`), so that motion climbs --- and never loops (`toMotion_climb`, `toMotion_not_loop`). `phaseBelowCoverMotion` climbs (§ XXIII); the ℕ∞ --- model's join and scale loop, in both wirings below, and in each wiring, in ℕ∞'s own order and in --- ZP-A's induced order alike, one leg raises and the other lowers (the `example` after them). +-- and never loops (`toMotion_climb`, `toMotion_not_loop`). `phaseBelowCoverMotion` climbs +-- (§ XXIII). On the ℕ∞ model both wirings below loop: wiring one (UP the join with `c`, OVER the scale step) if +-- `c ≠ ⊤` of `ℕ∞`; wiring two (UP constant ⊤ of `ℕ∞`, OVER the join step) with no use of the join, +-- since the always-true step loops there too (the CONTROL after the wirings). In each wiring, in ℕ∞'s +-- own order and in ZP-A's induced order alike, one leg raises and the other lowers (the `example` +-- after them). -- Reading: by the ruling above both kinds are legal up-and-over shapes, and the crossing of the joint -- is OVER leaving the set of landings and UP returning to a landing (the `Statement:` above). Tim's -- read, 2026-10-22, verbatim: "My gut reaction is that the joint might fill both of those rolls.. you @@ -228,9 +235,10 @@ example : ∃ M : ZeroParadox.Motion (Fin 4), -- legs that oppose in one order switch order, since the induced order is ℕ∞'s own order reversed (the -- `example` after that one, per leg: raising in the induced order iff lowering in ℕ∞'s own). A switch -- occurs with no corner (the `CONTROL` after that one), so these examples do not show the switch BEING --- the crossing; that the --- joint fills both roles stays Tim's read. Not claimed here: that the two roles coincide in general, or --- that every crossing is a switch of order. +-- the crossing; that the joint might fill both roles stays Tim's read. Not claimed here: that the two +-- roles coincide in general. And not every crossing is a switch of order: the die motion of any +-- `UpAndOver` fires the corner while its legs agree and oppose in neither the carrier's order nor its +-- dual (the `example` after that CONTROL). -- Reading: Q1: in the second wiring the loop's landing is the pole, ⊤ of `ℕ∞` (⊥ of the ZP order), which -- steps off the landings and is sent back to itself. Q2: run backwards (`reverse`, which keeps UP), a -- loop is a point `b ≠ y` from which OVER and UP both reach the landing `y`, and a climb one from which @@ -316,28 +324,41 @@ example (M : ZeroParadox.Motion ℕ∞) : fun x y => show min x y = y ↔ y ≤ x from min_eq_right_iff ⟨forall_congr' fun x => forall_congr' fun y => imp_congr_right fun _ => h x y, forall_congr' fun x => forall_congr' fun y => imp_congr_right fun _ => h x y⟩ --- Statement: CONTROL: on `ℕ∞`, UP the join with 0 of `ℕ∞` (every point sent to 0, which is ⊥ of ℕ∞'s --- own order and ⊤ of ZP-A's induced order), OVER the scale step only from points other than 0: UP --- moves 1 to 0, the legs oppose in ℕ∞'s own order (UP lowers, OVER raises), UP does not raise there and --- raises in the induced order, and the corner does not fire (the one landing, 0, has no step). +-- Statement: CONTROL: on `ℕ∞`, UP the join with 1 (`x ↦ min x 1`), OVER the scale step from 0 only +-- (`0 → 1`): the legs oppose in ℕ∞'s own order (UP lowers, OVER raises), UP does not raise there (it +-- moves 2 to 1) and raises in ZP-A's induced order, OVER fires at the landing 0, and the corner does +-- not fire, since OVER lands on 1, a landing. So the control fails the corner with OVER at a landing, +-- not only for want of one. example : - let M := ZeroParadox.Motion.ofTotal (fun x : ℕ∞ => ZeroParadox.ZPSemilattice.join x 0) - (fun x => show min (min x 0) 0 = min x 0 by rw [min_assoc, min_self]) - (fun a b => a ≠ 0 ∧ b = ZeroParadox.ValuationStructure.scale a) - (0 : ℕ∞) ∈ M.up 1 ∧ M.Oppose ∧ ¬ M.UpRaises ∧ - @ZeroParadox.Motion.UpRaises ℕ∞ M (ZeroParadox.zpSemilatticeSup ℕ∞).toLE ∧ ¬ M.Corner := by + let M := ZeroParadox.Motion.ofTotal (fun x : ℕ∞ => ZeroParadox.ZPSemilattice.join x 1) + (fun x => show min (min x 1) 1 = min x 1 by rw [min_assoc, min_self]) + (fun a b => a = 0 ∧ b = ZeroParadox.ValuationStructure.scale a) + M.Oppose ∧ ¬ M.UpRaises ∧ + @ZeroParadox.Motion.UpRaises ℕ∞ M (ZeroParadox.zpSemilatticeSup ℕ∞).toLE ∧ + M.OverAtLanding ∧ ¬ M.Corner := by intro M - refine ⟨Part.mem_some_iff.2 (by simp [ZeroParadox.ZPSemilattice.join]), - ⟨fun x y h => ?_, fun a b ⟨_, h⟩ => ?_⟩, fun h => ?_, fun x y h => ?_, ?_⟩ - · rw [Part.mem_some_iff.1 h]; exact min_le_left x 0 + refine ⟨⟨fun x y h => ?_, fun a b ⟨_, h⟩ => ?_⟩, fun h => ?_, fun x y h => ?_, + ⟨0, 1, Part.mem_some_iff.2 (by simp [ZeroParadox.ZPSemilattice.join]), rfl, rfl⟩, ?_⟩ + · rw [Part.mem_some_iff.1 h]; exact min_le_left x 1 · rw [(h : b = a + 1)]; exact le_self_add - · exact absurd (h 1 (min 1 0) (Part.mem_some _)) (by simp) + · exact absurd (h 2 (min 2 1) (Part.mem_some _)) (by decide) · rw [Part.mem_some_iff.1 h] - show min x (min x 0) = min x 0 + show min x (min x 1) = min x 1 rw [← min_assoc, min_self] - · rintro ⟨y, b, z, hy, ⟨hy0, -⟩, -, -⟩ - have : y = min y 0 := Part.mem_some_iff.1 hy - exact hy0 (this.trans (min_eq_right (zero_le y))) + · rintro ⟨y, b, z, -, ⟨rfl, hb⟩, hz, hzb⟩ + have hb' : b = 1 := by rw [hb]; rfl + subst hb' + exact hzb (Part.mem_some_iff.1 hz) +-- Statement: a crossing with no switch: for every `UpAndOver α`, its die motion fires the corner, its +-- legs agree, and they oppose neither in `α`'s order nor in the order dual `αᵒᵈ`. +example {α : Type} [PartialOrder α] (U : ZeroParadox.UpAndOver α) : + U.toMotion.Corner ∧ U.toMotion.Agree ∧ ¬ U.toMotion.Oppose ∧ + ¬ @ZeroParadox.Motion.Oppose αᵒᵈ U.toMotion _ := by + obtain ⟨y, b, -, hb, hne⟩ := U.corner + refine ⟨ZeroParadox.Motion.climb_corner _ U.toMotion_climb, U.toMotion_agree, fun h => ?_, + fun h => ?_⟩ + · exact hne (le_antisymm (h.1 b (U.up b) (Part.mem_some _)) (U.up.le_closure b)) + · exact lt_irrefl _ (lt_of_lt_of_le hb.lt (h.2 y b hb)) -- Statement: CONTROL: with UP constant ⊤ of `ℕ∞`, the always-true step loops too, so the loop kind -- there says nothing specific about the join. example : (ZeroParadox.Motion.ofTotal (fun _ : ℕ∞ => (⊤ : ℕ∞)) (fun _ => rfl) (fun _ _ => True)).Loop := @@ -1215,12 +1236,15 @@ example (h : ∀ (α : Type) (M : ZeroParadox.Motion α), M.SelectedData) : · exact absurd hb hn · exact (key S).1 (of_decide_eq_true hd) -- Reading (cited, not claimed): Diaconescu's argument as in the Rocq standard library, --- `theories/Logic/Diaconescu.v` Part A (`pred_ext_and_rel_choice_imp_EM`, through --- `AC_bool_subset_to_bool`, a functional relation choosing in every inhabited subset of `bool`), which --- credits Diaconescu 1975 and Lacas and Werner 1999, run on the data side: there relational choice, a --- `Prop`, gives excluded middle; here a selector given as data gives the fragment (the `example` --- above) and excluded middle directly (`Motion.em_of_selectedData`, next line), the latter on Part A's --- own two classes `b = true ∨ p`, `b = false ∨ p`; an instance of theirs, not a generalization. +-- `theories/Logic/Diaconescu.v` Part A (rocq-prover/stdlib, retrieved 2026-10-31), in its section +-- `PredExt_RelChoice_imp_EM`, which the file marks "kept for backwards compatibility" +-- (`pred_ext_and_rel_choice_imp_EM`, through `AC_bool_subset_to_bool`, a functional relation choosing +-- in every inhabited subset of `bool`); the current Part A theorem, `prop_ext_and_rel_choice_imp_EM`, +-- uses the classes `(True, P)` and `(P, True)` instead. The file credits Diaconescu 1975 and Lacas and +-- Werner 1999. Run on the data side: there relational choice, a `Prop`, gives excluded middle; here a +-- selector given as data gives the fragment (the `example` above) and excluded middle directly +-- (`Motion.em_of_selectedData`, next line), the latter on that section's own two classes +-- `b = true ∨ p`, `b = false ∨ p`; an instance of theirs, not a generalization. #check @ZeroParadox.Motion.em_of_selectedData -- Statement: (a) on every motion on every `α : Type` ⇒ excluded middle, directly #check @ZeroParadox.Motion.lpo_of_selectedTotal_nat_boolStep -- Statement: (b) on every motion on `ℕ` with a `Bool`-valued step ⇒ the limited principle of omniscience (`[propext]`) -- Statement: CONTROL: (a) there is free: a `Bool`-valued step on `ℕ` has a data selector, `Nat.find`. @@ -1731,18 +1755,19 @@ example (h : ∀ (β : Type) [PartialOrder β] [OrderBot β], ZeroParadox.BotCov -- counterexamples in the "stable" form, a statement implying a principle quantified over all binary -- sequences (Diener, arXiv:1804.05495v3, § 0.3, p. 5); the excluded-middle and weak-excluded-middle -- reductions quantify over `Prop` instead. The die-shaped statements themselves were not located in the --- sources read, as of 2026-10-28. Decidable --- equality frees the corner split (`Motion.corner_iff_loop_or_climb`) and the cut --- (`botCovered_botIntervalTwo`); it does not free registration, whose taboo comes from a --- `Prop`-valued UP-definedness, is reached on `Unit` (`Motion.em_of_registeredDecidable`), and is --- decided when UP is total or presented as an `Option` (`registeredDecidable_of_upTotal`, +-- sources read, as of 2026-10-28. Decidable equality frees the corner split +-- (`Motion.corner_iff_loop_or_climb`) and the cut (`botCovered_botIntervalTwo`); it does not free +-- registration. Registration's taboo comes from a `Prop`-valued UP-definedness and is reached on +-- `Unit` (`Motion.em_of_registeredDecidable`); UP-definedness itself is decided when UP is total or +-- presented as an `Option` (`registeredDecidable_of_upTotal`, -- `ofOption_registeredDecidable`). On `ℕ`, the quantifier in the trichotomy, the selector and fan-in -- returns as LPO or Markov's principle; this is measured for `ℕ`, and for the trichotomy and the -- selector also on `Option ℕ` (§ XXVII). Escardó (preprint of JSL 78(3) (2013), p. 1) grades the -- same principle by the set searched, "For X finite this is trivial, and for X = ℕ, this is LPO", -- and exhibits infinite sets on which it holds, the first being ℕ∞ (`NInf.omniscient`, § XXVII). -- LPO and weak excluded middle are not shown comparable here: the model over ℝ shows that LPO does --- not imply weak excluded middle (`LawvereTaboo.lean` § V, last Reading), and the converse was not +-- not imply weak excluded middle (`ZeroParadox/Category/LawvereTaboo.lean` § V, last Reading), and the +-- converse was not -- settled from the sources read. -- Statement: `Prop`, UP double negation `p ↦ ¬¬p` (total, so registration is free, -- `registeredDecidable_of_upTotal`), OVER negation `p → ¬p`: a decidable proposition is a landing. @@ -1793,8 +1818,9 @@ example {α : Type} (M : ZeroParadox.Motion α) (σ : α → α) (hσ : Function ⟨fun h b hb => h _ (by rw [hr, hσ] at hb; exact hb), fun h a ha => h (σ a) ((hr _ _).1 ha)⟩ #check @ZeroParadox.Motion.bijOn_sources_sinks -- Statement: and the sources map one-to-one onto the sinks -- Reading (cited, not claimed): folklore, of which the theorem is an instance. A digraph isomorphic to --- its converse is self-converse (Harary and Palmer, "Enumeration of self-converse digraphs", --- Mathematika 13 (1966); bibliographic record only, not read), and the theorem says an involutive such +-- its converse is called self-converse; the term is in the title of Harary and Palmer, "Enumeration of +-- self-converse digraphs", Mathematika 13 (1966), whose text was not read (bibliographic record +-- only), so no definition or result is attributed to them here. The theorem says an involutive such -- isomorphism sends the sources onto the sinks; the poset form is Chajda and Länger, arXiv:2502.01266v1, Lemma 3.6, p. 5: for an antitone -- involution `'` and `A ⊆ P`, "(Max A)' = Min A' and (Min A)' = Max A'". The dynamical analogue is in -- Devaney's § IX (PDF page 26 of the copy read): for a symmetric hyperbolic critical point `p`, "by @@ -2227,7 +2253,8 @@ example (n : ℤ) : let M := (ZeroParadox.Motion.ofTotal (id : ZeroParadox.Spher -- from itself, INVARIANT under reversal (`Option.map`; ⊤ of `E0Note`; `∞` of `OnePoint ℚ_[2]` under -- `rScale n`, where `0`, not adjoined, behaves the same, `rInv` reverses the motion, and `rInv_swaps` -- exchanges the two). ⊤ of `E0Note` is the point `e0Repr` sends to ε₀, and ε₀ is the minimum step --- next to the pole, never the pole (`ZeroParadox/Ordinal/Epsilon0CannotBe.lean` § III); it sits +-- next to the pole, never the pole, and the tower's supremum, both at once (`epsilon0_min_eq_max`, +-- `ZeroParadox/Ordinal/Epsilon0CannotBe.lean` § III); it sits -- in that list beside `∞` as a self-loop, not as the pole's infinity. An -- adjoined value in the step's codomain gives a sink instead (`runMotion`; both `TriStep` values, which -- the relation does not tell apart). Under a function a halted and a self-looping configuration share @@ -3250,8 +3277,8 @@ example : (fun i : Fin 3 => i + 1) ≠ (fun i => i + 2) ∧ #check @ZeroParadox.towerNONote_orbits -- Statement: the `n`-th stage maps to `towerImageStep^[n] 0` and to `fundamentalSeq n` #check @ZeroParadox.isEmpty_relHom_omegaPow_towerImageStep -- Statement: no relation homomorphism from the steps of `ofFun (ω^·)` on `Ordinal` to those of `ofFun towerImageStep` -- Reading: a span `Ordinal ← NONote → ℤ_[2]`, two maps out of one motion; no map of motions runs from --- `ofFun (ω^·)` on `Ordinal` to the image motion `ofFun towerImageStep`, and no equation between ε₀ and --- ℤ_[2]'s 0 is stated. +-- `ofFun (ω^·)` on `Ordinal` to `ofFun towerImageStep` on the 2-adic side, and no equation between +-- ε₀ and ℤ_[2]'s 0 is stated. #check @ZeroParadox.tower_polarity -- Statement: stage to stage, the ordinal value and the image's valuation rise; the image's norm rises and its `q2Val` falls at stage 0, the reverse from stage 1 #check @ZeroParadox.towerImageStep_no_polarity_norm_q2Val -- Statement: under the norm view and under the `q2Val` view the image step neither raises nor lowers #check @ZeroParadox.towerImageStep_nonzero_polarity -- Statement: on the nonzero points it lowers by norm and raises by `q2Val` @@ -3549,6 +3576,17 @@ example : (∀ a b, (ZeroParadox.Motion.ofFun (fun y : ℤ_[2] => 2 * y)).revers (FiniteMultiplicity.of_prime_left hp hp.ne_zero).emultiplicity_self, add_comm] exact ⟨hd, ZeroParadox.Motion.rank_eq_top_of_cycle _ hd (Relation.TransGen.single (show (0 : ℤ_[2]) = 2 * 0 by rw [mul_zero]))⟩ +-- Statement: and it drops by exactly one along each such step, by the same rewrite. +example : ∀ a b, (ZeroParadox.Motion.ofFun (fun y : ℤ_[2] => 2 * y)).reverse.step a b → + emultiplicity (2 : ℤ_[2]) b + 1 = emultiplicity (2 : ℤ_[2]) a := by + have hp : Prime (2 : ℤ_[2]) := by + have := PadicInt.irreducible_p (p := 2) + exact_mod_cast this.prime + intro a b h + have h' : a = 2 * b := h + subst h' + rw [emultiplicity_mul hp, + (FiniteMultiplicity.of_prime_left hp hp.ne_zero).emultiplicity_self, add_comm] -- Reading: the 2-adic order ranks the REVERSED motion; along doubling itself it rises. /-! ### § XXI. Orders on motions, one least-fixed-point shape, UP legs as nuclei -/ @@ -3833,8 +3871,9 @@ example {L : Type*} [ZeroParadox.ZPSemilattice L] (S : ℕ → L) (hS : ZeroPara (fun _ => rfl) (fun a b => ∃ n, a = S n ∧ b = S (n + 1))).reverse) ?_ b hb rintro x y ⟨n, rfl, rfl⟩ exact ZeroParadox.ZPSemilattice.state_sequence_monotone S hS n --- Statement: from `hcc1` and `hcov` alone (`t_snap_given_cover`), ⊥ of `L` has a cover in ZP-A's --- induced order: `BotCovered L`; one way. +-- Statement: from `hcc1` and `hcov` alone, ⊥ of `L` has a cover in ZP-A's induced order: +-- `BotCovered L`; one way. The proof goes through `t_snap_given_cover`, whose premise `S 1 ≠ S 0` +-- it derives from `hcov`. example {L : Type*} [ZeroParadox.ZPSemilattice L] (S : ℕ → L) (hcc1 : S 0 = ZeroParadox.ZPSemilattice.bot) (hcov : letI := ZeroParadox.zpSemilatticeSup L; S 0 ⋖ S 1) : @@ -4172,9 +4211,10 @@ example : -- p. 11 for this functor, for carriers in one universe; -- `isBisim_eq` is Proposition 5.1 and `isBisim_flip` Theorem 5.2 (p. 31), `isBisim_comp` Theorem* 5.4 -- (p. 32); `Bisimilar` with `isBisim_bisimilar` is the clause of Corollary 5.6 (p. 33) that the --- greatest bisimulation exists, and `bisimilar_equivalence` its last clause, that on one system it --- is an equivalence (its complete-lattice clause is not built); `isBisim_ker` is the bisimulation --- half of Proposition* 5.7 (p. 33), `isBisim_preimage` Proposition* 5.9(2) (p. 34). +-- greatest bisimulation exists; its last clause, that on one system the greatest bisimulation is a +-- bisimulation equivalence, is `bisimilar_equivalence` (the equivalence half) with `isBisim_bisimilar` +-- at `N := M` (the bisimulation half); its complete-lattice clause is not built; `isBisim_ker` is +-- the bisimulation half of Proposition* 5.7 (p. 33), `isBisim_preimage` Proposition* 5.9(2) (p. 34). /-! ### § XXVII. The adjoined point: tagged or a limit -/ -- Reading: a second coordinate on § I's adjoined-points switch: one point adjoined to `ℕ` as a @@ -4242,7 +4282,7 @@ example : {t : ZeroParadox.NInf → Bool // ∀ b, t b = true ↔ b = ZeroParado -- Reading: compare the right side with TypeTopology `Taboos.WLPO`: `(u : ℕ∞) → (u = ∞) + (u ≠ ∞)`. #check @ZeroParadox.NInf.isolating_infty_iff -- Statement: a `Bool` test isolates `∞` iff it is `false` at every `NInf.ofNat n` and `true` at `∞` #check @ZeroParadox.NInf.decEq_of_isolating_infty -- Statement: such a test gives `DecidableEq NInf` -#check @ZeroParadox.NInf.isolating_infty_of_decEq -- Statement: and `DecidableEq NInf` gives such a test +#check @ZeroParadox.NInf.isolating_infty_of_decEq -- Statement: and `DecidableEq NInf` gives that such a test exists -- Statement: such a test exists iff `WLPOData` is inhabited; both directions. example : Nonempty {t : ZeroParadox.NInf → Bool // ∀ b, t b = true ↔ b = ZeroParadox.NInf.infty} ↔ Nonempty ZeroParadox.WLPOData := @@ -4332,8 +4372,8 @@ example : Function.Surjective ZeroParadox.NInf.ofOption ↔ ZeroParadox.LPO := #check @ZeroParadox.NInf.rightInverse_ofLPOData -- Statement: it is a right inverse of `ofOption` #check @ZeroParadox.NInf.equivOptionOfLPOData -- Statement: `LPOData` gives `NInf ≃ Option ℕ`, inverse `ofOption` #check @ZeroParadox.NInf.equivOptionClassical -- Statement: CONTROL: `NInf ≃ Option ℕ` from `Classical.dec`, with no LPO hypothesis --- Statement: CONTROL: into `Part ℕ` instead of `Option ℕ`, `toPart` undoes `ofOption` up to --- `Part.ofOption` (`toPart ∘ ofOption = Part.ofOption`) with no hypothesis; a map back +-- Statement: CONTROL: into `Part ℕ` instead of `Option ℕ`, `toPart ∘ ofOption = Part.ofOption` +-- with no hypothesis; a map back -- `g : Part ℕ → NInf` with `g o = NInf.ofNat n ↔ n ∈ o`, which is then a two-sided inverse of -- `toPart` (the second `example` below), gives excluded middle (`NInf.em_of_partToNInf`). example (o : Option ℕ) : @@ -4378,7 +4418,8 @@ example (g : Part ℕ → ZeroParadox.NInf) (hg : ∀ o n, g o = ZeroParadox.NIn -- makes equivalent (`isolating_infty_iff`) to the basic discontinuity (p. 5; `basic-discontinuity` -- in TypeTopology `Taboos.BasicDiscontinuity`), which his WLPO row, with Lemma 3.3 again, turns -- into WLPO; compare de Jong and Escardó, arXiv:2601.12536, § 7.2, Lemma 7.2, p. 25, for a map --- `f : ℕ∞ → ℕ∞` with `f n̲ = 0` and `f ∞ = 1`. Escardó's Theorem 7.1(1) (p. 13) gets WLPO from +-- `f : ℕ∞ → ℕ∞` with `f n̲ = 0̲` and `f ∞ = 1̲`, values that are points of `ℕ∞`. Escardó's +-- Theorem 7.1(1) (p. 13) gets WLPO from -- any discontinuous map `ℕ∞ → 2` assuming countable choice. -- `wlpo_iff_eqOr`, `decEq_of_wlpoData` and `wlpoData_of_decEq`: compare Escardó's TypeTopology -- module `Taboos.WLPO` (retrieved 2026-10-29), `ℕ∞-discrete-gives-WLPO` and From 284f91fa223815dfe45d23de0b2dc1e80aee7e98 Mon Sep 17 00:00:00 2001 From: probe Date: Sat, 31 Oct 2026 22:58:13 -0500 Subject: [PATCH 009/182] Die index errata: fold in round-1 gate ordinaries MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit DieCannotBe § I: loop/climb split adopts the stutter-step name (Sharma, arXiv:1210.0408, Def. 5, p. 4), read at the source; wiring two's loop owes nothing specific to the join, pointer names the right CONTROL; UpAndOver inhabitation pointer for the no-switch refutation. § XX: the exact-one equation states its ⊤ + 1 = ⊤ case at ℤ_[2]'s 0. Diaconescu.v current theorem uses pairs, not classes (both files). Die: t "satisfies" basic-discontinuity, "retrieved" restored. Rewrap of one orphan line. Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01Qj4hZEe22hsY1FqfbKnnU2 --- ZeroParadox/Category/ChoiceCannotBe.lean | 2 +- ZeroParadox/Die.lean | 6 ++--- ZeroParadox/DieCannotBe.lean | 34 +++++++++++++----------- 3 files changed, 22 insertions(+), 20 deletions(-) diff --git a/ZeroParadox/Category/ChoiceCannotBe.lean b/ZeroParadox/Category/ChoiceCannotBe.lean index 27d15c2d..49e00880 100644 --- a/ZeroParadox/Category/ChoiceCannotBe.lean +++ b/ZeroParadox/Category/ChoiceCannotBe.lean @@ -435,7 +435,7 @@ example : ∀ (β : Type) (M : ZeroParadox.Motion β), M.RegisteredDecidable := -- Reading (cited, not claimed): PRIOR ART, Diaconescu's argument as in the Rocq standard library, -- `theories/Logic/Diaconescu.v` Part A, section `PredExt_RelChoice_imp_EM`, which the file marks "kept -- for backwards compatibility" (`pred_ext_and_rel_choice_imp_EM`; the current Part A theorem --- `prop_ext_and_rel_choice_imp_EM` uses other classes), on that section's two classes +-- `prop_ext_and_rel_choice_imp_EM` uses the pairs `(True, P)`, `(P, True)`), on that section's two classes -- `b = true ∨ p`, `b = false ∨ p`, with a selector given as data; an instance of theirs, not a -- generalization (`ZeroParadox/DieCannotBe.lean` § X). #check @ZeroParadox.Motion.em_of_selectedData diff --git a/ZeroParadox/Die.lean b/ZeroParadox/Die.lean index 6b958a5f..abce3489 100644 --- a/ZeroParadox/Die.lean +++ b/ZeroParadox/Die.lean @@ -3845,9 +3845,9 @@ namespace NInf principle of omniscience (WLPO) holds. `Reading:` "isolates": `∞` is isolated (Escardó, arXiv:2609.10447v3, Def. 3.2, p. 14), as data; compare his Examples 3.3(5) with the `Nonempty` iff example, whose forward direction this is at the `Prop` level (`ZeroParadox/DieCannotBe.lean` - § XXVII). By `isolating_infty_iff`, `t` is TypeTopology's `basic-discontinuity`; the reduction is - his WLPO row with Lemma 3.3 (p. 4) of the preprint of JSL 78(3) (2013), formalized for the - `ℕ∞`-indexed `WLPO` as `basic-discontinuity-taboo` (`Taboos.BasicDiscontinuity`, 2026-10-29). -/ + § XXVII). By `isolating_infty_iff`, `t` satisfies TypeTopology's `basic-discontinuity`, whose + taboo (`Taboos.BasicDiscontinuity`, retrieved 2026-10-29) is his WLPO row with Lemma 3.3 (p. 4, + preprint of JSL 78(3) (2013)). -/ theorem wlpo_of_isolating_infty (t : NInf → Bool) (ht : ∀ b, t b = true ↔ b = infty) : ∀ r : ℕ → Bool, (∀ n, r n = false) ∨ ¬ ∀ n, r n = false := fun r => by cases h : t (det r) with diff --git a/ZeroParadox/DieCannotBe.lean b/ZeroParadox/DieCannotBe.lean index b01d9199..49cddf39 100644 --- a/ZeroParadox/DieCannotBe.lean +++ b/ZeroParadox/DieCannotBe.lean @@ -103,16 +103,16 @@ example {α : Type} (f : α → α) : IsIdempotentElem (show Function.End α fro -- (p. 26). Neither is imposed here. No counterpart of the switches was located in these two sources -- as of 2026-10-18 (UP is total in both; their text, searched for "partial", "loop" and "cycle", has -- no hit bearing on a switch); the dated search for the pair is in `LEAN_CUSTOM_REGISTRY.md`. The --- loop/climb split as a named pair, not located closer than Meseguer and R. Diaconescu as of --- 2026-10-31, searched as follows: theoremsearch only (its null is uninformative on its own), three --- phrasings varied by axis, verbatim: "a rewrite step from a normal form followed by normalization +-- loop/climb split has a standard name on transitions: within a corner, labelling each point by its UP +-- value, a loop step is a stutter step (Sharma, arXiv:1210.0408, Def. 5, p. 4: "Transition s → s′ ... +-- is a stutter step if L(s) = L(s′)"), and a climb step is one that is not; UP is partial here, where a +-- Kripke labelling is total. Located 2026-10-31 by theoremsearch only (its null is uninformative on +-- its own), three phrasings varied by axis, verbatim: "a rewrite step from a normal form followed by normalization -- returns to the same normal form or reaches a different one" (rewriting vocabulary); "after one -- rule application and renormalization the normal form never returns to the original normal form" -- (polarity: the wording if the split were refused); "stuttering steps versus visible steps of a --- transition system on equivalence classes of states" (concurrency vocabulary). The third returned --- stutter-step and stuttering-equivalence definitions (a transition whose two ends carry one label), --- the nearest vocabulary located for the loop read on transitions between landings; none was --- retrieved, so none is cited. No web search is recorded for this survey. +-- transition system on equivalence classes of states" (concurrency vocabulary); the third returned +-- Sharma's definition, retrieved and read at the page cited. No web search is recorded. -- Reading: the adjoined-points switch is a CHOICE OF CARRIER: `Option σ` adjoins one point and -- `Option (Option σ)` two (the `TriStep` example below). `Pointed` and `Bipointed` carry -- distinguished points, not adjoined ones, and `Bipointed`'s two may coincide. @@ -221,9 +221,10 @@ example : ∃ M : ZeroParadox.Motion (Fin 4), -- no loop (`not_loop_of_agree`), and the legs of `UpAndOver.toMotion`, whose OVER is every cover of the -- carrier (one chosen wiring, § XIX `cover_overs_differ`), agree (`toMotion_agree`), so that motion climbs -- and never loops (`toMotion_climb`, `toMotion_not_loop`). `phaseBelowCoverMotion` climbs --- (§ XXIII). On the ℕ∞ model both wirings below loop: wiring one (UP the join with `c`, OVER the scale step) if --- `c ≠ ⊤` of `ℕ∞`; wiring two (UP constant ⊤ of `ℕ∞`, OVER the join step) with no use of the join, --- since the always-true step loops there too (the CONTROL after the wirings). In each wiring, in ℕ∞'s +-- (§ XXIII). On the ℕ∞ model both wirings below loop: wiring one (UP the join with `c`, OVER the +-- scale step) if `c ≠ ⊤` of `ℕ∞`; wiring two (UP constant ⊤ of `ℕ∞`, OVER the join step) loops, and +-- the loop owes nothing specific to the join: with UP constant ⊤ the always-true step loops too (the +-- last CONTROL of this group, after the crossing-with-no-switch `example`). In each wiring, in ℕ∞'s -- own order and in ZP-A's induced order alike, one leg raises and the other lowers (the `example` -- after them). -- Reading: by the ruling above both kinds are legal up-and-over shapes, and the crossing of the joint @@ -238,7 +239,7 @@ example : ∃ M : ZeroParadox.Motion (Fin 4), -- the crossing; that the joint might fill both roles stays Tim's read. Not claimed here: that the two -- roles coincide in general. And not every crossing is a switch of order: the die motion of any -- `UpAndOver` fires the corner while its legs agree and oppose in neither the carrier's order nor its --- dual (the `example` after that CONTROL). +-- dual (the `example` after that CONTROL), and `UpAndOver` is inhabited (`ordinalUpAndOver`, § V). -- Reading: Q1: in the second wiring the loop's landing is the pole, ⊤ of `ℕ∞` (⊥ of the ZP order), which -- steps off the landings and is sent back to itself. Q2: run backwards (`reverse`, which keeps UP), a -- loop is a point `b ≠ y` from which OVER and UP both reach the landing `y`, and a climb one from which @@ -1240,7 +1241,7 @@ example (h : ∀ (α : Type) (M : ZeroParadox.Motion α), M.SelectedData) : -- `PredExt_RelChoice_imp_EM`, which the file marks "kept for backwards compatibility" -- (`pred_ext_and_rel_choice_imp_EM`, through `AC_bool_subset_to_bool`, a functional relation choosing -- in every inhabited subset of `bool`); the current Part A theorem, `prop_ext_and_rel_choice_imp_EM`, --- uses the classes `(True, P)` and `(P, True)` instead. The file credits Diaconescu 1975 and Lacas and +-- uses the pairs `(True, P)` and `(P, True)` instead. The file credits Diaconescu 1975 and Lacas and -- Werner 1999. Run on the data side: there relational choice, a `Prop`, gives excluded middle; here a -- selector given as data gives the fragment (the `example` above) and excluded middle directly -- (`Motion.em_of_selectedData`, next line), the latter on that section's own two classes @@ -1766,9 +1767,8 @@ example (h : ∀ (β : Type) [PartialOrder β] [OrderBot β], ZeroParadox.BotCov -- same principle by the set searched, "For X finite this is trivial, and for X = ℕ, this is LPO", -- and exhibits infinite sets on which it holds, the first being ℕ∞ (`NInf.omniscient`, § XXVII). -- LPO and weak excluded middle are not shown comparable here: the model over ℝ shows that LPO does --- not imply weak excluded middle (`ZeroParadox/Category/LawvereTaboo.lean` § V, last Reading), and the --- converse was not --- settled from the sources read. +-- not imply weak excluded middle (`ZeroParadox/Category/LawvereTaboo.lean` § V, last Reading), and +-- the converse was not settled from the sources read. -- Statement: `Prop`, UP double negation `p ↦ ¬¬p` (total, so registration is free, -- `registeredDecidable_of_upTotal`), OVER negation `p → ¬p`: a decidable proposition is a landing. example (p : Prop) [Decidable p] : @@ -3576,7 +3576,9 @@ example : (∀ a b, (ZeroParadox.Motion.ofFun (fun y : ℤ_[2] => 2 * y)).revers (FiniteMultiplicity.of_prime_left hp hp.ne_zero).emultiplicity_self, add_comm] exact ⟨hd, ZeroParadox.Motion.rank_eq_top_of_cycle _ hd (Relation.TransGen.single (show (0 : ℤ_[2]) = 2 * 0 by rw [mul_zero]))⟩ --- Statement: and it drops by exactly one along each such step, by the same rewrite. +-- Statement: and `emultiplicity 2 b + 1 = emultiplicity 2 a` along each such step, by the same +-- rewrite: off ℤ_[2]'s 0 a drop of exactly one; on the self-step at 0, whose order is ⊤ of `ℕ∞`, +-- the equation holds as `⊤ + 1 = ⊤` and nothing drops. example : ∀ a b, (ZeroParadox.Motion.ofFun (fun y : ℤ_[2] => 2 * y)).reverse.step a b → emultiplicity (2 : ℤ_[2]) b + 1 = emultiplicity (2 : ℤ_[2]) a := by have hp : Prime (2 : ℤ_[2]) := by From f99dcbfdcd0f63ba2df2ccaae42fa4f524eda689 Mon Sep 17 00:00:00 2001 From: probe Date: Sat, 31 Oct 2026 23:09:07 -0500 Subject: [PATCH 010/182] ZP-J errata: full Lean paths in four PDFs; wheel and Riemann-sphere fixes E17 (CARRYW4-C6-12, WLPDF-1, PFX-1): ZP-J Self-Reference v2.14, Wheel Addendum v1.9 (companion v1.7) and Keystone Addendum v1.27 now cite Lean files by full repository path. Rendered bare-basename count, pypdf: 0 in all four (was 30, 10, 2, 3). E20: RiemannSphere.lean UPDOWN-R3-1 a-j. The three-carrier 1/0 example is rebuilt over nonZeroDivisors, where 2/0 = 1/0 = wheelInf, with a trivial-submonoid control; wheelBot is placed as the answer to 0/0. New examples: Mathlib's inversion is not continuous at 0 of Q_2 (pointer to NormedField.continuousAt_inv); reachability against the ValuationRing.ValueGroup order (opposite to Mathlib's, same as Stacks 00ID); the reversed sNorm preorder is not antisymmetric. Ceiling/floor proofs use Rat.ceil_intCast_div_natCast and Rat.floor_intCast_div_natCast. WheelFrac.md WHEELFRAC-OUT 1-7: ring case of Carlstrom's semiring generality; common meadows not the only non-involutive kind (1406.2092 p. 2); bibliographic record and edition caveat for the locators; count dropped from the adjacency header; section VIII pointer; porthole and wall-taxonomy pointers; the meadow disclaimer's reason now rests on the reverse-leg example. WheelFrac.lean: wheelFork_not_collapsed docstring scoped, with inhabited-type and empty-type examples. Gates: two rounds; editorial, adversary, prior_art and the three-reader copy_editor panel PASS at round 2 with ordinary findings outstanding. Wheel.lean: [Set97] expanded (PA-W3), stale script line locator replaced by the PDF section (PA-W2). Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01Qj4hZEe22hsY1FqfbKnnU2 --- README.md | 6 +- ZP-J_Keystone_Addendum.pdf | Bin 73365 -> 73373 bytes ZP-J_Self_Reference.pdf | Bin 106022 -> 106221 bytes ZP-J_Wheel_Addendum.pdf | Bin 74615 -> 74712 bytes ZP-J_Wheel_Illustrated_Companion.pdf | Bin 89575 -> 89590 bytes ZeroParadox/Algebra/Wheel.lean | 8 +- ZeroParadox/Algebra/WheelFrac.lean | 21 ++-- ZeroParadox/Algebra/WheelFrac.md | 64 ++++++----- ZeroParadox/Valuation/RiemannSphere.lean | 130 ++++++++++++++++------- register.md | 6 +- scripts/build_zpj.py | 56 +++++----- scripts/build_zpj_keystone_addendum.py | 10 +- scripts/build_zpj_wheel_addendum.py | 27 ++--- scripts/build_zpj_wheel_companion.py | 10 +- 14 files changed, 208 insertions(+), 130 deletions(-) diff --git a/README.md b/README.md index 713aaff1..87b080c6 100644 --- a/README.md +++ b/README.md @@ -90,10 +90,10 @@ An independent re-check is three commands: `git clone https://github.com/timbrig | [Categorical Bridge](ZP-H_Categorical_Bridge.pdf) | ZP-H | v1.27 | The categorical bridge: the snap holding under all four domain functors. | | [Native Categories Addendum](ZP-H_Native_Categories_Addendum.pdf) | ZP-H Native Categories Addendum | v1.7 | The snap floor realized inside each framework's native Mathlib category (TopCat, ModuleCat ℂ, KleisliCat PMF). Reads after ZP-H. | | [Inside Zero](ZP-I_Inside_Zero.pdf) | ZP-I | v1.28 | Inside zero: each nowhere-zero 2-adic sequence whose valuation equals a depth index in ℕ that climbs at every step converges to 0 in the 2-adics; reading that limit as an occupant of the ⊥ role, and then as a successor ⊥′, are two further commitments. | -| [Self-Reference](ZP-J_Self_Reference.pdf) | ZP-J | v2.13 | Self-reference: ⊥ as the Quine atom, and the AFA structure it requires. | +| [Self-Reference](ZP-J_Self_Reference.pdf) | ZP-J | v2.14 | Self-reference: ⊥ as the Quine atom, and the AFA structure it requires. | | [AFA Addendum](ZP-J_AFA_Addendum.pdf) | ZP-J AFA Addendum | v1.19 | Decoration uniqueness for finite graphs from the valuation structure alone. Reads after ZP-J. | -| [Wheel Addendum](ZP-J_Wheel_Addendum.pdf) | ZP-J Wheel Addendum | v1.8 | The wheel of fractions as a wheel: division by zero made total. Reads after ZP-J. | -| [Keystone Addendum](ZP-J_Keystone_Addendum.pdf) | ZP-J Keystone Addendum | v1.26 | The diagonal-fixed-point keystone: the Lawvere face-split (Set face machine-checked, computability face cited) and the snap as a well-foundedness boundary crossing. Reads after ZP-J. | +| [Wheel Addendum](ZP-J_Wheel_Addendum.pdf) | ZP-J Wheel Addendum | v1.9 | The wheel of fractions as a wheel: division by zero made total. Reads after ZP-J. | +| [Keystone Addendum](ZP-J_Keystone_Addendum.pdf) | ZP-J Keystone Addendum | v1.27 | The diagonal-fixed-point keystone: the Lawvere face-split (Set face machine-checked, computability face cited) and the snap as a well-foundedness boundary crossing. Reads after ZP-J. | | [Computational Grounding](ZP-K_Computational_Grounding.pdf) | ZP-K | v1.27 | Computational grounding: the bottom's structural self-containment, with the computational reading carried as a commitment. | | [Incomputability Convergence](ZP-L_Incomputability_Convergence.pdf) | ZP-L | v1.30 | ε₀ as the exact ordinal threshold the snap is keyed to. (That the snap occurs follows from the occurrence commitment together with DA-1, closed given DP-2.) | | [Kleene-Ordinal Bridge](ZP-M_Kleene_Ordinal_Bridge.pdf) | ZP-M | v1.13 | The bridge between the Kleene quine and the ε₀ fixed point. | diff --git a/ZP-J_Keystone_Addendum.pdf b/ZP-J_Keystone_Addendum.pdf index 52ac71063224d0d22719caf7fc531af4929ac15d..1d1ffff1b6ccf394c05e161794993469bdd08a36 100644 GIT binary patch delta 5444 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 delta 38202 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 Gmwx~{K(E{Y diff --git a/ZP-J_Wheel_Addendum.pdf b/ZP-J_Wheel_Addendum.pdf index 8fab15ff08d31111973be273dfcf66ea221a191c..8b79cc701e7d82e002b45892a60b587f138bfc18 100644 GIT binary patch delta 14346 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 C#BaC& delta 14244 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 R;lKZh_z{RwiI=B;`oH}pVY2`L diff --git a/ZP-J_Wheel_Illustrated_Companion.pdf b/ZP-J_Wheel_Illustrated_Companion.pdf index fa908ed4824cfb042f5ab368bc7f99696ca645dd..6098e031ab35f299a22310a3a1e9f4eff8e1afe7 100644 GIT binary patch delta 2592 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 rfl, a, a, rfl⟩ + +-- Statement: control, no empty type carries one. +example {α : Type*} [IsEmpty α] : IsEmpty (InvolutiveFork α) := + ⟨fun F => IsEmpty.false F.pole₀⟩ + /-- **The obstruction, Lean-witnessed.** An involutive fork whose pole is a FIXED point of the involution — the ordered-fork condition — is necessarily COLLAPSED. Hence the involutive and ordered forks coincide only at the diagonal point: they are different species. This is the diff --git a/ZeroParadox/Algebra/WheelFrac.md b/ZeroParadox/Algebra/WheelFrac.md index fa34a974..9122af51 100644 --- a/ZeroParadox/Algebra/WheelFrac.md +++ b/ZeroParadox/Algebra/WheelFrac.md @@ -6,8 +6,10 @@ declarations, the Engineer's Take and the per-declaration glosses. ## The construction The wheel of fractions of a commutative ring `A` with respect to a multiplicative submonoid `S`, built -to prove it is a `Wheel` (`ZeroParadox/Algebra/Wheel.lean`). This turns that file's §VIII conjecture -into a theorem. +to prove it is a `Wheel` (`ZeroParadox/Algebra/Wheel.lean`). `instWheel` proves the part of that +file's conjecture that starts from ring structure: for every commutative ring and submonoid, the wheel +axioms hold. Ring structure is an input, not derived; `ZeroParadox/Algebra/Wheel.lean` § VIII, a +documentation anchor with no theorem object, records what stays open. Carlström, source-verified: `⊙_S A = (A × A) / ≡_S`, where @@ -15,7 +17,8 @@ Carlström, source-verified: `⊙_S A = (A × A) / ≡_S`, where with `0 = [0,1]`, `1 = [1,1]`, `[x,y] + [x',y'] = [x·y' + x'·y, y·y']`, `[x,y]·[x',y'] = [x·x', y·y']`, and `/[x,y] = [y,x]`. Then `/0 = [1,0] = ∞`, `0·/0 = [0,0] = ⊥`, with `∞ ≠ ⊥` (the wheel, not the -meadow) — matching the ZP porthole. +meadow) — matching the ZP porthole (the shorthand defined in +`ZeroParadox/Algebra/Wheel.lean`'s Formal Overview). **Status: complete.** Fully `sorry`-free: `≡_S` is an equivalence, the five operations are well-defined on the quotient, every axiom of the ZP `Wheel` typeclass holds (a faithful encoding of Carlström's @@ -25,7 +28,8 @@ on the quotient, every axiom of the ZP `Wheel` typeclass holds (a faithful encod ## The involutive fork, and why it does NOT unify with the ordered μ/ν fork `fixed_pole_forces_collapse` is the witness for the involutive-fork-with-a-fixed-pole row of the wall -taxonomy: **if the involution fixes the pole, the two poles coincide.** +taxonomy (`ZeroParadox/Settheory/Wall.md`, the failure-mode table): **if the involution fixes the pole, +the two poles coincide.** The two forks are **different species**: @@ -48,6 +52,11 @@ CATEGORY, dualizing μ↔ν, while inversion acts on the ELEMENT set, swapping 0 ## Prior art — Carlström § 4 proves MORE +Locators below are to J. Carlström, *Wheels — On Division by Zero*, Research Reports in Mathematics +No. 11, Department of Mathematics, Stockholm University, 2001 (cited here as Carlström 2001:11). The +later journal version, *Mathematical Structures in Computer Science* 14(1):143–184, 2004, paginates +differently, and these locators do not apply to it. + The specific result is **Prop. 4.4** (Carlström 2001:11, PDF p. 27, printed p. 25): *"If any two of the elements 0, 1, /0 and 0/0 are equal in a wheel H, then H is trivial."* @@ -70,8 +79,9 @@ corpus uses. The substance — `0 ∈ S` trivializes, so exclude it — is his. ⚠ **The construction's lineage runs through Setzer.** Carlström credits him for the name and the construction at printed p. 3 and presents his own paper as a generalisation from integral domains to any -commutative semiring — so "Carlström's" here means that general form, which is the one this file -formalizes. The quotations and the full credit chain are in `ZeroParadox/Algebra/Wheel.lean` +commutative semiring — so "Carlström's" here means that general form. This file formalizes the +commutative-ring case (`[CommRing A]` in `ZeroParadox/Algebra/WheelFrac.lean`), a special case of his semiring +generality. The quotations and the full credit chain are in `ZeroParadox/Algebra/Wheel.lean` § "Lineage" (the `Wheel` class docstring). ## Standard names for what is written by hand @@ -101,9 +111,9 @@ originals before citing them directly. Searched 2026-08-02: no prior art located Until this date `InvolutiveFork` had a witness for exactly one of its two states. `wheelFork_not_collapsed` inhabits the OPEN side; nothing inhabited the COLLAPSED one, so `fixed_pole_forces_collapse` had **no -witness for its own hypothesis** and could have been true vacuously for all the corpus showed. `R-TWOPOLE` -is the rule that asks for both; the gap survived because the open side's docstring defends non-vacuity -convincingly and one pole reads as enough. +witness for its own hypothesis** and could have been true vacuously for all the corpus showed. The +project's rule is to build a witness on both sides; the gap survived because the open side's docstring +defends non-vacuity convincingly and one pole reads as enough. Mathlib supplies the missing one and no construction is needed. `inv_zero` — the junk-value convention `(0 : G)⁻¹ = 0` on any `GroupWithZero` — **is** the fixed-pole condition, and `inv_inv` is the involution @@ -111,8 +121,8 @@ law. So the example takes `dual := Inv.inv`, `pole₀ := 0`, and discharges `Col ⚠ **`dual` and `pole₀` are pinned in the statement**, mirroring `Wheel.lean`'s `gauge_strong`. The bare `∃ F, F.Collapsed` is satisfied on any inhabited type by the identity involution at a single point, so it -would witness nothing — the genericity trap `R-TOLEAN` names. Pinning is what makes the existential say -something about *inversion* rather than about *forks*. +would witness nothing. Pinning is what makes the existential say something about *inversion* rather +than about *forks*. **The reading.** This is what totalising division looks like when you adjoin nothing: the reciprocal of zero lands on the zero already there, so the fork's two ends are the same point and there is no distinct @@ -126,18 +136,21 @@ distributivity. `ZeroParadox/Algebra/Wheel.lean` § V carries both directions of deals — the forward leg (identifying `∞` with `⊥` forces triviality) and the reverse (the meadow equation `/0 = 0` forces triviality), each with controls showing the hypotheses are load-bearing on `ZPWheelElem`. -⚠ **Not a claim that a meadow is a collapsed wheel.** It is not: a meadow stays a commutative ring, and -`ZPWheelElem` is not one. The shared object is the `InvolutiveFork` abstraction, which both instantiate -with opposite verdicts. Bergstra and Ponse (1406.6878, § 4 "Concluding Remarks", printed p. 14) write -that *"we have not yet found a structural connection"* between wheels and **common** meadows — their -own first-person hedge, not a settled negative. Common meadows are the NON-involutive ones, where `0⁻¹` -is a separate error element, so they are a different pair from the involutive meadow (`0⁻¹ = 0`, -BHT 0901.0823) this paragraph is built on — involutivity being exactly what separates them. Nothing -here supplies a connection on either pair. - -## Unstated adjacency — five involution declarations under four names, none wired up as of 2026-09-25 +⚠ **Not a claim that a meadow is a collapsed wheel.** A wheel with `/0 = 0` is trivial (the reverse-leg +`example` in `ZeroParadox/Algebra/Wheel.lean` § V, Carlström's Prop. 4.4), so a meadow with more than +one element is never one; the one-element carrier is both, and that § V states the overlap. The shared +object is +the `InvolutiveFork` abstraction, which both instantiate with opposite verdicts. Bergstra and Ponse +(1406.6878, § 4 "Concluding Remarks", printed p. 14) write that *"we have not yet found a structural connection"* between wheels and **common** meadows — their +own first-person hedge, not a settled negative. Common meadows are non-involutive, with `0⁻¹` a +separate error element, so they are a different pair from the involutive meadow (`0⁻¹ = 0`, +BHT 0901.0823) this paragraph is built on. Common meadows are not the only non-involutive kind: +Bergstra & Middelburg (arXiv:1406.2092, p. 2) study "one-based non-involutive meadows", where the +inverse of zero is one, an element already present, so involutivity alone does not single out common +meadows. Nothing here supplies a connection on either pair. + +## Unstated adjacency — involution declarations not wired up as of 2026-09-25 -**The unit is the DECLARATION, not the identifier: five declarations, four distinct names.** `rInv_involutive` + `rInv_swaps` (`ZeroParadox/Valuation/RiemannSphere.lean`) is the Riemann fork the `InvolutiveFork` docstring calls "the motivating instance"; also `flipPoles_involutive` (`ZeroParadox/Computability/Occurrence.lean` — stated pointwise rather than as `Function.Involutive`), @@ -145,7 +158,10 @@ here supplies a connection on either pair. at two sites (`ZeroParadox/Valuation/PoleCorners.lean`, `ZeroParadox/Miniature.lean`). Searched 2026-09-25 over `ZeroParadox/**/*.lean` and the tracked `.md`: the only `InvolutiveFork` instances located are `wheelFork` and the `GroupWithZero` example, both in `ZeroParadox/Algebra/WheelFrac.lean`, -so none of the five is wired up. **Not a closed list of the corpus's involutions** — the same sweep for +so none of these is wired up. **Not a closed list of the corpus's involutions** — the same sweep for `Function.Involutive` also returns `σ_involutive` (`ZeroParadox/Computability/MarkovNuUniversal.lean`), an involution but not a pole exchange. Wiring any -of them is a pointer exercise, not new declarations. +of them is a pointer exercise, not new declarations. Since that search, +`ZeroParadox/Algebra/WheelFrac.lean` has also gained the identity-fork `example` after +`wheelFork_not_collapsed`: a generic witness on any inhabited type, and not one of the declarations +listed here. diff --git a/ZeroParadox/Valuation/RiemannSphere.lean b/ZeroParadox/Valuation/RiemannSphere.lean index 728d1dc9..4dd13adc 100644 --- a/ZeroParadox/Valuation/RiemannSphere.lean +++ b/ZeroParadox/Valuation/RiemannSphere.lean @@ -26,8 +26,8 @@ This file builds the **topological Riemann sphere over ℚ₂** — the one-poin result `rInvHomeo` is that this map is a **homeomorphism** of the sphere, and `rInv_swaps` is that it **swaps the floor `0` with the point at infinity `∞`** (the 0=∞ antipodality, made literal). -Mathlib's field inversion uses `0⁻¹ = 0` and is *discontinuous at 0* (beside `Sphere` and a wheel: the -`example` after `rInv_swaps`); adjoining `∞` and sending `0 ↦ ∞` *repairs* that discontinuity. +Mathlib's field inversion uses `0⁻¹ = 0` and is *discontinuous at 0* (`example`s after `rInv_swaps`, +beside `Sphere` and a wheel); adjoining `∞` and sending `0 ↦ ∞` *repairs* that discontinuity. The real work is the two continuity proofs at the special points (as `x → 0`, `x⁻¹ → ∞`; symmetrically at `∞`), which go through `OnePoint`'s neighborhood-of-∞ API (`nhds_infty_eq`, the cocompact filter) and the fact that `ℚ_[2]` is a `ProperSpace` (closed balls compact, so leaving every compact ⟺ norm → ∞). @@ -153,18 +153,41 @@ theorem rInv_swaps : rInvHomeo (OnePoint.some (0 : ℚ_[2])) = ∞ ∧ rInvHomeo ∞ = OnePoint.some (0 : ℚ_[2]) := ⟨rInv_zero, rInv_infty⟩ --- Statement: `(0 : ℚ_[2])⁻¹ = 0` (Mathlib's junk value), `rInv` sends `0` of `ℚ_[2]` to `∞` of `Sphere` --- (`rInv_zero`), and in the wheel of fractions over `ℚ_[2]` at the trivial submonoid `wheelInf` differs --- from both `Wheel.wzero` (`wheelFrac_fork_open`) and `wheelBot` (`inf_ne_bot`). +-- Statement: Mathlib's field inversion on `ℚ_[2]` is not continuous at `0` +-- (`NormedField.continuousAt_inv` at `x = 0`). +example : ¬ ContinuousAt (Inv.inv : ℚ_[2] → ℚ_[2]) 0 := + fun h => NormedField.continuousAt_inv.mp h rfl + +-- Statement: `(0 : ℚ_[2])⁻¹ = 0` (Mathlib's junk value); `rInv` sends `0` of `ℚ_[2]` to `∞` of `Sphere` +-- (`rInv_zero`); and in the wheel of fractions over `ℚ_[2]` at its nonzero elements +-- (`nonZeroDivisors ℚ_[2]`), the wheel's `1/0`, that is `1·/0`, is `wheelInf`, `2/0` is the same class, +-- and `wheelInf` differs from `Wheel.wzero` (`wheelFrac_fork_open`) and from `wheelBot` +-- (`inf_ne_bot`). -- Reading: CARRIER — "what is 1/0" has three answers in three carriers: `0` in the field `ℚ_[2]`, `∞` --- of `Sphere`, and in `WheelFrac` a `wheelInf` plus a distinct `wheelBot` (0·/0) that `Sphere` lacks. +-- of `Sphere`, and `wheelInf` in `WheelFrac`. `wheelBot` (`0·/0`) answers `0/0`, not `1/0`; the wheel +-- has it and `Sphere` has no such element. example : (0 : ℚ_[2])⁻¹ = 0 ∧ rInv (OnePoint.some (0 : ℚ_[2])) = ∞ ∧ - (wheelInf : WheelFrac (⊥ : Submonoid ℚ_[2])) ≠ Wheel.wzero ∧ - (wheelInf : WheelFrac (⊥ : Submonoid ℚ_[2])) ≠ wheelBot := by - have h0 : (0 : ℚ_[2]) ∉ (⊥ : Submonoid ℚ_[2]) := by - rw [Submonoid.mem_bot]; exact zero_ne_one - exact ⟨inv_zero, rInv_zero, (wheelFrac_fork_open _ h0).symm, inf_ne_bot _ h0⟩ + Wheel.wmul Wheel.wone (Wheel.winv Wheel.wzero) = (wheelInf : WheelFrac (nonZeroDivisors ℚ_[2])) ∧ + mk (nonZeroDivisors ℚ_[2]) (2, 0) = wheelInf ∧ + (wheelInf : WheelFrac (nonZeroDivisors ℚ_[2])) ≠ Wheel.wzero ∧ + (wheelInf : WheelFrac (nonZeroDivisors ℚ_[2])) ≠ wheelBot := by + refine ⟨inv_zero, rInv_zero, by rw [Wheel.wmul_comm, Wheel.wmul_one]; rfl, ?_, + (wheelFrac_fork_open _ zero_notMem_nonZeroDivisors).symm, + inf_ne_bot _ zero_notMem_nonZeroDivisors⟩ + refine Quotient.sound ⟨1, one_mem _, 2, mem_nonZeroDivisors_of_ne_zero (by norm_num), ?_, ?_⟩ + · show (1 : ℚ_[2]) * 2 = 2 * 1; ring + · show (1 : ℚ_[2]) * 0 = 2 * 0; ring + +-- Statement: control, at the trivial submonoid `⊥` of `ℚ_[2]`, `2/0` and `1/0` (`wheelInf`) stay +-- distinct classes. +example : mk (⊥ : Submonoid ℚ_[2]) (2, 0) ≠ wheelInf := by + intro h + obtain ⟨s, hs, s', hs', e1, _⟩ := Quotient.exact h + rw [Submonoid.mem_bot] at hs hs' + subst hs; subst hs' + have : (1 : ℚ_[2]) * 2 = 1 * 1 := e1 + norm_num at this /-! ### § V. The maps that FIX the pole-pair, and why that makes it an AXIS @@ -172,7 +195,7 @@ example : pole-pair additively in `n`, which is what makes it an *axis* rather than a bare pair. ⭐ **PRIOR ART — these declarations INSTANTIATE `OnePoint.instGLAction`, they do not extend it.** The -two `example`s closing this section are the identification, elaborated rather than asserted. What is +three `example`s closing this section are the identification, elaborated rather than asserted. What is ours is the TOPOLOGY, not the algebra. Prior art, the loxodromic vocabulary and the stabiliser fence are in `ZeroParadox/Valuation/RiemannSphere.md`, beside this file. -/ @@ -372,9 +395,9 @@ valuation shells (`unitDouble_mutual_iff`), ordered one way by valuation (`unitD every move fixes `0` of `ℚ_[2]`, its own one-point class (`unitDouble_zero_own_class`). Doubling raises valuation and halves the norm: down toward `0` of `ℚ_[2]` in the `sNorm` preorder (§ VII). -Standard frame, on nonzero points only: the value group of the valuation ring `ℤ_[2]` (Mathlib -`ValuationRing.ValueGroup`; Stacks 00ID); at `0` of `ℚ_[2]` the orders part. `example`s after -`unitDouble_zero_own_class`. -/ +Standard frame, on nonzero points only: the value group `ℚ_[2]ˣ / ℤ_[2]ˣ`. Reaching `y` from `x` is +`[y] ≤ [x]` in Mathlib's `ValuationRing.ValueGroup` (OPPOSITE) and `[y] ≥ [x]` in Stacks 00ID (`y / x` +from `ℤ_[2]`, SAME). At `0` of `ℚ_[2]` the orders part. `example`s after `unitDouble_zero_own_class`. -/ /-- `Statement:` one move multiplies by a unit (norm `1`) or by `2`. -/ def unitDoubleStep (x y : ℚ_[2]) : Prop := (∃ u : ℚ_[2], ‖u‖ = 1 ∧ y = u * x) ∨ y = 2 * x @@ -443,13 +466,34 @@ theorem unitDouble_zero_own_class (x : ℚ_[2]) : subst ih rcases hm with ⟨u, _, rfl⟩ | rfl <;> simp --- Statement: on nonzero points `x` reaches `y` iff `‖y / x‖ ≤ 1`, i.e. `y ∈ x · ℤ_[2]`: the order of --- `ValuationRing.ValueGroup`, whose unit orbits are the cells of `unitDouble_mutual_iff`. +-- Statement: on nonzero points `x` reaches `y` iff `‖y / x‖ ≤ 1`, i.e. `y ∈ x · ℤ_[2]`. example {x y : ℚ_[2]} (hx : x ≠ 0) (hy : y ≠ 0) : Relation.ReflTransGen unitDoubleStep x y ↔ ‖y / x‖ ≤ 1 := by rw [unitDouble_reach_iff hx hy, Padic.norm_le_one_iff_val_nonneg, div_eq_mul_inv, Padic.valuation_mul hy (inv_ne_zero hx), Padic.valuation_inv]; omega +-- Statement: on nonzero points `x` reaches `y` iff `[y] ≤ [x]` in Mathlib's +-- `ValuationRing.ValueGroup ℤ_[2] ℚ_[2]`: Mathlib's order runs opposite to reachability. Its unit +-- orbits are the cells of `unitDouble_mutual_iff`. +example {x y : ℚ_[2]} (hx : x ≠ 0) (hy : y ≠ 0) : + Relation.ReflTransGen unitDoubleStep x y ↔ + @LE.le (ValuationRing.ValueGroup ℤ_[2] ℚ_[2]) _ (Quotient.mk'' y) (Quotient.mk'' x) := by + show _ ↔ ∃ c : ℤ_[2], c • x = y + rw [unitDouble_reach_iff hx hy] + constructor + · intro h + have hn : ‖y / x‖ ≤ 1 := by + rw [Padic.norm_le_one_iff_val_nonneg, div_eq_mul_inv, + Padic.valuation_mul hy (inv_ne_zero hx), Padic.valuation_inv]; omega + exact ⟨⟨y / x, hn⟩, by rw [Algebra.smul_def]; simp [div_mul_cancel₀ y hx]⟩ + · rintro ⟨c, rfl⟩ + rw [Algebra.smul_def] at hy ⊢ + have hc : (algebraMap ℤ_[2] ℚ_[2] c) ≠ 0 := left_ne_zero_of_mul hy + have hc1 : ‖algebraMap ℤ_[2] ℚ_[2] c‖ ≤ 1 := c.2 + rw [Padic.valuation_mul hc hx] + have := (Padic.norm_le_one_iff_val_nonneg _).1 hc1 + omega + -- Statement: control, at `0` of `ℚ_[2]` the orders part: `1` divides `0` in `ℤ_[2]` and `0 / 1` is a -- 2-adic integer, yet `1` does not reach `0`: divisibility puts `0` on top, reachability in its own -- class (`unitDouble_zero_own_class`). @@ -457,7 +501,9 @@ example : (1 : ℤ_[2]) ∣ 0 ∧ ‖(0 : ℚ_[2]) / 1‖ ≤ 1 ∧ ¬ Relation.ReflTransGen unitDoubleStep 1 0 := ⟨dvd_zero 1, by simp, (unitDouble_zero_own_class 1).1 one_ne_zero⟩ --- Statement: control, `x = 0`: `‖1 / 0‖ ≤ 1` (`1 / 0 = 0`, after `rInv_swaps`) yet `0 ∤ 1`, no reach. +-- Statement: control, `x = 0`: `‖1 / 0‖ ≤ 1` yet `0 ∤ 1` in `ℤ_[2]`, and `0` does not reach `1`. The +-- first conjunct holds only by Mathlib's junk value `1 / 0 = 0` in `ℚ_[2]` (`div_zero`); `rInv` on +-- `Sphere` sends `0` to `∞` instead (`rInv_zero`). example : ‖(1 : ℚ_[2]) / 0‖ ≤ 1 ∧ ¬ (0 : ℤ_[2]) ∣ 1 ∧ ¬ Relation.ReflTransGen unitDoubleStep 0 1 := ⟨by simp, by rw [zero_dvd_iff]; exact one_ne_zero, @@ -578,15 +624,8 @@ example (z : Sphere) : upV z = z ↔ example {x : ℚ_[2]} (hx : x ≠ 0) : ((2 : ℚ_[2]) ^ (x.valuation % 2) * x).valuation = 2 * ⌈(x.valuation : ℚ) / 2⌉ := by rw [rScale_valuation _ hx] - have : ⌈(x.valuation : ℚ) / 2⌉ = (x.valuation + 1) / 2 := by - rw [Int.ceil_eq_iff] - constructor - · rw [lt_div_iff₀ (by norm_num)] - have : (((x.valuation + 1) / 2 : ℤ) - 1) * 2 < x.valuation := by omega - exact_mod_cast this - · rw [div_le_iff₀ (by norm_num)] - have : x.valuation ≤ ((x.valuation + 1) / 2 : ℤ) * 2 := by omega - exact_mod_cast this + have := Rat.ceil_intCast_div_natCast x.valuation 2 + push_cast at this rw [this]; omega -- Statement: on nonzero `x`, DOWN sends the valuation `v` to `2 * ⌊v / 2⌋`, the floor onto the even @@ -594,15 +633,8 @@ example {x : ℚ_[2]} (hx : x ≠ 0) : example {x : ℚ_[2]} (hx : x ≠ 0) : ((2 : ℚ_[2]) ^ (-(x.valuation % 2)) * x).valuation = 2 * ⌊(x.valuation : ℚ) / 2⌋ := by rw [rScale_valuation _ hx] - have : ⌊(x.valuation : ℚ) / 2⌋ = x.valuation / 2 := by - rw [Int.floor_eq_iff] - constructor - · rw [le_div_iff₀ (by norm_num)] - have : ((x.valuation / 2 : ℤ)) * 2 ≤ x.valuation := by omega - exact_mod_cast this - · rw [div_lt_iff₀ (by norm_num)] - have : x.valuation < ((x.valuation / 2 : ℤ) + 1) * 2 := by omega - exact_mod_cast this + have := Rat.floor_intCast_div_natCast x.valuation 2 + push_cast at this rw [this]; omega -- Statement: for every integer `v`, `2 * ⌈-v / 2⌉ = -(2 * ⌊v / 2⌋)`: rounding up after negating is @@ -686,12 +718,15 @@ theorem sNorm_coe_le_iff {x y : ℚ_[2]} (hx : x ≠ 0) (hy : y ≠ 0) : /-- `Statement:` UP as a Mathlib `ClosureOperator` (monotone, extensive, idempotent) on the reverse of § VII's `sNorm` preorder, where `0` of `ℚ_[2]` is top and `∞` of `Sphere` bottom. On - valuations it is the closure of the ceiling Galois connection (`Int.gc_ceil_coe`) onto the even - integers; compare the ceiling `ClosureOperator ℝ` in `ZeroParadox/Order/UpAndOver.lean`. `Sphere` - is no `UpAndOver` member: that structure takes `[PartialOrder α]` and this is a preorder. + valuations it is `v ↦ 2 * ⌈v / 2⌉` (`example` after `downV`): the closure of the ceiling Galois + connection (`Int.gc_ceil_coe`), which lands on `ℤ`, rescaled by `2` onto the even integers; + compare the ceiling `ClosureOperator ℝ` in `ZeroParadox/Order/UpAndOver.lean`. That `UpAndOver` + structure takes `[PartialOrder α]`, and this preorder is not antisymmetric (`1` and `-1` of + `ℚ_[2]`, the first `example` after this definition), so `upClosure` is not an `UpAndOver` instance as it + stands. `Reading:` **INVERSION** — `rInv` is an order isomorphism to the order dual, and `conjBy` along it carries `upClosure` to `downV`, the corpus's kernel form (`keepAboveKernel`, `pruneKernel`): - the `example` after this definition. -/ + the second `example` after this definition. -/ noncomputable def upClosure : @ClosureOperator Sphere (Preorder.lift (fun s => OrderDual.toDual (sNorm s))) := letI : Preorder Sphere := Preorder.lift (fun s => OrderDual.toDual (sNorm s)) @@ -735,6 +770,21 @@ noncomputable def upClosure : show upV (upV a) = upV a rw [← downV_upV a, upV_downV] } +-- Statement: the reverse `sNorm` preorder is not antisymmetric: `1` and `-1` of `ℚ_[2]` lie below each +-- other and are distinct points of `Sphere`. +example : + letI : Preorder Sphere := Preorder.lift (fun s => OrderDual.toDual (sNorm s)) + (OnePoint.some (1 : ℚ_[2]) : Sphere) ≤ OnePoint.some (-1) ∧ + (OnePoint.some (-1 : ℚ_[2]) : Sphere) ≤ OnePoint.some 1 ∧ + (OnePoint.some (1 : ℚ_[2]) : Sphere) ≠ OnePoint.some (-1) := by + letI : Preorder Sphere := Preorder.lift (fun s => OrderDual.toDual (sNorm s)) + refine ⟨?_, ?_, fun h => ?_⟩ + · show sNorm (OnePoint.some (-1)) ≤ sNorm (OnePoint.some 1); simp [sNorm] + · show sNorm (OnePoint.some 1) ≤ sNorm (OnePoint.some (-1)); simp [sNorm] + · have h1 : (1 : ℚ_[2]) = -1 := OnePoint.coe_injective h + have h2 : (2 : ℚ_[2]) = 0 := by linear_combination h1 + exact two_ne_zero h2 + -- Statement: on the reverse `sNorm` preorder, `rInv` is an order isomorphism `Sphere ≃o Sphereᵒᵈ`, and -- `upClosure.conjBy` along it is `downV` at every point of `Sphere`. example (z : Sphere) : diff --git a/register.md b/register.md index 6abed848..f660a855 100644 --- a/register.md +++ b/register.md @@ -14,10 +14,10 @@ Update this file first on any version bump. README.md Framework table is verifie | ZP-H Categorical Bridge | v1.27 | ZP-H_Categorical_Bridge.pdf | v1.21 | N/— | formal:ac557a4e comp:b85ebaf7 | | ZP-H Native Categories Addendum | v1.7 | ZP-H_Native_Categories_Addendum.pdf | N/A | N/— | formal:6055c8d4 | | ZP-I Inside Zero | v1.28 | ZP-I_Inside_Zero.pdf | v1.34 | N/— | formal:37707b03 comp:8e589905 | -| ZP-J Self-Reference | v2.13 | ZP-J_Self_Reference.pdf | v1.34 | N/— | formal:265f043a comp:795e47b1 | +| ZP-J Self-Reference | v2.14 | ZP-J_Self_Reference.pdf | v1.34 | N/— | formal:45c84687 comp:795e47b1 | | ZP-J AFA Addendum | v1.19 | ZP-J_AFA_Addendum.pdf | N/A | N/— | formal:2919b9d3 | -| ZP-J Wheel Addendum | v1.8 | ZP-J_Wheel_Addendum.pdf | v1.6 | N/— | formal:1711b209 comp:feb49592 | -| ZP-J Keystone Addendum | v1.26 | ZP-J_Keystone_Addendum.pdf | N/A | N/— | formal:4f3bf1da | +| ZP-J Wheel Addendum | v1.9 | ZP-J_Wheel_Addendum.pdf | v1.7 | N/— | formal:56bdf47c comp:7d7af230 | +| ZP-J Keystone Addendum | v1.27 | ZP-J_Keystone_Addendum.pdf | N/A | N/— | formal:4d81f4c4 | | ZP-K Computational Grounding | v1.27 | ZP-K_Computational_Grounding.pdf | v1.25 | N/— | formal:c4f1633e comp:7ecb1d32 | | ZP-L Incomputability Convergence | v1.30 | ZP-L_Incomputability_Convergence.pdf | v1.18 | N/— | formal:e9597380 comp:c273dc84 | | ZP-M Kleene-Ordinal Bridge | v1.13 | ZP-M_Kleene_Ordinal_Bridge.pdf | v1.8 | N/— | formal:e7f71e6d comp:139f50be | diff --git a/scripts/build_zpj.py b/scripts/build_zpj.py index 5d4da3da..37577251 100644 --- a/scripts/build_zpj.py +++ b/scripts/build_zpj.py @@ -1,12 +1,12 @@ """ Zero Paradox — ZP-J: Executability of Self-Reference PDF Builder -Version 2.13 | October 2026 +Version 2.14 | October 2026 """ import os from zp_utils import * -VERSION = '2.13' +VERSION = '2.14' FIRST_RELEASED = 'April 2026' @@ -167,7 +167,7 @@ def build(): 'by at most one element (quine_unique). The third structural field — bot_self_mem — ' 'is where the bridge is built.')) E.append(body( - 'The AFAStructure typeclass in SetTheoryAFA.lean captures exactly this. Its three fields are ' + 'The AFAStructure typeclass in ZeroParadox/Settheory/SetTheoryAFA.lean captures exactly this. Its three fields are ' 'sufficient to derive T-EXEC with no additional axioms. The full AFA machinery ' '(APGs, bisimulation, decoration) motivates the fields; the formal derivation requires ' 'only the fields themselves, and every ZPSemilattice supplies them (Section III.II).')) @@ -185,7 +185,7 @@ def build(): 'encode standard AFA properties. The third is the bridge.')) E.append(def_box( - 'AFAStructure Typeclass (SetTheoryAFA.lean § I)', + 'AFAStructure Typeclass (ZeroParadox/Settheory/SetTheoryAFA.lean § I)', [ 'class AFAStructure (L : Type*) [ZPSemilattice L] with:', '(1) selfMem : L → Prop ' @@ -251,7 +251,7 @@ def build(): E.append(Paragraph('III. Why a Typeclass Field Rather than a Freestanding Axiom', S['h2'])) E.append(body( - 'In the stub version of SetTheoryAFA.lean, the bridge was a freestanding axiom: ' + 'In the stub version of ZeroParadox/Settheory/SetTheoryAFA.lean, the bridge was a freestanding axiom: ' 'ax_j1_quine_join_identity. It stated directly that the Quine atom satisfies the ' 'join-identity. This compiled, but the purity check showed T-EXEC depending on ' 'ax_j1_quine_join_identity — a named axiom floating outside any typeclass.')) @@ -283,7 +283,7 @@ def build(): 'Statement: Let L be a ZP-A semilattice with AFAStructure. ' 'If q : L is a Quine atom (selfMem(q) and q is unique among self-containing ' 'elements), then q = ⊥.', - 'Lean: ZeroParadox.t_exec — proved in SetTheoryAFA.lean. ' + 'Lean: ZeroParadox.t_exec — proved in ZeroParadox/Settheory/SetTheoryAFA.lean. ' 'Purity: does not depend on any axioms. ✓', ] )) @@ -364,7 +364,7 @@ def build(): E.append(Paragraph('I. J1 — QuineJoinIdentity (Derived)', S['h2'])) E.append(body( - 'In the initial stub of SetTheoryAFA.lean, the claim "the Quine atom satisfies the join-identity" ' + 'In the initial stub of ZeroParadox/Settheory/SetTheoryAFA.lean, the claim "the Quine atom satisfies the join-identity" ' 'was stated as a freestanding axiom (ax_j1_quine_join_identity). ZP-J replaces it with ' 'a theorem.')) E.append(result_box( @@ -428,7 +428,7 @@ def build(): 'T-EXEC and its corollaries carry zero freestanding axioms in the Lean 4 purity check. ' 'The entire derivation traces to the fields of two typeclasses: ZPSemilattice (from ZP-A) ' 'and AFAStructure (new in ZP-J). No standalone axiom statement appears anywhere in the ' - 'SetTheoryAFA.lean proof obligations.')) + 'ZeroParadox/Settheory/SetTheoryAFA.lean proof obligations.')) E.append(body( 'The foundational commitments are the typeclass fields themselves. In ZPSemilattice: ' 'A1–A4 (the semilattice axioms). In AFAStructure: selfMem (a predicate), ' @@ -489,7 +489,7 @@ def build(): ] E.append(body( - 'Formalised in AczelConn.lean as an extension of the T-EXEC typeclass encoding. The ' + 'Formalised in ZeroParadox/Settheory/AczelConn.lean as an extension of the T-EXEC typeclass encoding. The ' 'results are choice-free statements about a lattice predicate; they do not reach Aczel\'s ' 'set-theoretic question.', style='bodyI')) @@ -515,9 +515,9 @@ def build(): 'of self-containing elements, defined directly by comprehension on the predicate selfMem. ' 'No set-continuous operator is defined and J_self is not built as a union of sets, so the ' 'step that uses DC in Aczel\'s proof has no counterpart here. The results about J_self ' - 'follow immediately from AFAStructure (Lean: AczelConn.lean § I):')) + 'follow immediately from AFAStructure (Lean: ZeroParadox/Settheory/AczelConn.lean § I):')) E.append(result_box( - 'J_self Theorems (AczelConn.lean § I)', + 'J_self Theorems (ZeroParadox/Settheory/AczelConn.lean § I)', [ 'bot ∈ J_self: the bottom element is self-containing. (AFAStructure.bot_self_mem.)', 'J_self_eq_bot: every x ∈ J_self satisfies x = ⊥. ' @@ -539,9 +539,9 @@ def build(): E.append(Paragraph('III. The Abstract Principle: A Unique Witness Determines Its Set', S['h2'])) E.append(body( 'The identification is not specific to self-membership. It holds for any predicate with a ' - 'unique witness. AczelConn.lean makes this explicit:')) + 'unique witness. ZeroParadox/Settheory/AczelConn.lean makes this explicit:')) E.append(result_box( - 'Theorem singleton_from_unique_witness (AczelConn.lean § II)', + 'Theorem singleton_from_unique_witness (ZeroParadox/Settheory/AczelConn.lean § II)', [ 'For any type α and predicate P : α → Prop: ' 'if w satisfies P(w) and ∀ x, P(x) → x = w, ' @@ -570,7 +570,7 @@ def build(): ] E.append(body( - 'Developed in SelfApp.lean and Scale.lean after T-EXEC was established; ' + 'Developed in ZeroParadox/Computability/SelfApp.lean and ZeroParadox/Valuation/Scale.lean after T-EXEC was established; ' 'the abstraction chain derives AFAStructure\'s laws from stronger structures: a ' 'fixed-point structure and, beneath it, a valuation structure.', style='bodyI')) @@ -594,7 +594,7 @@ def build(): 'AbstractSelfApp encodes the abstract pattern common to both the set-theoretic and ' '2-adic domains: a self-application operation whose unique fixed point is ⊥.')) E.append(def_box( - 'AbstractSelfApp Typeclass (SelfApp.lean § I)', + 'AbstractSelfApp Typeclass (ZeroParadox/Computability/SelfApp.lean § I)', [ 'class AbstractSelfApp (L : Type*) [ZPSemilattice L] with:', '(1) selfApp : L → L — the self-application operation.', @@ -607,7 +607,7 @@ def build(): E.append(body( 'From the two laws fixed_bot and unique_fp (selfApp is data), the two AFAStructure LAWS become derived theorems, and selfMem is supplied as a definition (selfMemDerived) rather than proved — it is data:')) E.append(result_box( - 'Derived Results from AbstractSelfApp (SelfApp.lean § II–III)', + 'Derived Results from AbstractSelfApp (ZeroParadox/Computability/SelfApp.lean § II–III)', [ 'selfMemDerived x := selfApp(x) = x — self-containment as fixed-point property.', 'derived_bot_self_mem: selfMemDerived(⊥) — from fixed_bot. ✓', @@ -629,7 +629,7 @@ def build(): 'valuation. Only ⊥, which has infinite valuation (val(⊥) = ⊤), ' 'can be a fixed point.')) E.append(def_box( - 'ValuationStructure Typeclass (Scale.lean § I)', + 'ValuationStructure Typeclass (ZeroParadox/Valuation/Scale.lean § I)', [ 'class ValuationStructure (L : Type*) [ZPSemilattice L] with:', '(1) scale : L → L — the self-application (scaling) operation.', @@ -644,7 +644,7 @@ def build(): )) E.append(sp(6)) E.append(result_box( - 'Derived Results from ValuationStructure (Scale.lean § II–IV)', + 'Derived Results from ValuationStructure (ZeroParadox/Valuation/Scale.lean § II–IV)', [ 'val_finite_of_ne_bot: x ≠ ⊥ ⇒ val(x) ≠ ⊤ ' '— contrapositive of val_unique. ✓', @@ -708,7 +708,7 @@ def build(): ] E.append(body( - 'Developed in Model.lean and OntBridge.lean to ground the abstraction ' + 'Developed in ZeroParadox/Settheory/Model.lean and ZeroParadox/Settheory/OntBridge.lean to ground the abstraction ' 'chain in concrete types; OntologicalStates takes a shorter path because a ' 'two-element carrier admits no ValuationStructure.', style='bodyI')) @@ -723,7 +723,7 @@ def build(): 'So ⊤ is the ZP-bottom (valuation ∞, unique fixed point) and 0 is the ' 'ZP-maximum (fully constrained).')) E.append(def_box( - 'ℕ∞ Instances (Model.lean)', + 'ℕ∞ Instances (ZeroParadox/Settheory/Model.lean)', [ 'instNatInfZPS: ZPSemilattice ℕ∞ with join = min, bot = ⊤. ' 'A1–A3: min is associative, commutative, idempotent. ' @@ -737,7 +737,7 @@ def build(): )) E.append(sp(6)) E.append(result_box( - 'Derived AFA Content on ℕ∞ (Model.lean § III)', + 'Derived AFA Content on ℕ∞ (ZeroParadox/Settheory/Model.lean § III)', [ 'natInf_scale_unique_fp: x + 1 = x ⇒ x = ⊤. ' '(The unique fixed point of (· + 1) in ℕ∞ is ⊤.) ✓', @@ -762,7 +762,7 @@ def build(): 'exist ↦ null ≠ exist (unique_fp holds vacuously for exist). ' 'AFA content follows immediately from the AbstractSelfApp instance.')) E.append(def_box( - 'OntologicalStates Instances (OntBridge.lean)', + 'OntologicalStates Instances (ZeroParadox/Settheory/OntBridge.lean)', [ 'instOntZPS: ZPSemilattice OntologicalStates with null-identity join and bot = null. ' 'All four axioms proved by case analysis. ✓', @@ -773,7 +773,7 @@ def build(): )) E.append(sp(6)) E.append(result_box( - 'Derived AFA Content on OntologicalStates (OntBridge.lean § III)', + 'Derived AFA Content on OntologicalStates (ZeroParadox/Settheory/OntBridge.lean § III)', [ 'ont_bot_self_mem: null is self-containing. ✓', 'ont_quine_unique: any two self-containing elements of OntologicalStates are equal. ✓', @@ -799,7 +799,7 @@ def build(): ] E.append(body( - 'Formalised in APG.lean as the most recent addition; this section proves ' + 'Formalised in ZeroParadox/Settheory/APG.lean as the most recent addition; this section proves ' 'decoration uniqueness for finite accessible pointed graphs over abstract ' 'DecorationUniverses — an analogue of AFA\'s uniqueness clause, not that clause ' 'and not AFA itself — ' @@ -820,7 +820,7 @@ def build(): 'than sets. This avoids ZFSet (which satisfies Foundation, making self-loops impossible) ' 'and places the result in the typeclass framework established above.')) E.append(def_box( - 'Typeclass: DecorationUniverse (APG.lean § II)', + 'Typeclass: DecorationUniverse (ZeroParadox/Settheory/APG.lean § II)', [ 'class DecorationUniverse (U : Type*) [ZPSemilattice U]', ' [ValuationStructure U] where', @@ -843,7 +843,7 @@ def build(): 'inequalities, not an iterated equation. Let w be the next vertex on the cycle and p the ' 'path from w back to v. Because w is a child of v and d(v) collects over d of v’s ' 'children, collect_val_ge gives val(d(v)) ≥ val(d(w)) + 1. Following p, the lemma ' - 'path_val_chain (private to APG.lean) gives val(d(w)) ≥ val(d(v)) + length(p). ' + 'path_val_chain (private to ZeroParadox/Settheory/APG.lean) gives val(d(w)) ≥ val(d(v)) + length(p). ' 'path_val_chain\'s own proof recurses along p, accumulating at least one unit of valuation ' 'per edge — the bound above is itself reached by that recursion, not asserted outright. ' 'Together these force val(d(v)) to exceed itself, which no finite value in ℕ∞ ' @@ -857,7 +857,7 @@ def build(): 'scalek lemmas below are genuine results about periodic points of scale, and ' 'kCycle_node_eq_bot takes that equation as a hypothesis rather than deriving it.')) E.append(result_box( - 'Cyclic Vertex Theorems (APG.lean §§ III–VII\')', + 'Cyclic Vertex Theorems (ZeroParadox/Settheory/APG.lean §§ III–VII\')', [ 'val_iterate: val(scalek(x)) = val(x) + k for x ≠ ⊥. ✓', 'scale_iterate_unique_fp: scalek(x) = x ⇒ x = ⊥ for k ≥ 1. ✓', @@ -893,7 +893,7 @@ def build(): 'be reached from w without creating a cycle). Reach cardinality is therefore strictly ' 'decreasing, providing a well-founded measure for the induction.')) E.append(result_box( - 'Acyclic Induction and Global Uniqueness (APG.lean §§ VIII–IX)', + 'Acyclic Induction and Global Uniqueness (ZeroParadox/Settheory/APG.lean §§ VIII–IX)', [ 'acyclic_induction_step: if two valid decorations d₁, d₂ agree on all ' 'children of an acyclic vertex v, they agree on v. ' diff --git a/scripts/build_zpj_keystone_addendum.py b/scripts/build_zpj_keystone_addendum.py index 466271c8..386470ab 100644 --- a/scripts/build_zpj_keystone_addendum.py +++ b/scripts/build_zpj_keystone_addendum.py @@ -1,6 +1,6 @@ """ Zero Paradox — ZP-J Keystone Addendum: The Diagonal Fixed Point, the Lawvere Face-Split, and the Well-Foundedness Boundary -Version 1.26 | October 2026 +Version 1.27 | October 2026 Taylor (Well-founded coalgebras and recursion) is cited without year or venue: the copy on file carries neither. The gap stays open until a verified bibliographic record supplies them. Reads after ZP-J Self-Reference. @@ -10,7 +10,7 @@ from zp_utils import * from reportlab.platypus import KeepTogether -VERSION = '1.26' +VERSION = '1.27' FIRST_RELEASED = 'June 2026' # ── fix() guard: route all bare Paragraph() text through Unicode-to-entity conversion ── @@ -145,7 +145,7 @@ def build(): 'fixed point); Lawvere\'s are derived from a surjection. So the question is ' 'whether each face supplies that surjection. The verdict is face-dependent.')) E.append(KeepTogether(result_box( - 'In Set: no face is a Lawvere instance (Lawvere.lean)', + 'In Set: no face is a Lawvere instance (ZeroParadox/Category/Lawvere.lean)', [ 'For any nontrivial type, a Lawvere witness cannot exist: it would force every ' 'endofunction to have a fixed point, impossible once there are two distinct ' @@ -228,7 +228,7 @@ def build(): 'self-loop, where recursion cannot reach) to the well-founded ascent (the ε0 ' 'ordinal tower, recursively generated). The Zero Paradox formalizes this at two levels.')) E.append(KeepTogether(result_box( - 'Relation level (Boundary.lean)', + 'Relation level (ZeroParadox/Multihomed/Boundary.lean)', [ 'floor_not_wellFounded — the self-application floor is non-well-founded ' '(⊥ self-loops under selfApp). Fully axiom-free.', @@ -240,7 +240,7 @@ def build(): ))) E.append(sp(4)) E.append(KeepTogether(result_box( - 'Both levels at once (BoundaryBridge.lean)', + 'Both levels at once (ZeroParadox/Multihomed/BoundaryBridge.lean)', [ 'snap_boundary_two_registers — the crossing witnessed in two registers at ' 'once: the relation/carrier level above, and ZP-P\'s categorical μ/ν ' diff --git a/scripts/build_zpj_wheel_addendum.py b/scripts/build_zpj_wheel_addendum.py index a2a1101e..954614d9 100644 --- a/scripts/build_zpj_wheel_addendum.py +++ b/scripts/build_zpj_wheel_addendum.py @@ -1,6 +1,6 @@ """ Zero Paradox — ZP-J Wheel Addendum: The Wheel of Fractions is a Wheel -Version 1.8 | September 2026 +Version 1.9 | October 2026 Reads after ZP-J Self-Reference. """ @@ -8,7 +8,7 @@ from zp_utils import * from reportlab.platypus import KeepTogether -VERSION = '1.8' +VERSION = '1.9' FIRST_RELEASED = 'June 2026' # ── fix() guard: route all bare Paragraph() text through Unicode-to-entity conversion ── @@ -69,7 +69,7 @@ def build(): '& Tucker), which adjoins nothing at all and instead declares 0−1 = 0, ' 'staying inside the original number system. This addendum settles that question.')) E.append(body( - 'The main result is WheelFrac.instWheel (WheelFrac.lean): for any commutative ' + 'The main result is WheelFrac.instWheel (ZeroParadox/Algebra/WheelFrac.lean): for any commutative ' 'ring A and any multiplicative submonoid S, the wheel of fractions ' '⊙S A = (A × A)/≡S satisfies every axiom of ' 'Carlström\'s Definition 1.1. The companion result WheelFrac.inf_ne_bot shows that, ' @@ -95,7 +95,7 @@ def build(): 'eight. The unbundling is bookkeeping only — no axiom is added, removed, or ' 'weakened.')) E.append(def_box( - 'Typeclass: Wheel (Wheel.lean)', + 'Typeclass: Wheel (ZeroParadox/Algebra/Wheel.lean)', [ 'class Wheel (W : Type*) where', ' wadd, wmul : W → W → W -- + and ·', @@ -184,7 +184,7 @@ def build(): 'definitionally because pair-swap is its own inverse and commutes with the ' 'componentwise product.')) E.append(result_box( - 'Theorem: WheelFrac.instWheel (WheelFrac.lean)', + 'Theorem: WheelFrac.instWheel (ZeroParadox/Algebra/WheelFrac.lean)', [ '∀ {A : Type*} [CommRing A] (S : Submonoid A),', ' Wheel (⊙S A)', @@ -215,7 +215,7 @@ def build(): '⊙S A is trivial (p. 5). The natural hypothesis 0 ∉ S holds ' 'whenever S is the complement of a prime ideal, the usual case.')) E.append(result_box( - 'Proposition: WheelFrac.inf_ne_bot (WheelFrac.lean)', + 'Proposition: WheelFrac.inf_ne_bot (ZeroParadox/Algebra/WheelFrac.lean)', [ '∀ {A : Type*} [CommRing A] (S : Submonoid A),', ' (0 : A) ∉ S → ∞ ≠ ⊥ in ⊙S A', @@ -280,7 +280,7 @@ def build(): '2-adic valuation (v₂(0) = ∞) and in ZF+AFA (the Quine atom). The ' 'wheel of fractions is the algebraic face of that point: /0 is defined and ' 'distinct from the absorbing ⊥, exactly the behaviour the porthole ' - 'predicts. The concrete carrier ZPWheelElem (Wheel.lean §III–VI) ' + 'predicts. The concrete carrier ZPWheelElem (ZeroParadox/Algebra/Wheel.lean §III–VI) ' 'makes this explicit on the rationals extended with ∞ and ⊥, where ' 'val(x) = ∞ ⇔ /x = ∞ is proved directly ' '(zpw_top_val_iff_inv_is_inf). This addendum\'s headline result is the general ' @@ -305,19 +305,19 @@ def build(): 'context. Ring structure is an input, not a conclusion. The construction ' 'starts from a commutative ring and a submonoid; it does not derive wheel structure ' 'from the ZP lattice axioms alone. The bridge typeclass that would state such a ' - 'derivation, WheelValuationStructure (Wheel.lean §VII), is defined but its ' + 'derivation, WheelValuationStructure (ZeroParadox/Algebra/Wheel.lean §VII), is defined but its ' 'porthole condition val(0) = ⊤ is an assumed axiom, motivated by the ZP ' 'argument rather than type-checked as necessary.')) E.append(label_box( 'Lean Source Files', [ - 'WheelFrac.lean — rel, srel, the five quotient operations ' + 'ZeroParadox/Algebra/WheelFrac.lean — rel, srel, the five quotient operations ' '(waddF, wmulF, winvF), instWheel, inf_ne_bot. The headline results of this ' 'addendum.', - 'Wheel.lean — the Wheel typeclass (Carlström Def 1.1, 14 fields), ' + 'ZeroParadox/Algebra/Wheel.lean — the Wheel typeclass (Carlström Def 1.1, 14 fields), ' 'the derived elements wheelInf / wheelBot, the concrete carrier ZPWheelElem, ' 'and the porthole correspondence zpw_top_val_iff_inv_is_inf.', - 'Both files in ZeroParadox/ in the public repository.', + 'Both files are in the public repository.', ] )) E.append(sp(4)) @@ -346,7 +346,8 @@ def build(): 'called \'wheels\' (the term inspired by the topological picture ⊙ of the ' 'projective line together with an extra point 0/0) by Setzer [Set97], who showed ' 'how to modify the construction of fields of fractions from integral domains so ' - 'that wheels are obtained instead of fields."', + 'that wheels are obtained instead of fields." ([Set97] is Carlström\'s key for ' + 'A. Setzer, Wheels (draft), 1997.)', 'Carlström is the generalizer: "in this paper, we generalize Setzer\'s ' 'construction, so that it applies not only to integral domains, but to any ' 'commutative semiring." That is Wheels — On Division by Zero (Research ' @@ -366,7 +367,7 @@ def build(): 'and can read the axiom footprint to confirm the choice-free claim. Whether ' 'the porthole condition val(0) = ⊤ can be derived — rather than ' 'assumed — from upstream ZP structure remains the open question flagged ' - 'in Wheel.lean §VII–VIII.', + 'in ZeroParadox/Algebra/Wheel.lean §VII–VIII.', ] )) E.append(sp(6)) diff --git a/scripts/build_zpj_wheel_companion.py b/scripts/build_zpj_wheel_companion.py index 9d5e3dbc..02572bcb 100644 --- a/scripts/build_zpj_wheel_companion.py +++ b/scripts/build_zpj_wheel_companion.py @@ -1,13 +1,13 @@ """ Build ZP-J Wheel Illustrated Companion -Version 1.6 | September 2026 +Version 1.7 | October 2026 """ import os from zp_utils import * from reportlab.graphics.shapes import Drawing, Line, String, Circle, Ellipse -VERSION = '1.6' +VERSION = '1.7' FIRST_RELEASED = 'June 2026' @@ -107,9 +107,9 @@ def footer_cb(canvas, doc): 'algebraic structure (Carlström, 2001) in which dividing by zero is a ' 'defined operation rather than an error. Every formal claim here restates a ' 'theorem already proved in the technical document and its Lean source ' - '(Wheel.lean, WheelFrac.lean). Analogies are included to build ' - 'intuition, not as proof claims. Consult the addendum for the authoritative ' - 'mathematics.', CS['disc'])] + '(ZeroParadox/Algebra/Wheel.lean, ZeroParadox/Algebra/WheelFrac.lean). Analogies are ' + 'included to build intuition, not as proof claims. Consult the addendum for the ' + 'authoritative mathematics.', CS['disc'])] # ── The Problem With Dividing by Zero ──────────────────────────────────── E.append(Paragraph('The Problem With Dividing by Zero', CS['h1'])) From 725e58875690c9fb77a79c77670f4fd1ad2d8a3f Mon Sep 17 00:00:00 2001 From: probe Date: Sun, 1 Nov 2026 09:09:51 -0600 Subject: [PATCH 011/182] Die: land tagged-vs-limit probes (Prop steps, Rosolini lifting, epsilon-0 link) Die.lean: wlpo_of_discrete_tag (Sec. XXIII); RosPart, toRos, toRos_surjective_iff (onto iff LPO), AllRosolini, rosIncl_surjective_iff and the EM/LPO pair (Sec. XXIII); wem_of_selectedTotal_propStep (Sec. VIII); em_of_trichotomy_propStep and trichotomy_of_em (Sec. IX). Each with PurityCheck entry and ssot.json row. DieCannotBe.lean: instances and controls as anonymous examples in Secs. X, XI, XXVII; the limit map NInf -> Ordinal (infinity to epsilon-zero, never to bottom of Ordinal) as one conditional example in Sec. XXVII, with epsilonZero's and fundamentalSeq's footprints printed; the Escardo-Knapp Sec. 2.8 Reading reworded now that toRos relates NInf to the Rosolini propositions. Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01Qj4hZEe22hsY1FqfbKnnU2 --- ZeroParadox/Die.lean | 158 ++++++++++++ ZeroParadox/DieCannotBe.lean | 173 ++++++++++++- ssot.json | 457 ++++++++++++++++++++++++++++++++++- 3 files changed, 786 insertions(+), 2 deletions(-) diff --git a/ZeroParadox/Die.lean b/ZeroParadox/Die.lean index abce3489..754435c0 100644 --- a/ZeroParadox/Die.lean +++ b/ZeroParadox/Die.lean @@ -617,6 +617,28 @@ theorem selectedTotal_of_option (f : α → Option α) (h : ∀ a b, M.step a b rw [hb'] rfl +/-- `Statement:` if `α` has points `u ≠ v` and a `Bool` test `t` with `t b = true ↔ b = u`, and every + `Prop`-valued step on `α` has a total selector, weak excluded middle holds; the reduction reads + the selector at `u` of the step to `u` when `p` and to `v` when `¬ p`. -/ +theorem wem_of_selectedTotal_propStep (u v : α) (huv : u ≠ v) (t : α → Bool) + (ht : ∀ b, t b = true ↔ b = u) + (H : ∀ s : α → α → Prop, (ofTotal id (fun _ => rfl) s).SelectedTotal) : + ∀ p : Prop, ¬ p ∨ ¬ ¬ p := by + intro p + obtain ⟨f, hf⟩ := H (fun _ b => (b = u ∧ p) ∨ (b = v ∧ ¬ p)) + cases hfu : t (f u) with + | true => + have e := (ht _).1 hfu + refine Or.inr fun hnp => ?_ + rcases hf u ⟨v, Or.inr ⟨rfl, hnp⟩⟩ with ⟨_, hp⟩ | ⟨hv, _⟩ + · exact hnp hp + · exact huv (e.symm.trans hv) + | false => + refine Or.inl fun hp => ?_ + rcases hf u ⟨u, Or.inl ⟨rfl, hp⟩⟩ with ⟨hu, _⟩ | ⟨_, hnp⟩ + · rw [(ht _).2 hu] at hfu; cases hfu + · exact hnp hp + /-! ### § IX. The OVER leg's WHETHER: what OVER does at a point -/ variable (M) @@ -668,6 +690,32 @@ theorem lpo_of_trichotomy_nat_boolStep · exact Or.inl ⟨0, hs⟩ · exact Or.inl ⟨b, hb⟩ +/-- `Statement:` if, at a point `y` of `α`, the trichotomy holds for every `Prop`-valued step on `α`, + excluded middle holds; the reduction reads the step `a ↦ {b | p ∧ b = y}` at `y`. -/ +theorem em_of_trichotomy_propStep (y : α) + (H : ∀ s : α → α → Prop, (ofTotal id (fun _ => rfl) s).OverTrichotomy y) : + ∀ p : Prop, p ∨ ¬ p := by + intro p + rcases H (fun _ b => p ∧ b = y) with h | ⟨⟨hp, _⟩, _⟩ | ⟨b, ⟨_, hb⟩, hne⟩ + · exact Or.inr fun hp => h y ⟨hp, rfl⟩ + · exact Or.inl hp + · exact absurd hb hne + +/-- `Statement:` if excluded middle holds, every motion meets the trichotomy at every point. -/ +theorem trichotomy_of_em (em : ∀ p : Prop, p ∨ ¬ p) (M : Motion α) (y : α) : + M.OverTrichotomy y := by + rcases em (∃ b, M.step y b ∧ b ≠ y) with h1 | h1 + · exact Or.inr (Or.inr h1) + · rcases em (M.step y y) with h2 | h2 + · refine Or.inr (Or.inl ⟨h2, fun b hb => ?_⟩) + rcases em (b = y) with e | e + · exact e + · exact absurd ⟨b, hb, e⟩ h1 + · refine Or.inl fun b hb => ?_ + rcases em (b = y) with e | e + · exact h2 (e ▸ hb) + · exact h1 ⟨b, hb, e⟩ + /-- `Statement:` if `y` has at most one successor and steps to itself, `y` steps to itself only; no order is used. `Reading:` the order-free trap beside § XII's order traps. -/ theorem selfOnlyAt_of_step_self {y : α} (hu : ∀ b c, M.step y b → M.step y c → b = c) (hy : M.step y y) : @@ -3971,6 +4019,19 @@ theorem wlpo_of_tag (g : NInf → Option ℕ) (hg : ∀ x, g x = none ↔ x = in have := (hg b).2 e rw [hb] at this; cases this +-- The `DecidableEq` binder is kept in the type on purpose: the proof cases on it, and the +-- PurityCheck prints the footprint that binder buys. +set_option linter.unusedDecidableInType false in +/-- `Statement:` if `D` has decidable equality and a map `g : NInf → D` has `g x = g ∞ ↔ x = ∞` at + every `x`, WLPO holds. `wlpo_of_tag` has the hypotheses of the case `D = Option ℕ`, there with + `g ∞ = none` (`ZeroParadox/DieCannotBe.lean` § XXVII). -/ +theorem wlpo_of_discrete_tag {D : Type*} [DecidableEq D] (g : NInf → D) + (hg : ∀ x, g x = g infty ↔ x = infty) : + ∀ r : ℕ → Bool, (∀ n, r n = false) ∨ ¬ ∀ n, r n = false := fun r => by + by_cases h : g (det r) = g infty + · exact Or.inl ((det_eq_infty_iff r).1 ((hg _).1 h)) + · exact Or.inr fun hall => h (by rw [(det_eq_infty_iff r).2 hall]) + /-- `Statement:` `toPart x` is defined iff `x n = false` for some `n`, with value the least such `n`. -/ def toPart (x : NInf) : Part ℕ := ⟨∃ n, x.1 n = false, fun h => Nat.find h⟩ @@ -4032,6 +4093,90 @@ theorem toPart_ofOption (o : Option ℕ) : toPart (ofOption o) = Part.ofOption o exact congrArg some (by omega) · intro h; cases h; rfl +/-- `Statement:` partial elements of `ℕ` defined iff `∃ n, α n = true`, for some `α`. -/ +def RosPart : Type := {o : Part ℕ // ∃ α : ℕ → Bool, (o.Dom ↔ ∃ n, α n = true)} + +/-- `Statement:` `toPart x` with the witness `α = fun n => !x n` for its definedness. -/ +def toRos (x : NInf) : RosPart := ⟨toPart x, ⟨fun n => !x.1 n, + ⟨fun ⟨n, h⟩ => ⟨n, by simp [h]⟩, fun ⟨n, h⟩ => ⟨n, by simpa using h⟩⟩⟩⟩ + +/-- `Statement:` if `toRos` is onto, LPO holds; the proof reads the preimage of the element with + value `0` defined iff `∃ n, α n = true` at bit `0`. -/ +theorem lpo_of_toRos_surjective (h : Function.Surjective toRos) : + ∀ α : ℕ → Bool, (∃ n, α n = true) ∨ ∀ n, α n = false := by + intro α + obtain ⟨x, hx⟩ := h ⟨⟨∃ n, α n = true, fun _ => 0⟩, ⟨α, Iff.rfl⟩⟩ + have hx' : toPart x = ⟨∃ n, α n = true, fun _ => 0⟩ := congrArg Subtype.val hx + cases h0 : x.1 0 with + | false => + left + have hd : (toPart x).Dom := ⟨0, h0⟩ + rw [hx'] at hd; exact hd + | true => + right + intro n + cases hn : α n with + | false => rfl + | true => + have hm : (0 : ℕ) ∈ toPart x := by rw [hx']; exact ⟨⟨n, hn⟩, rfl⟩ + rw [(mem_toPart_iff x 0).1 hm] at h0 + exact absurd h0 (by decide) + +/-- `Statement:` if LPO holds, `toRos` is onto. -/ +theorem toRos_surjective_of_lpo (h : ∀ α : ℕ → Bool, (∃ n, α n = true) ∨ ∀ n, α n = false) : + Function.Surjective toRos := by + rintro ⟨o, α, hα⟩ + rcases h α with hex | hall + · have hd : o.Dom := hα.2 hex + refine ⟨ofNat (o.get hd), Subtype.ext (Part.ext fun n => ?_)⟩ + show n ∈ toPart (ofOption (some (o.get hd))) ↔ n ∈ o + rw [toPart_ofOption, Part.mem_ofOption] + exact ⟨fun e => (Option.some_injective _ e) ▸ Part.get_mem hd, + fun hn => congrArg some (Part.mem_unique (Part.get_mem hd) hn)⟩ + · refine ⟨infty, Subtype.ext (Part.ext fun n => ?_)⟩ + show n ∈ toPart infty ↔ n ∈ o + constructor + · rintro ⟨⟨m, hm⟩, _⟩; cases hm + · rintro ⟨hd, _⟩ + obtain ⟨m, hm⟩ := hα.1 hd + rw [hall m] at hm; cases hm + +/-- `Statement:` `toRos` is onto iff LPO; both directions. `Reading:` compare Escardó and Knapp, + CSL 2017, § 2.8, p. 21:6: "the decidability of Rosolini propositions is known as LPO". -/ +theorem toRos_surjective_iff : + Function.Surjective toRos ↔ ∀ α : ℕ → Bool, (∃ n, α n = true) ∨ ∀ n, α n = false := + ⟨lpo_of_toRos_surjective, toRos_surjective_of_lpo⟩ + +/-- `Statement:` every proposition `p` has some `α : ℕ → Bool` with `p ↔ ∃ n, α n = true`. -/ +def AllRosolini : Prop := ∀ p : Prop, ∃ α : ℕ → Bool, (p ↔ ∃ n, α n = true) + +/-- `Statement:` if excluded middle holds, `AllRosolini` holds. -/ +theorem allRosolini_of_em (em : ∀ p : Prop, p ∨ ¬ p) : AllRosolini := fun p => + (em p).elim (fun hp => ⟨fun _ => true, ⟨fun _ => ⟨0, rfl⟩, fun _ => hp⟩⟩) + (fun hn => ⟨fun _ => false, ⟨fun hp => absurd hp hn, fun ⟨_, h⟩ => by cases h⟩⟩) + +/-- `Statement:` if `AllRosolini` and LPO hold, excluded middle holds. -/ +theorem em_of_allRosolini_lpo (hr : AllRosolini) + (hl : ∀ α : ℕ → Bool, (∃ n, α n = true) ∨ ∀ n, α n = false) : ∀ p : Prop, p ∨ ¬ p := fun p => by + obtain ⟨α, hα⟩ := hr p + rcases hl α with h | h + · exact Or.inl (hα.2 h) + · exact Or.inr fun hp => by obtain ⟨n, hn⟩ := hα.1 hp; rw [h n] at hn; cases hn + +/-- `Statement:` the inclusion `RosPart → Part ℕ` is onto iff `AllRosolini`; both directions. -/ +theorem rosIncl_surjective_iff : + Function.Surjective (Subtype.val : RosPart → Part ℕ) ↔ AllRosolini := by + constructor + · intro h p + obtain ⟨⟨o, hro⟩, ho⟩ := h ⟨p, fun _ => 0⟩ + obtain ⟨α, hα⟩ := hro + refine ⟨α, ?_⟩ + have ho' : o = ⟨p, fun _ => 0⟩ := ho + subst ho' + exact hα + · intro h o + exact ⟨⟨o, h o.Dom⟩, rfl⟩ + /-- `Statement:` a map `g : NInf → Option ℕ` with `g x = some n ↔ x = n̲` gives LPO (Escardó, p. 4, the LPO row `ℕ∞ = ℕ ∪ {∞}`, right to left; compare his Corollary 3.7, p. 5). -/ theorem lpo_of_exactTag (g : NInf → Option ℕ) (hg : ∀ x n, g x = some n ↔ x = ofNat n) : @@ -4734,5 +4879,18 @@ open ZeroParadox #print axioms Motion.loopAt_image_iff_leftInverse #print axioms Motion.loopAt_image_iff_loopAt_all #print axioms Motion.lpo_of_loopAt_image +#print axioms NInf.wlpo_of_discrete_tag +#print axioms NInf.RosPart +#print axioms NInf.toRos +#print axioms NInf.lpo_of_toRos_surjective +#print axioms NInf.toRos_surjective_of_lpo +#print axioms NInf.toRos_surjective_iff +#print axioms NInf.AllRosolini +#print axioms NInf.allRosolini_of_em +#print axioms NInf.em_of_allRosolini_lpo +#print axioms NInf.rosIncl_surjective_iff +#print axioms Motion.wem_of_selectedTotal_propStep +#print axioms Motion.em_of_trichotomy_propStep +#print axioms Motion.trichotomy_of_em end PurityCheck diff --git a/ZeroParadox/DieCannotBe.lean b/ZeroParadox/DieCannotBe.lean index 49cddf39..57a3bbfe 100644 --- a/ZeroParadox/DieCannotBe.lean +++ b/ZeroParadox/DieCannotBe.lean @@ -1282,6 +1282,37 @@ example (hf : ZeroParadox.ChoiceFragment) {α : Type} (M : ZeroParadox.Motion α rw [this] -- Reading: the converse, the fragment ⇒ a selector on every motion, is not established here: the -- fragment chooses in `Bool`, a selector in an arbitrary carrier. +#check @ZeroParadox.Motion.wem_of_selectedTotal_propStep -- Statement: if `α` has points `u ≠ v` and a `Bool` test true exactly at `u`, (b) for every `Prop`-valued step on `α` gives weak excluded middle (`[propext]`) +-- Statement: instances on `NInf` (at `NInf.ofNat 0` and `NInf.ofNat 1`, test `NInf.isAt 0`), on +-- `Option ℕ` (at `none` and `some 0`) and on `ℕ` (at `0` and `1`), each landing on +-- `ZeroParadox.WeakExcludedMiddle`. +example (H : ∀ s : ZeroParadox.NInf → ZeroParadox.NInf → Prop, + (ZeroParadox.Motion.ofTotal id (fun _ => rfl) s).SelectedTotal) : + ZeroParadox.WeakExcludedMiddle := + ZeroParadox.Motion.wem_of_selectedTotal_propStep (ZeroParadox.NInf.ofNat 0) (ZeroParadox.NInf.ofNat 1) + (fun e => absurd (ZeroParadox.NInf.ofNat_injective e) (by decide)) (ZeroParadox.NInf.isAt 0) + (ZeroParadox.NInf.isAt_iff 0) H +example (H : ∀ s : Option ℕ → Option ℕ → Prop, + (ZeroParadox.Motion.ofTotal id (fun _ => rfl) s).SelectedTotal) : + ZeroParadox.WeakExcludedMiddle := + ZeroParadox.Motion.wem_of_selectedTotal_propStep none (some 0) (by simp) (fun b => b.isNone) + (fun b => by cases b <;> simp) H +example (H : ∀ s : ℕ → ℕ → Prop, (ZeroParadox.Motion.ofTotal id (fun _ => rfl) s).SelectedTotal) : + ZeroParadox.WeakExcludedMiddle := + ZeroParadox.Motion.wem_of_selectedTotal_propStep 0 1 (by decide) (fun b => b == 0) (fun b => by simp) H +-- Statement: CONTROL: on `Unit`, which has no `u ≠ v`, every step has a total selector, with no +-- hypothesis. +example (s : Unit → Unit → Prop) : (ZeroParadox.Motion.ofTotal id (fun _ => rfl) s).SelectedTotal := + ⟨id, fun a ⟨b, hb⟩ => by cases a; cases b; exact hb⟩ +-- Statement: CONTROL: classically the hypothesis holds on every carrier +-- (`Motion.selectedTotal_of_classical`, above). +example {α : Type} : ∀ s : α → α → Prop, (ZeroParadox.Motion.ofTotal id (fun _ => rfl) s).SelectedTotal := + fun _ => ZeroParadox.Motion.selectedTotal_of_classical +-- Reading: with a `Bool`-valued step the three carriers part: `NInf` is a member with no hypothesis +-- (`selectedTotal_ninf_boolStep`, § XXVII), and membership on `ℕ` and on `Option ℕ` gives LPO (this +-- section and § XXVII). With a `Prop`-valued step, the instances above share one hypothesis shape and +-- one conclusion; whether a selector for every `Prop`-valued step on any of them gives more than weak +-- excluded middle is not established here. /-! ### § XI. The OVER leg's WHETHER — what OVER does at a point -/ #check @ZeroParadox.Motion.NoStepAt -- Statement: no step leaves `y` @@ -1305,6 +1336,29 @@ example (H : ∀ (α : Type) (M : ZeroParadox.Motion α) (y : α), M.OverTrichot · exact Or.inr (h ()) · exact Or.inl hp · exact absurd (Subsingleton.elim b ()) hb +#check @ZeroParadox.Motion.em_of_trichotomy_propStep -- Statement: if, at a point `y` of `α`, the trichotomy holds for every `Prop`-valued step on `α`, excluded middle holds (`[propext]`) +#check @ZeroParadox.Motion.trichotomy_of_em -- Statement: if excluded middle holds, every motion meets the trichotomy at every point (no axioms) +-- Statement: the `Unit` example above follows from `em_of_trichotomy_propStep` at `y = ()`. +example (H : ∀ (α : Type) (M : ZeroParadox.Motion α) (y : α), M.OverTrichotomy y) : + ZeroParadox.ExcludedMiddle := + ZeroParadox.Motion.em_of_trichotomy_propStep () fun _ => H Unit _ () +-- Statement: at a point `y` of any `α : Type`, the trichotomy for every `Prop`-valued step and +-- excluded middle are inter-derivable; both directions. +example {α : Type} (y : α) : + (∀ s : α → α → Prop, (ZeroParadox.Motion.ofTotal id (fun _ => rfl) s).OverTrichotomy y) ↔ + ZeroParadox.ExcludedMiddle := + ⟨ZeroParadox.Motion.em_of_trichotomy_propStep y, + fun em _ => ZeroParadox.Motion.trichotomy_of_em em _ y⟩ +-- Statement: instance on `NInf` at `∞`. +example (H : ∀ s : ZeroParadox.NInf → ZeroParadox.NInf → Prop, + (ZeroParadox.Motion.ofTotal id (fun _ => rfl) s).OverTrichotomy ZeroParadox.NInf.infty) : + ZeroParadox.ExcludedMiddle := + ZeroParadox.Motion.em_of_trichotomy_propStep ZeroParadox.NInf.infty H +-- Statement: CONTROL: on `Empty` the trichotomy holds at every point, vacuously; the theorem takes a +-- point `y`. +example (s : Empty → Empty → Prop) : + ∀ y : Empty, (ZeroParadox.Motion.ofTotal id (fun _ => rfl) s).OverTrichotomy y := + fun y => y.elim -- Reading: the OVER-leg counterpart of § IX's Escardó–Knapp § 2.2 form ("every partial element is -- defined or else undefined"), there quoted; cited, not claimed. #check @ZeroParadox.Motion.lpo_of_trichotomy_nat_boolStep -- Statement: the trichotomy at every point of every motion on `ℕ` with a `Bool`-valued step ⇒ the limited principle of omniscience (`[propext]`) @@ -4312,9 +4366,37 @@ example : ZeroParadox.WLPO ↔ ∀ x y : ZeroParadox.NInf, x = y ∨ x ≠ y := #check @ZeroParadox.NInf.mem_toPart_iff -- Statement: `n ∈ toPart x ↔ x = NInf.ofNat n` #check @ZeroParadox.NInf.toPart_injective -- Statement: `toPart` is one-to-one #check @ZeroParadox.NInf.toPart_ofOption -- Statement: `toPart ∘ ofOption = Part.ofOption` +-- Statement: between `NInf` and `Part ℕ`, the Rosolini partial elements: `toRos` is `toPart` with a +-- witness for its definedness, and the inclusion into `Part ℕ` undoes the witness. +#check @ZeroParadox.NInf.RosPart -- Statement: partial elements of `ℕ` defined iff `∃ n, α n = true`, for some `α : ℕ → Bool` +#check @ZeroParadox.NInf.toRos -- Statement: `toPart x`, with the witness `fun n => !x n` +example (x : ZeroParadox.NInf) : (ZeroParadox.NInf.toRos x).1 = ZeroParadox.NInf.toPart x := rfl +#check @ZeroParadox.NInf.toRos_surjective_iff -- Statement: `toRos` is onto iff LPO; both directions +example : Function.Surjective ZeroParadox.NInf.toRos ↔ ZeroParadox.LPO := + ZeroParadox.NInf.toRos_surjective_iff +#check @ZeroParadox.NInf.AllRosolini -- Statement: every `p : Prop` has some `α` with `p ↔ ∃ n, α n = true` +#check @ZeroParadox.NInf.rosIncl_surjective_iff -- Statement: the inclusion `RosPart → Part ℕ` is onto iff `AllRosolini`; both directions +#check @ZeroParadox.NInf.allRosolini_of_em -- Statement: excluded middle gives `AllRosolini`; one way +#check @ZeroParadox.NInf.em_of_allRosolini_lpo -- Statement: `AllRosolini` and LPO together give excluded middle +-- Reading: whether `AllRosolini` alone gives excluded middle, or any taboo, is not established here. -- Statement: backward, each exact map gives a taboo. #check @ZeroParadox.NInf.lpo_of_exactTag -- Statement: `NInf → Option ℕ` with `g x = some n ↔ x = NInf.ofNat n` gives LPO #check @ZeroParadox.NInf.wlpo_of_tag -- Statement: `NInf → Option ℕ` with `g x = none ↔ x = ∞` gives WLPO +#check @ZeroParadox.NInf.wlpo_of_discrete_tag -- Statement: `g : NInf → D`, `D` with decidable equality, with `g x = g ∞ ↔ x = ∞` at every `x`, gives WLPO (`[propext, Quot.sound]`) +-- Statement: `wlpo_of_tag`'s conclusion follows from it at `D = Option ℕ`. +example (g : ZeroParadox.NInf → Option ℕ) (hg : ∀ x, g x = none ↔ x = ZeroParadox.NInf.infty) : + ZeroParadox.WLPO := + ZeroParadox.NInf.wlpo_of_discrete_tag g fun x => by + rw [(hg ZeroParadox.NInf.infty).2 rfl]; exact hg x +-- Statement: CONTROL: a constant map into any type fails the hypothesis, at `NInf.ofNat 0`. +example {D : Type} (c : D) : + ¬ ∀ x : ZeroParadox.NInf, (fun _ => c) x = (fun _ => c) ZeroParadox.NInf.infty ↔ + x = ZeroParadox.NInf.infty := + fun h => ZeroParadox.NInf.ofNat_ne_infty 0 ((h (ZeroParadox.NInf.ofNat 0)).1 rfl) +-- Statement: CONTROL: `g = id` into `D = NInf` meets the hypothesis, so `DecidableEq NInf` alone gives +-- WLPO; `NInf.decEq_classical` (above) supplies that instance with no WLPO hypothesis. +example (d : DecidableEq ZeroParadox.NInf) : ZeroParadox.WLPO := + @ZeroParadox.NInf.wlpo_of_discrete_tag ZeroParadox.NInf d id fun _ => Iff.rfl #check @ZeroParadox.NInf.em_of_partToNInf -- Statement: `Part ℕ → NInf` with `g o = NInf.ofNat n ↔ n ∈ o` gives excluded middle example (g : Part ℕ → ZeroParadox.NInf) (hg : ∀ o n, g o = ZeroParadox.NInf.ofNat n ↔ n ∈ o) : ZeroParadox.ExcludedMiddle := ZeroParadox.NInf.em_of_partToNInf g hg @@ -4412,6 +4494,91 @@ example (g : Part ℕ → ZeroParadox.NInf) (hg : ∀ o n, g o = ZeroParadox.NIn #check @ZeroParadox.Motion.loopAt_image_iff_leftInverse -- Statement: loops at every `inr (ofOption o)` iff `r` is a left inverse; both directions #check @ZeroParadox.Motion.loopAt_image_iff_loopAt_all -- Statement: loops at every `inr (ofOption o)` iff at every `inr x`; both directions #check @ZeroParadox.Motion.lpo_of_loopAt_image -- Statement: loops at every `inr (ofOption o)` give LPO +-- Statement: the limit point into `Ordinal`. If `L : NInf → Ordinal.{0}` is +-- `L x = ⨆ n, (if x n then fundamentalSeq (n + 1) else 0)` at every `x`, then: (i) `L` sends +-- `NInf.ofNat k` to `fundamentalSeq k`, the `k`-th stage of the ω-tower; (ii) the image of `∞` is +-- not ⊥ of `Ordinal` (`epsilon0_ne_bot`), and the image of `NInf.ofNat 0` is; (iii) `L` sends `∞` +-- to `epsilonZero`, ε₀; (iv) `L x = ε₀ ↔ x = ∞` at every `x`; (v) on `Option ℕ`, `L ∘ ofOption` is +-- the tagged map `none ↦ ε₀`, `some k ↦ fundamentalSeq k`; (vi) WLPO holds, by +-- `wlpo_of_discrete_tag` with (iv) and the decidable equality on `Ordinal` that `classical` supplies. +example (L : ZeroParadox.NInf → Ordinal.{0}) + (hL : ∀ x, L x = ⨆ n : ℕ, if x.1 n = true then ZeroParadox.fundamentalSeq (n + 1) else 0) : + (∀ k, L (ZeroParadox.NInf.ofNat k) = ZeroParadox.fundamentalSeq k) ∧ + (L ZeroParadox.NInf.infty ≠ ⊥ ∧ L (ZeroParadox.NInf.ofNat 0) = ⊥) ∧ + L ZeroParadox.NInf.infty = ZeroParadox.epsilonZero ∧ + (∀ x, L x = ZeroParadox.epsilonZero ↔ x = ZeroParadox.NInf.infty) ∧ + (∀ o : Option ℕ, L (ZeroParadox.NInf.ofOption o) = + o.elim ZeroParadox.epsilonZero ZeroParadox.fundamentalSeq) ∧ + ZeroParadox.WLPO := by + have mono : Monotone ZeroParadox.fundamentalSeq := + (strictMono_nat_of_lt_succ ZeroParadox.fundamentalSeq_strictMono).monotone + have zle : ∀ a : Ordinal.{0}, 0 ≤ a := fun a => by rw [← Ordinal.bot_eq_zero]; exact bot_le + have bdd : ∀ x : ZeroParadox.NInf, BddAbove (Set.range fun n : ℕ => + if x.1 n = true then ZeroParadox.fundamentalSeq (n + 1) else (0 : Ordinal.{0})) := fun x => + ⟨ZeroParadox.epsilonZero, by + rintro _ ⟨n, rfl⟩ + dsimp only + split + · exact le_of_lt (ZeroParadox.epsilonZero_tower_lt (n + 1)) + · exact zle _⟩ + have h1 : ∀ k, L (ZeroParadox.NInf.ofNat k) = ZeroParadox.fundamentalSeq k := fun k => by + rw [hL] + apply le_antisymm + · apply ciSup_le + intro n + show (if decide (n < k) = true then _ else _) ≤ _ + split + · next h => exact mono (by simpa using h) + · exact zle _ + · cases k with + | zero => exact zle _ + | succ j => + refine le_trans ?_ (le_ciSup (bdd (ZeroParadox.NInf.ofNat (j + 1))) j) + show _ ≤ (if decide (j < j + 1) = true then _ else _) + rw [if_pos (by simp)] + have h2 : L ZeroParadox.NInf.infty = ZeroParadox.epsilonZero := by + rw [hL] + apply le_antisymm + · apply ciSup_le + intro n + show (if true = true then _ else _) ≤ _ + rw [if_pos rfl]; exact le_of_lt (ZeroParadox.epsilonZero_tower_lt (n + 1)) + · rw [ZeroParadox.epsilonZero_eq_iSup] + apply ciSup_le + intro n + refine le_trans (mono (Nat.le_succ n)) + (le_trans ?_ (le_ciSup (bdd ZeroParadox.NInf.infty) n)) + show _ ≤ (if true = true then _ else _) + rw [if_pos rfl] + have h3 : ∀ x, L x = ZeroParadox.epsilonZero ↔ x = ZeroParadox.NInf.infty := fun x => by + constructor + · intro h + apply ZeroParadox.NInf.separated + intro hne + apply hne + apply ZeroParadox.NInf.eq_infty_of_ne_ofNat + intro k e + rw [e, h1] at h + exact absurd h (ne_of_lt (ZeroParadox.epsilonZero_tower_lt k)) + · rintro rfl; exact h2 + refine ⟨h1, ⟨fun e => ZeroParadox.epsilon0_ne_bot (h2.symm.trans e), + (h1 0).trans (Ordinal.bot_eq_zero).symm⟩, h2, h3, fun o => ?_, ?_⟩ + · cases o with + | none => exact h2 + | some k => exact h1 k + · classical + exact ZeroParadox.NInf.wlpo_of_discrete_tag L fun x => by rw [h2]; exact h3 x +-- Statement: `epsilonZero` and `fundamentalSeq`, named in `hL` and in (i), (iii), (iv) and (v), each +-- depend on `Classical.choice`; their footprints are printed next. +#print axioms ZeroParadox.epsilonZero +#print axioms ZeroParadox.fundamentalSeq +-- Reading: in (vi) the limit point is tagged by the decidable equality `classical` gives `Ordinal`, +-- as in `wlpo_of_tag` by `Option ℕ`'s; `L` is not claimed to be computable or choice-free. +-- Reading (cited, not claimed): Escardó, preprint of JSL 78(3) (2013), § 11, p. 19, citing Coquand, +-- Hancock and Setzer's limit structures: they reach `γ`-transfinite iteration for `γ < ε₀` with +-- simple types, and "it is not possible to embed ε₀ in 2^ℕ using limit structures"; he neither +-- conjectures nor refutes embedding `[0, ε₀]` in `2^ℕ` within HA^ω. `L` is not such an embedding: +-- its target is `Ordinal`, not `2^ℕ`, and (vi) uses `classical`. -- Reading (cited, not claimed): Escardó, preprint of JSL 78(3) (2013): `NInf` is his `ℕ∞` (p. 1), -- `eps` his selection function (Theorem 3.5, p. 5), `exists_ne_infty_eq_false_or` his Lemma 8.1 by his -- proof (p. 14), `wlpo_of_eqOr_infty` the right-to-left half of his WLPO row (p. 4) and @@ -4435,7 +4602,11 @@ example (g : Part ℕ → ZeroParadox.NInf) (hg : ∀ o n, g o = ZeroParadox.NIn -- Escardó and Knapp, CSL 2017, LIPIcs 82, § 2.7, p. 21:6: lifting by the decidable dominance is -- `X + 1` and by all propositions is `L X`; § 2.8, pp. 21:6–21:7: "the decidability of Rosolini -- propositions is known as LPO", and the Rosolini structures sit in their `ℕ∞`, presented there --- as `Σ α, isProp ⟨α⟩`, which is not related to `NInf` in Lean here. The trichotomy route through +-- as `Σ α, isProp ⟨α⟩` (p. 21:7); that presentation is not formalized here. Their Rosolini +-- propositions (§ 2.4, p. 21:5) are the definedness of `RosPart`, and `toRos_surjective_iff` relates +-- `NInf` to them: `toRos` is onto iff LPO; compare the quoted sentence. There a proposition `A` is +-- Rosolini when `∃ α, isProp⟨α⟩ × (A = ⟨α⟩)` with `⟨α⟩ = Σ n, α n = 1`; in `RosPart` the +-- existential is a `Prop` and definedness is `↔`, not `=`. The trichotomy route through -- `hmap` is constructed here, not from a source. -- `ofOption` is `ι𝟙 : ℕ + 𝟙 → ℕ∞` in TypeTopology's module -- `TypeTopology.GenericConvergentSequence` (retrieved 2026-10-29), which also holds `ℕ∞-density`, diff --git a/ssot.json b/ssot.json index 42260595..f34ddd5a 100644 --- a/ssot.json +++ b/ssot.json @@ -652,7 +652,7 @@ "tree": "eacbc513a541d465b9937b33a53f923d3e9ea4b6" }, "counts": { - "declarations": 2985, + "declarations": 2998, "files": 184 }, "entries": [ @@ -15229,6 +15229,41 @@ "sorry_free": true } }, + { + "claims": { + "citations": [], + "witness_of": [] + }, + "disposition": "new", + "id": "21ccce92-2ea2-4f67-ab09-7a52dca2de3a", + "new": { + "file": "ZeroParadox/Die.lean", + "namespace": "ZeroParadox", + "qualified": "ZeroParadox.Motion.trichotomy_of_em", + "short": "trichotomy_of_em" + }, + "old": { + "file": "ZeroParadox/Die.lean", + "kind": null, + "line": null, + "prefix": "ZeroParadox", + "qualified": "ZeroParadox.Motion.trichotomy_of_em", + "short": "trichotomy_of_em", + "synthetic": true + }, + "ontology": { + "domain": [ + "unscoped" + ], + "object": [], + "role": [] + }, + "reason": "die-tagged-1101: Prop-step trichotomy/selector reductions (EM, WEM), Rosolini lifting RosPart with toRos onto iff LPO, wlpo_of_discrete_tag (Die §§ VIII, IX, XXIII); Tim authorised 2026-11-01", + "verify": { + "axioms": null, + "sorry_free": true + } + }, { "claims": { "citations": [], @@ -22105,6 +22140,41 @@ "sorry_free": true } }, + { + "claims": { + "citations": [], + "witness_of": [] + }, + "disposition": "new", + "id": "315618e8-20e3-424e-9f90-2dfbcd89ec27", + "new": { + "file": "ZeroParadox/Die.lean", + "namespace": "ZeroParadox", + "qualified": "ZeroParadox.NInf.em_of_allRosolini_lpo", + "short": "em_of_allRosolini_lpo" + }, + "old": { + "file": "ZeroParadox/Die.lean", + "kind": null, + "line": null, + "prefix": "ZeroParadox", + "qualified": "ZeroParadox.NInf.em_of_allRosolini_lpo", + "short": "em_of_allRosolini_lpo", + "synthetic": true + }, + "ontology": { + "domain": [ + "unscoped" + ], + "object": [], + "role": [] + }, + "reason": "die-tagged-1101: Prop-step trichotomy/selector reductions (EM, WEM), Rosolini lifting RosPart with toRos onto iff LPO, wlpo_of_discrete_tag (Die §§ VIII, IX, XXIII); Tim authorised 2026-11-01", + "verify": { + "axioms": null, + "sorry_free": true + } + }, { "claims": { "citations": [], @@ -29694,6 +29764,41 @@ "sorry_free": true } }, + { + "claims": { + "citations": [], + "witness_of": [] + }, + "disposition": "new", + "id": "44fff6aa-7e0b-4ade-a56d-ec04fde6b4cc", + "new": { + "file": "ZeroParadox/Die.lean", + "namespace": "ZeroParadox", + "qualified": "ZeroParadox.NInf.rosIncl_surjective_iff", + "short": "rosIncl_surjective_iff" + }, + "old": { + "file": "ZeroParadox/Die.lean", + "kind": null, + "line": null, + "prefix": "ZeroParadox", + "qualified": "ZeroParadox.NInf.rosIncl_surjective_iff", + "short": "rosIncl_surjective_iff", + "synthetic": true + }, + "ontology": { + "domain": [ + "unscoped" + ], + "object": [], + "role": [] + }, + "reason": "die-tagged-1101: Prop-step trichotomy/selector reductions (EM, WEM), Rosolini lifting RosPart with toRos onto iff LPO, wlpo_of_discrete_tag (Die §§ VIII, IX, XXIII); Tim authorised 2026-11-01", + "verify": { + "axioms": null, + "sorry_free": true + } + }, { "claims": { "citations": [], @@ -35548,6 +35653,41 @@ "sorry_free": true } }, + { + "claims": { + "citations": [], + "witness_of": [] + }, + "disposition": "new", + "id": "51b8af1d-49b5-4afb-bf50-df1fc4bb5f5d", + "new": { + "file": "ZeroParadox/Die.lean", + "namespace": "ZeroParadox", + "qualified": "ZeroParadox.NInf.lpo_of_toRos_surjective", + "short": "lpo_of_toRos_surjective" + }, + "old": { + "file": "ZeroParadox/Die.lean", + "kind": null, + "line": null, + "prefix": "ZeroParadox", + "qualified": "ZeroParadox.NInf.lpo_of_toRos_surjective", + "short": "lpo_of_toRos_surjective", + "synthetic": true + }, + "ontology": { + "domain": [ + "unscoped" + ], + "object": [], + "role": [] + }, + "reason": "die-tagged-1101: Prop-step trichotomy/selector reductions (EM, WEM), Rosolini lifting RosPart with toRos onto iff LPO, wlpo_of_discrete_tag (Die §§ VIII, IX, XXIII); Tim authorised 2026-11-01", + "verify": { + "axioms": null, + "sorry_free": true + } + }, { "claims": { "citations": [], @@ -43999,6 +44139,41 @@ "sorry_free": true } }, + { + "claims": { + "citations": [], + "witness_of": [] + }, + "disposition": "new", + "id": "67285818-6942-4377-b3ce-aa836d29e620", + "new": { + "file": "ZeroParadox/Die.lean", + "namespace": "ZeroParadox", + "qualified": "ZeroParadox.NInf.allRosolini_of_em", + "short": "allRosolini_of_em" + }, + "old": { + "file": "ZeroParadox/Die.lean", + "kind": null, + "line": null, + "prefix": "ZeroParadox", + "qualified": "ZeroParadox.NInf.allRosolini_of_em", + "short": "allRosolini_of_em", + "synthetic": true + }, + "ontology": { + "domain": [ + "unscoped" + ], + "object": [], + "role": [] + }, + "reason": "die-tagged-1101: Prop-step trichotomy/selector reductions (EM, WEM), Rosolini lifting RosPart with toRos onto iff LPO, wlpo_of_discrete_tag (Die §§ VIII, IX, XXIII); Tim authorised 2026-11-01", + "verify": { + "axioms": null, + "sorry_free": true + } + }, { "claims": { "citations": [], @@ -45926,6 +46101,41 @@ "sorry_free": true } }, + { + "claims": { + "citations": [], + "witness_of": [] + }, + "disposition": "new", + "id": "6b606b15-ca57-4bf0-8ac2-c9d16753b7a3", + "new": { + "file": "ZeroParadox/Die.lean", + "namespace": "ZeroParadox", + "qualified": "ZeroParadox.NInf.toRos_surjective_iff", + "short": "toRos_surjective_iff" + }, + "old": { + "file": "ZeroParadox/Die.lean", + "kind": null, + "line": null, + "prefix": "ZeroParadox", + "qualified": "ZeroParadox.NInf.toRos_surjective_iff", + "short": "toRos_surjective_iff", + "synthetic": true + }, + "ontology": { + "domain": [ + "unscoped" + ], + "object": [], + "role": [] + }, + "reason": "die-tagged-1101: Prop-step trichotomy/selector reductions (EM, WEM), Rosolini lifting RosPart with toRos onto iff LPO, wlpo_of_discrete_tag (Die §§ VIII, IX, XXIII); Tim authorised 2026-11-01", + "verify": { + "axioms": null, + "sorry_free": true + } + }, { "claims": { "citations": [], @@ -48563,6 +48773,41 @@ "sorry_free": true } }, + { + "claims": { + "citations": [], + "witness_of": [] + }, + "disposition": "new", + "id": "70b603f4-5e2a-4350-9129-3713153be5bf", + "new": { + "file": "ZeroParadox/Die.lean", + "namespace": "ZeroParadox", + "qualified": "ZeroParadox.Motion.em_of_trichotomy_propStep", + "short": "em_of_trichotomy_propStep" + }, + "old": { + "file": "ZeroParadox/Die.lean", + "kind": null, + "line": null, + "prefix": "ZeroParadox", + "qualified": "ZeroParadox.Motion.em_of_trichotomy_propStep", + "short": "em_of_trichotomy_propStep", + "synthetic": true + }, + "ontology": { + "domain": [ + "unscoped" + ], + "object": [], + "role": [] + }, + "reason": "die-tagged-1101: Prop-step trichotomy/selector reductions (EM, WEM), Rosolini lifting RosPart with toRos onto iff LPO, wlpo_of_discrete_tag (Die §§ VIII, IX, XXIII); Tim authorised 2026-11-01", + "verify": { + "axioms": null, + "sorry_free": true + } + }, { "claims": { "citations": [], @@ -63876,6 +64121,41 @@ "sorry_free": true } }, + { + "claims": { + "citations": [], + "witness_of": [] + }, + "disposition": "new", + "id": "95a74722-5848-42b3-9dc2-77470033b22d", + "new": { + "file": "ZeroParadox/Die.lean", + "namespace": "ZeroParadox", + "qualified": "ZeroParadox.Motion.wem_of_selectedTotal_propStep", + "short": "wem_of_selectedTotal_propStep" + }, + "old": { + "file": "ZeroParadox/Die.lean", + "kind": null, + "line": null, + "prefix": "ZeroParadox", + "qualified": "ZeroParadox.Motion.wem_of_selectedTotal_propStep", + "short": "wem_of_selectedTotal_propStep", + "synthetic": true + }, + "ontology": { + "domain": [ + "unscoped" + ], + "object": [], + "role": [] + }, + "reason": "die-tagged-1101: Prop-step trichotomy/selector reductions (EM, WEM), Rosolini lifting RosPart with toRos onto iff LPO, wlpo_of_discrete_tag (Die §§ VIII, IX, XXIII); Tim authorised 2026-11-01", + "verify": { + "axioms": null, + "sorry_free": true + } + }, { "claims": { "citations": [], @@ -67877,6 +68157,41 @@ "sorry_free": true } }, + { + "claims": { + "citations": [], + "witness_of": [] + }, + "disposition": "new", + "id": "9e24c8a9-061b-4780-affa-d6b49fd77cd2", + "new": { + "file": "ZeroParadox/Die.lean", + "namespace": "ZeroParadox", + "qualified": "ZeroParadox.NInf.wlpo_of_discrete_tag", + "short": "wlpo_of_discrete_tag" + }, + "old": { + "file": "ZeroParadox/Die.lean", + "kind": null, + "line": null, + "prefix": "ZeroParadox", + "qualified": "ZeroParadox.NInf.wlpo_of_discrete_tag", + "short": "wlpo_of_discrete_tag", + "synthetic": true + }, + "ontology": { + "domain": [ + "unscoped" + ], + "object": [], + "role": [] + }, + "reason": "die-tagged-1101: Prop-step trichotomy/selector reductions (EM, WEM), Rosolini lifting RosPart with toRos onto iff LPO, wlpo_of_discrete_tag (Die §§ VIII, IX, XXIII); Tim authorised 2026-11-01", + "verify": { + "axioms": null, + "sorry_free": true + } + }, { "claims": { "citations": [], @@ -75636,6 +75951,41 @@ "sorry_free": true } }, + { + "claims": { + "citations": [], + "witness_of": [] + }, + "disposition": "new", + "id": "b0f3c48b-7942-4a9f-9b85-7d4502053359", + "new": { + "file": "ZeroParadox/Die.lean", + "namespace": "ZeroParadox", + "qualified": "ZeroParadox.NInf.toRos", + "short": "toRos" + }, + "old": { + "file": "ZeroParadox/Die.lean", + "kind": null, + "line": null, + "prefix": "ZeroParadox", + "qualified": "ZeroParadox.NInf.toRos", + "short": "toRos", + "synthetic": true + }, + "ontology": { + "domain": [ + "unscoped" + ], + "object": [], + "role": [] + }, + "reason": "die-tagged-1101: Prop-step trichotomy/selector reductions (EM, WEM), Rosolini lifting RosPart with toRos onto iff LPO, wlpo_of_discrete_tag (Die §§ VIII, IX, XXIII); Tim authorised 2026-11-01", + "verify": { + "axioms": null, + "sorry_free": true + } + }, { "claims": { "citations": [], @@ -78289,6 +78639,41 @@ "sorry_free": true } }, + { + "claims": { + "citations": [], + "witness_of": [] + }, + "disposition": "new", + "id": "b6d4a38a-db88-4336-9566-b013f01013c4", + "new": { + "file": "ZeroParadox/Die.lean", + "namespace": "ZeroParadox", + "qualified": "ZeroParadox.NInf.toRos_surjective_of_lpo", + "short": "toRos_surjective_of_lpo" + }, + "old": { + "file": "ZeroParadox/Die.lean", + "kind": null, + "line": null, + "prefix": "ZeroParadox", + "qualified": "ZeroParadox.NInf.toRos_surjective_of_lpo", + "short": "toRos_surjective_of_lpo", + "synthetic": true + }, + "ontology": { + "domain": [ + "unscoped" + ], + "object": [], + "role": [] + }, + "reason": "die-tagged-1101: Prop-step trichotomy/selector reductions (EM, WEM), Rosolini lifting RosPart with toRos onto iff LPO, wlpo_of_discrete_tag (Die §§ VIII, IX, XXIII); Tim authorised 2026-11-01", + "verify": { + "axioms": null, + "sorry_free": true + } + }, { "claims": { "citations": [], @@ -99458,6 +99843,41 @@ "sorry_free": true } }, + { + "claims": { + "citations": [], + "witness_of": [] + }, + "disposition": "new", + "id": "e74ba681-7dac-48b5-91e2-36f0d4d7bba0", + "new": { + "file": "ZeroParadox/Die.lean", + "namespace": "ZeroParadox", + "qualified": "ZeroParadox.NInf.AllRosolini", + "short": "AllRosolini" + }, + "old": { + "file": "ZeroParadox/Die.lean", + "kind": null, + "line": null, + "prefix": "ZeroParadox", + "qualified": "ZeroParadox.NInf.AllRosolini", + "short": "AllRosolini", + "synthetic": true + }, + "ontology": { + "domain": [ + "unscoped" + ], + "object": [], + "role": [] + }, + "reason": "die-tagged-1101: Prop-step trichotomy/selector reductions (EM, WEM), Rosolini lifting RosPart with toRos onto iff LPO, wlpo_of_discrete_tag (Die §§ VIII, IX, XXIII); Tim authorised 2026-11-01", + "verify": { + "axioms": null, + "sorry_free": true + } + }, { "claims": { "citations": [], @@ -109122,6 +109542,41 @@ "sorry_free": true } }, + { + "claims": { + "citations": [], + "witness_of": [] + }, + "disposition": "new", + "id": "fd634896-8f91-4cf6-ba58-d784cc24cd48", + "new": { + "file": "ZeroParadox/Die.lean", + "namespace": "ZeroParadox", + "qualified": "ZeroParadox.NInf.RosPart", + "short": "RosPart" + }, + "old": { + "file": "ZeroParadox/Die.lean", + "kind": null, + "line": null, + "prefix": "ZeroParadox", + "qualified": "ZeroParadox.NInf.RosPart", + "short": "RosPart", + "synthetic": true + }, + "ontology": { + "domain": [ + "unscoped" + ], + "object": [], + "role": [] + }, + "reason": "die-tagged-1101: Prop-step trichotomy/selector reductions (EM, WEM), Rosolini lifting RosPart with toRos onto iff LPO, wlpo_of_discrete_tag (Die §§ VIII, IX, XXIII); Tim authorised 2026-11-01", + "verify": { + "axioms": null, + "sorry_free": true + } + }, { "claims": { "citations": [], From 239bb1ac1cd174cd24e96442a8002207219af7a3 Mon Sep 17 00:00:00 2001 From: probe Date: Sun, 1 Nov 2026 09:20:52 -0600 Subject: [PATCH 012/182] DieCannotBe: cite prior art for the tagged-vs-limit landing (round-1 prior-art) Bell 1993 via Baaz-Zach for the Prop-step selector; Kripke's schema (Knapp; TypeTopology SemiDecidable BKS+) for AllRosolini; TypeTopology disagreement-taboo' for wlpo_of_discrete_tag; the dropped isProp condition in RosPart; Escardo 2013 Sec. 11 quoted. Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01Qj4hZEe22hsY1FqfbKnnU2 --- ZeroParadox/DieCannotBe.lean | 25 ++++++++++++++++++++----- 1 file changed, 20 insertions(+), 5 deletions(-) diff --git a/ZeroParadox/DieCannotBe.lean b/ZeroParadox/DieCannotBe.lean index 57a3bbfe..335f1708 100644 --- a/ZeroParadox/DieCannotBe.lean +++ b/ZeroParadox/DieCannotBe.lean @@ -1313,6 +1313,11 @@ example {α : Type} : ∀ s : α → α → Prop, (ZeroParadox.Motion.ofTotal id -- section and § XXVII). With a `Prop`-valued step, the instances above share one hypothesis shape and -- one conclusion; whether a selector for every `Prop`-valued step on any of them gives more than weak -- excluded middle is not established here. +-- Reading (cited, not claimed): Bell, J. Phil. Logic 22 (1993), as corrected in Baaz and Zach, +-- arXiv:1907.04477, § 5, p. 13 and fn. 5: intuitionistic ε-calculus with identity derives +-- ¬(B ∧ C) → ¬B ∨ ¬C from ∀x(x = a ∨ ¬x = a) and a ≠ b. Here the ε-term is the selector's value at +-- `u`, the decidable identity is the test `t`, and that De Morgan law is weak excluded middle; an +-- instance of that derivation. /-! ### § XI. The OVER leg's WHETHER — what OVER does at a point -/ #check @ZeroParadox.Motion.NoStepAt -- Statement: no step leaves `y` @@ -4379,10 +4384,18 @@ example : Function.Surjective ZeroParadox.NInf.toRos ↔ ZeroParadox.LPO := #check @ZeroParadox.NInf.allRosolini_of_em -- Statement: excluded middle gives `AllRosolini`; one way #check @ZeroParadox.NInf.em_of_allRosolini_lpo -- Statement: `AllRosolini` and LPO together give excluded middle -- Reading: whether `AllRosolini` alone gives excluded middle, or any taboo, is not established here. +-- Reading (cited, not claimed): `AllRosolini` is Kripke's schema, "all propositions are Rosolini" +-- (Knapp, arXiv:2011.00272, § 5.12, p. 108, with "Kripke's Schema and Markov's Principle together +-- imply excluded middle"), and `BKS⁺` in TypeTopology `NotionsOfDecidability.SemiDecidable` (de Jong, +-- retrieved 2026-11-01), which has `EM→BKS⁺`, `BKS⁺→LPO→EM`, and for `Ω` the analogues of +-- `rosIncl_surjective_iff` (`BKS⁺-in-terms-of-Ωˢᵈ-and-Ω`) and of `toRos_surjective_iff` +-- (`LPO-in-terms-of-𝟚-and-Ωˢᵈ`). -- Statement: backward, each exact map gives a taboo. #check @ZeroParadox.NInf.lpo_of_exactTag -- Statement: `NInf → Option ℕ` with `g x = some n ↔ x = NInf.ofNat n` gives LPO #check @ZeroParadox.NInf.wlpo_of_tag -- Statement: `NInf → Option ℕ` with `g x = none ↔ x = ∞` gives WLPO #check @ZeroParadox.NInf.wlpo_of_discrete_tag -- Statement: `g : NInf → D`, `D` with decidable equality, with `g x = g ∞ ↔ x = ∞` at every `x`, gives WLPO (`[propext, Quot.sound]`) +-- Reading (cited, not claimed): compare `disagreement-taboo'` (discrete `D`) and +-- `basic-discontinuity-taboo`, TypeTopology `Taboos.BasicDiscontinuity` (retrieved 2026-10-29). -- Statement: `wlpo_of_tag`'s conclusion follows from it at `D = Option ℕ`. example (g : ZeroParadox.NInf → Option ℕ) (hg : ∀ x, g x = none ↔ x = ZeroParadox.NInf.infty) : ZeroParadox.WLPO := @@ -4576,9 +4589,9 @@ example (L : ZeroParadox.NInf → Ordinal.{0}) -- as in `wlpo_of_tag` by `Option ℕ`'s; `L` is not claimed to be computable or choice-free. -- Reading (cited, not claimed): Escardó, preprint of JSL 78(3) (2013), § 11, p. 19, citing Coquand, -- Hancock and Setzer's limit structures: they reach `γ`-transfinite iteration for `γ < ε₀` with --- simple types, and "it is not possible to embed ε₀ in 2^ℕ using limit structures"; he neither --- conjectures nor refutes embedding `[0, ε₀]` in `2^ℕ` within HA^ω. `L` is not such an embedding: --- its target is `Ordinal`, not `2^ℕ`, and (vi) uses `classical`. +-- simple types, and "it is not possible to embed ε₀ in 2^ℕ using limit structures"; of embedding +-- `[0, ε₀]` in `2^ℕ` within HA^ω: "We do not dare to conjecture this or its negation". `L` is not +-- such an embedding: its target is `Ordinal`, not `2^ℕ`, and (vi) uses `classical`. -- Reading (cited, not claimed): Escardó, preprint of JSL 78(3) (2013): `NInf` is his `ℕ∞` (p. 1), -- `eps` his selection function (Theorem 3.5, p. 5), `exists_ne_infty_eq_false_or` his Lemma 8.1 by his -- proof (p. 14), `wlpo_of_eqOr_infty` the right-to-left half of his WLPO row (p. 4) and @@ -4605,8 +4618,10 @@ example (L : ZeroParadox.NInf → Ordinal.{0}) -- as `Σ α, isProp ⟨α⟩` (p. 21:7); that presentation is not formalized here. Their Rosolini -- propositions (§ 2.4, p. 21:5) are the definedness of `RosPart`, and `toRos_surjective_iff` relates -- `NInf` to them: `toRos` is onto iff LPO; compare the quoted sentence. There a proposition `A` is --- Rosolini when `∃ α, isProp⟨α⟩ × (A = ⟨α⟩)` with `⟨α⟩ = Σ n, α n = 1`; in `RosPart` the --- existential is a `Prop` and definedness is `↔`, not `=`. The trichotomy route through +-- Rosolini when `∃ α, isProp⟨α⟩ × (A = ⟨α⟩)` with `⟨α⟩ = Σ n, α n = 1` (p. 21:4); in `RosPart` the +-- existential is a `Prop`, definedness is `↔`, not `=`, and `isProp⟨α⟩` (`α` true at most once) is +-- dropped, as in TypeTopology `NotionsOfDecidability.SemiDecidable`, whose `is-semidecidable` "is +-- called isRosolini in [EK2017]" (retrieved 2026-11-01). The trichotomy route through -- `hmap` is constructed here, not from a source. -- `ofOption` is `ι𝟙 : ℕ + 𝟙 → ℕ∞` in TypeTopology's module -- `TypeTopology.GenericConvergentSequence` (retrieved 2026-10-29), which also holds `ℕ∞-density`, From 9bcaab9f5953e20bd20432ba4c20b9c563478051 Mon Sep 17 00:00:00 2001 From: probe Date: Sun, 1 Nov 2026 10:11:02 -0600 Subject: [PATCH 013/182] Die: clear the die landing's carried ordinaries (lane T2) Prior-art round 2: Baaz-Zach page is p. 14; "an instance of that result (Bell 1993 itself not retrieved)". Adversary round 1 (die landing): section X open question scoped to NInf, with two examples showing the Prop-step selector gives LPO on N and Option N; the limit-map example's (vi) is now DecidableEq Ordinal -> WLPO, with a classical CONTROL; "the limit map", NInf.infty named; Escardo section 11 reasons corrected and the quoted inference attributed to Escardo; Escardo-Knapp "correspond to". Lane C carry: section I's UpAndOver inhabitant at Type (HSet 2 dual, with an example), additive; the N-valued registration test landed in section IX with the Computable.const footprint printed and no statement footprint claimed; wlpo_of_isolating_infty docstring restores basic-discontinuity-taboo and the N-infinity-indexed WLPO and names Escardo's JSL paper; survey parenthetical dropped, Sharma marked a locator; touched lines re-flowed to 100. Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01Qj4hZEe22hsY1FqfbKnnU2 --- ZeroParadox/Die.lean | 10 +-- ZeroParadox/DieCannotBe.lean | 129 +++++++++++++++++++++++------------ 2 files changed, 89 insertions(+), 50 deletions(-) diff --git a/ZeroParadox/Die.lean b/ZeroParadox/Die.lean index 754435c0..e738e983 100644 --- a/ZeroParadox/Die.lean +++ b/ZeroParadox/Die.lean @@ -3891,11 +3891,11 @@ namespace NInf /-- `Statement:` if a `Bool` test `t` isolates `∞`, deciding membership in `{∞}`, the weak limited principle of omniscience (WLPO) holds. `Reading:` "isolates": `∞` is isolated (Escardó, - arXiv:2609.10447v3, Def. 3.2, p. 14), as data; compare his Examples 3.3(5) with the `Nonempty` iff - example, whose forward direction this is at the `Prop` level (`ZeroParadox/DieCannotBe.lean` - § XXVII). By `isolating_infty_iff`, `t` satisfies TypeTopology's `basic-discontinuity`, whose - taboo (`Taboos.BasicDiscontinuity`, retrieved 2026-10-29) is his WLPO row with Lemma 3.3 (p. 4, - preprint of JSL 78(3) (2013)). -/ + arXiv:2609.10447v3, Def. 3.2, p. 14), as data; compare his Examples 3.3(5) with the `Nonempty` + iff example (`ZeroParadox/DieCannotBe.lean` § XXVII), of which this is the forward direction at + the `Prop` level. By `isolating_infty_iff`, `t` satisfies TypeTopology's `basic-discontinuity`; + its `basic-discontinuity-taboo` (`Taboos.BasicDiscontinuity`, retrieved 2026-10-29, for the + `ℕ∞`-indexed `WLPO`) is Escardó's WLPO row with Lemma 3.3 (JSL 78(3) (2013), preprint p. 4). -/ theorem wlpo_of_isolating_infty (t : NInf → Bool) (ht : ∀ b, t b = true ↔ b = infty) : ∀ r : ℕ → Bool, (∀ n, r n = false) ∨ ¬ ∀ n, r n = false := fun r => by cases h : t (det r) with diff --git a/ZeroParadox/DieCannotBe.lean b/ZeroParadox/DieCannotBe.lean index 335f1708..418762d1 100644 --- a/ZeroParadox/DieCannotBe.lean +++ b/ZeroParadox/DieCannotBe.lean @@ -103,16 +103,18 @@ example {α : Type} (f : α → α) : IsIdempotentElem (show Function.End α fro -- (p. 26). Neither is imposed here. No counterpart of the switches was located in these two sources -- as of 2026-10-18 (UP is total in both; their text, searched for "partial", "loop" and "cycle", has -- no hit bearing on a switch); the dated search for the pair is in `LEAN_CUSTOM_REGISTRY.md`. The --- loop/climb split has a standard name on transitions: within a corner, labelling each point by its UP --- value, a loop step is a stutter step (Sharma, arXiv:1210.0408, Def. 5, p. 4: "Transition s → s′ ... --- is a stutter step if L(s) = L(s′)"), and a climb step is one that is not; UP is partial here, where a --- Kripke labelling is total. Located 2026-10-31 by theoremsearch only (its null is uninformative on --- its own), three phrasings varied by axis, verbatim: "a rewrite step from a normal form followed by normalization --- returns to the same normal form or reaches a different one" (rewriting vocabulary); "after one --- rule application and renormalization the normal form never returns to the original normal form" --- (polarity: the wording if the split were refused); "stuttering steps versus visible steps of a --- transition system on equivalence classes of states" (concurrency vocabulary); the third returned --- Sharma's definition, retrieved and read at the page cited. No web search is recorded. +-- loop/climb split has a standard name on transitions: within a corner, labelling each point by its +-- UP value, a loop step is a stutter step (Sharma, arXiv:1210.0408, Def. 5, p. 4: "Transition +-- s → s′ ... is a stutter step if L(s) = L(s′)"), and a climb step is one that is not; UP is +-- partial here, where a Kripke labelling is total. Sharma is cited as a locator for the term, not +-- as its origin; no source for its origin was read. Located 2026-10-31 by theoremsearch only, +-- three phrasings varied by axis, verbatim: "a rewrite step from a normal form followed by +-- normalization returns to the same normal form or reaches a different one" (rewriting +-- vocabulary); "after one rule application and renormalization the normal form never returns to the +-- original normal form" (polarity: the wording if the split were refused); "stuttering steps versus +-- visible steps of a transition system on equivalence classes of states" (concurrency vocabulary); +-- the third returned Sharma's definition, retrieved and read at the page cited. No web search is +-- recorded. -- Reading: the adjoined-points switch is a CHOICE OF CARRIER: `Option σ` adjoins one point and -- `Option (Option σ)` two (the `TriStep` example below). `Pointed` and `Bipointed` carry -- distinguished points, not adjoined ones, and `Bipointed`'s two may coincide. @@ -222,11 +224,11 @@ example : ∃ M : ZeroParadox.Motion (Fin 4), -- carrier (one chosen wiring, § XIX `cover_overs_differ`), agree (`toMotion_agree`), so that motion climbs -- and never loops (`toMotion_climb`, `toMotion_not_loop`). `phaseBelowCoverMotion` climbs -- (§ XXIII). On the ℕ∞ model both wirings below loop: wiring one (UP the join with `c`, OVER the --- scale step) if `c ≠ ⊤` of `ℕ∞`; wiring two (UP constant ⊤ of `ℕ∞`, OVER the join step) loops, and --- the loop owes nothing specific to the join: with UP constant ⊤ the always-true step loops too (the --- last CONTROL of this group, after the crossing-with-no-switch `example`). In each wiring, in ℕ∞'s --- own order and in ZP-A's induced order alike, one leg raises and the other lowers (the `example` --- after them). +-- scale step) if `c ≠ ⊤` of `ℕ∞`; wiring two (UP constant ⊤ of `ℕ∞`, OVER the join step) loops, +-- and the loop owes nothing specific to the join: with UP constant ⊤ the always-true step loops too +-- (the last CONTROL of this group, after the crossing-with-no-switch `example`). In each wiring, in +-- ℕ∞'s own order and in ZP-A's induced order alike, one leg raises and the other lowers (the +-- `example` after them). -- Reading: by the ruling above both kinds are legal up-and-over shapes, and the crossing of the joint -- is OVER leaving the set of landings and UP returning to a landing (the `Statement:` above). Tim's -- read, 2026-10-22, verbatim: "My gut reaction is that the joint might fill both of those rolls.. you @@ -240,6 +242,9 @@ example : ∃ M : ZeroParadox.Motion (Fin 4), -- roles coincide in general. And not every crossing is a switch of order: the die motion of any -- `UpAndOver` fires the corner while its legs agree and oppose in neither the carrier's order nor its -- dual (the `example` after that CONTROL), and `UpAndOver` is inhabited (`ordinalUpAndOver`, § V). +-- That inhabitant's carrier, `Ordinal.{u}`, lives in `Type (u+1)`, outside the `{α : Type}` the +-- `example` binds; at `Type` itself, `MemGraph.nonempty_upAndOver_hset2` (§ V) gives an inhabitant +-- on `(HSet 2)ᵒᵈ` (the `example` after the crossing-with-no-switch one). -- Reading: Q1: in the second wiring the loop's landing is the pole, ⊤ of `ℕ∞` (⊥ of the ZP order), which -- steps off the landings and is sent back to itself. Q2: run backwards (`reverse`, which keeps UP), a -- loop is a point `b ≠ y` from which OVER and UP both reach the landing `y`, and a climb one from which @@ -360,6 +365,9 @@ example {α : Type} [PartialOrder α] (U : ZeroParadox.UpAndOver α) : fun h => ?_⟩ · exact hne (le_antisymm (h.1 b (U.up b) (Part.mem_some _)) (U.up.le_closure b)) · exact lt_irrefl _ (lt_of_lt_of_le hb.lt (h.2 y b hb)) +-- Statement: and some `α : Type` carries an `UpAndOver`: `(HSet 2)ᵒᵈ`. +example : ∃ (α : Type) (_ : PartialOrder α), Nonempty (ZeroParadox.UpAndOver α) := + ⟨_, inferInstance, ZeroParadox.MemGraph.nonempty_upAndOver_hset2⟩ -- Statement: CONTROL: with UP constant ⊤ of `ℕ∞`, the always-true step loops too, so the loop kind -- there says nothing specific about the join. example : (ZeroParadox.Motion.ofTotal (fun _ : ℕ∞ => (⊤ : ℕ∞)) (fun _ => rfl) (fun _ _ => True)).Loop := @@ -1093,6 +1101,17 @@ example : ZeroParadox.ordinalTowerMotion.RegisteredDecidable := -- Statement: (a) takes `[Primcodable α]`, and `Ordinal` has no `Primcodable` structure (it is uncountable). example : IsEmpty (Primcodable Ordinal) := ⟨fun h => (Uncountable.not_countable : ¬ Countable Ordinal) (@Encodable.countable _ h.toEncodable)⟩ +-- Statement: (a) with an `ℕ`-valued test in place of the `Bool` one: if UP is total on a +-- `[Primcodable α]` carrier, some computable `d : α → ℕ` has `d a = 1` exactly where UP is +-- defined. The proof, like `registeredComputable_of_upTotal`'s, uses `Computable.const`, whose +-- footprint, printed next, includes `Classical.choice`. +example {α : Type} [Primcodable α] (M : ZeroParadox.Motion α) (h : M.UpTotal) : + ∃ d : α → ℕ, Computable d ∧ ∀ a, d a = 1 ↔ (M.up a).Dom := + ⟨fun _ => 1, Computable.const 1, fun _ => ⟨fun _ => h _, fun _ => rfl⟩⟩ +#check @Computable.const -- Statement: Mathlib, a constant map is computable; its footprint is printed next +#print axioms Computable.const +-- Reading: so this proof's footprint includes `Classical.choice`; no footprint is claimed here for +-- the `ℕ`-valued statement itself. #check @ZeroParadox.no_computable_registration_at_kleene_floor -- Statement: no computable test decides self-halting on `Nat.Partrec.Code` -- Statement: NON-MEMBER of (a): on `Nat.Partrec.Code`, UP defined (and fixing `c`) where `c` halts on -- its own code. @@ -1241,10 +1260,10 @@ example (h : ∀ (α : Type) (M : ZeroParadox.Motion α), M.SelectedData) : -- `PredExt_RelChoice_imp_EM`, which the file marks "kept for backwards compatibility" -- (`pred_ext_and_rel_choice_imp_EM`, through `AC_bool_subset_to_bool`, a functional relation choosing -- in every inhabited subset of `bool`); the current Part A theorem, `prop_ext_and_rel_choice_imp_EM`, --- uses the pairs `(True, P)` and `(P, True)` instead. The file credits Diaconescu 1975 and Lacas and --- Werner 1999. Run on the data side: there relational choice, a `Prop`, gives excluded middle; here a --- selector given as data gives the fragment (the `example` above) and excluded middle directly --- (`Motion.em_of_selectedData`, next line), the latter on that section's own two classes +-- uses the pairs `(True, P)` and `(P, True)` instead. The file credits Diaconescu 1975 and Lacas +-- and Werner 1999. Run on the data side: there relational choice, a `Prop`, gives excluded middle; +-- here a selector given as data gives the fragment (the `example` above) and excluded middle +-- directly (`Motion.em_of_selectedData`, next line), the latter on that section's own two classes -- `b = true ∨ p`, `b = false ∨ p`; an instance of theirs, not a generalization. #check @ZeroParadox.Motion.em_of_selectedData -- Statement: (a) on every motion on every `α : Type` ⇒ excluded middle, directly #check @ZeroParadox.Motion.lpo_of_selectedTotal_nat_boolStep -- Statement: (b) on every motion on `ℕ` with a `Bool`-valued step ⇒ the limited principle of omniscience (`[propext]`) @@ -1311,13 +1330,24 @@ example {α : Type} : ∀ s : α → α → Prop, (ZeroParadox.Motion.ofTotal id -- Reading: with a `Bool`-valued step the three carriers part: `NInf` is a member with no hypothesis -- (`selectedTotal_ninf_boolStep`, § XXVII), and membership on `ℕ` and on `Option ℕ` gives LPO (this -- section and § XXVII). With a `Prop`-valued step, the instances above share one hypothesis shape and --- one conclusion; whether a selector for every `Prop`-valued step on any of them gives more than weak --- excluded middle is not established here. +-- one conclusion. On `ℕ` and on `Option ℕ` the same hypothesis also gives LPO, since a +-- `Bool`-valued step is a `Prop`-valued one (the two `example`s next). On `NInf`, where a +-- `Bool`-valued step has a selector with no hypothesis, whether a selector for every +-- `Prop`-valued step gives more than weak excluded middle is not established here. +-- Statement: if every `Prop`-valued step on `ℕ` has a total selector, LPO holds. +example (H : ∀ s : ℕ → ℕ → Prop, (ZeroParadox.Motion.ofTotal id (fun _ => rfl) s).SelectedTotal) : + ZeroParadox.LPO := + ZeroParadox.Motion.lpo_of_selectedTotal_nat_boolStep fun _ => H _ +-- Statement: if every `Prop`-valued step on `Option ℕ` has a total selector, LPO holds. +example (H : ∀ s : Option ℕ → Option ℕ → Prop, + (ZeroParadox.Motion.ofTotal id (fun _ => rfl) s).SelectedTotal) : + ZeroParadox.LPO := + ZeroParadox.Motion.lpo_of_selectedTotal_option_boolStep fun _ => H _ -- Reading (cited, not claimed): Bell, J. Phil. Logic 22 (1993), as corrected in Baaz and Zach, --- arXiv:1907.04477, § 5, p. 13 and fn. 5: intuitionistic ε-calculus with identity derives +-- arXiv:1907.04477, § 5, p. 14 and fn. 5: intuitionistic ε-calculus with identity derives -- ¬(B ∧ C) → ¬B ∨ ¬C from ∀x(x = a ∨ ¬x = a) and a ≠ b. Here the ε-term is the selector's value at -- `u`, the decidable identity is the test `t`, and that De Morgan law is weak excluded middle; an --- instance of that derivation. +-- instance of that result (Bell 1993 itself not retrieved). /-! ### § XI. The OVER leg's WHETHER — what OVER does at a point -/ #check @ZeroParadox.Motion.NoStepAt -- Statement: no step leaves `y` @@ -4507,13 +4537,13 @@ example (g : Part ℕ → ZeroParadox.NInf) (hg : ∀ o n, g o = ZeroParadox.NIn #check @ZeroParadox.Motion.loopAt_image_iff_leftInverse -- Statement: loops at every `inr (ofOption o)` iff `r` is a left inverse; both directions #check @ZeroParadox.Motion.loopAt_image_iff_loopAt_all -- Statement: loops at every `inr (ofOption o)` iff at every `inr x`; both directions #check @ZeroParadox.Motion.lpo_of_loopAt_image -- Statement: loops at every `inr (ofOption o)` give LPO --- Statement: the limit point into `Ordinal`. If `L : NInf → Ordinal.{0}` is +-- Statement: the limit map `L` into `Ordinal`. If `L : NInf → Ordinal.{0}` is -- `L x = ⨆ n, (if x n then fundamentalSeq (n + 1) else 0)` at every `x`, then: (i) `L` sends --- `NInf.ofNat k` to `fundamentalSeq k`, the `k`-th stage of the ω-tower; (ii) the image of `∞` is --- not ⊥ of `Ordinal` (`epsilon0_ne_bot`), and the image of `NInf.ofNat 0` is; (iii) `L` sends `∞` --- to `epsilonZero`, ε₀; (iv) `L x = ε₀ ↔ x = ∞` at every `x`; (v) on `Option ℕ`, `L ∘ ofOption` is --- the tagged map `none ↦ ε₀`, `some k ↦ fundamentalSeq k`; (vi) WLPO holds, by --- `wlpo_of_discrete_tag` with (iv) and the decidable equality on `Ordinal` that `classical` supplies. +-- `NInf.ofNat k` to `fundamentalSeq k`, the `k`-th stage of the ω-tower; (ii) the image of +-- `NInf.infty` is not ⊥ of `Ordinal` (`epsilon0_ne_bot`), and the image of `NInf.ofNat 0` is; +-- (iii) `L` sends `NInf.infty` to `epsilonZero`, ε₀; (iv) `L x = ε₀ ↔ x = NInf.infty` at every `x`; +-- (v) on `Option ℕ`, `L ∘ ofOption` is the tagged map `none ↦ ε₀`, `some k ↦ fundamentalSeq k`; +-- (vi) any decidable equality on `Ordinal.{0}` gives WLPO, by `wlpo_of_discrete_tag` with (iv). example (L : ZeroParadox.NInf → Ordinal.{0}) (hL : ∀ x, L x = ⨆ n : ℕ, if x.1 n = true then ZeroParadox.fundamentalSeq (n + 1) else 0) : (∀ k, L (ZeroParadox.NInf.ofNat k) = ZeroParadox.fundamentalSeq k) ∧ @@ -4522,7 +4552,7 @@ example (L : ZeroParadox.NInf → Ordinal.{0}) (∀ x, L x = ZeroParadox.epsilonZero ↔ x = ZeroParadox.NInf.infty) ∧ (∀ o : Option ℕ, L (ZeroParadox.NInf.ofOption o) = o.elim ZeroParadox.epsilonZero ZeroParadox.fundamentalSeq) ∧ - ZeroParadox.WLPO := by + (DecidableEq Ordinal.{0} → ZeroParadox.WLPO) := by have mono : Monotone ZeroParadox.fundamentalSeq := (strictMono_nat_of_lt_succ ZeroParadox.fundamentalSeq_strictMono).monotone have zle : ∀ a : Ordinal.{0}, 0 ≤ a := fun a => by rw [← Ordinal.bot_eq_zero]; exact bot_le @@ -4579,19 +4609,27 @@ example (L : ZeroParadox.NInf → Ordinal.{0}) · cases o with | none => exact h2 | some k => exact h1 k - · classical - exact ZeroParadox.NInf.wlpo_of_discrete_tag L fun x => by rw [h2]; exact h3 x + · intro d + exact @ZeroParadox.NInf.wlpo_of_discrete_tag Ordinal.{0} d L fun x => by rw [h2]; exact h3 x +-- Statement: CONTROL: under `classical`, WLPO holds with no `L` at all, so (vi) is stated with its +-- decidable equality as a hypothesis. +example : ZeroParadox.WLPO := by + classical + exact fun r => em _ -- Statement: `epsilonZero` and `fundamentalSeq`, named in `hL` and in (i), (iii), (iv) and (v), each -- depend on `Classical.choice`; their footprints are printed next. #print axioms ZeroParadox.epsilonZero #print axioms ZeroParadox.fundamentalSeq --- Reading: in (vi) the limit point is tagged by the decidable equality `classical` gives `Ordinal`, --- as in `wlpo_of_tag` by `Option ℕ`'s; `L` is not claimed to be computable or choice-free. --- Reading (cited, not claimed): Escardó, preprint of JSL 78(3) (2013), § 11, p. 19, citing Coquand, --- Hancock and Setzer's limit structures: they reach `γ`-transfinite iteration for `γ < ε₀` with --- simple types, and "it is not possible to embed ε₀ in 2^ℕ using limit structures"; of embedding +-- Reading: in (vi) `L` tags `NInf.infty` through a decidable equality on `Ordinal.{0}`, as +-- `wlpo_of_tag` tags it through `Option ℕ`'s; `L` is not claimed to be computable or choice-free. +-- Reading (cited, not claimed): Escardó, preprint of JSL 78(3) (2013), § 11, p. 19: Coquand, +-- Hancock and Setzer's limit structures reach `γ`-transfinite iteration for any `γ < ε₀` in the +-- presence of simple types, and Escardó infers from that ("The argument of the first paragraph +-- shows ...") that "it is not possible to embed ε₀ in 2^ℕ using limit structures"; of embedding -- `[0, ε₀]` in `2^ℕ` within HA^ω: "We do not dare to conjecture this or its negation". `L` is not --- such an embedding: its target is `Ordinal`, not `2^ℕ`, and (vi) uses `classical`. +-- such an embedding: it runs the other way, from `NInf`, a subset of `2^ℕ`, into `Ordinal`, and at +-- `NInf.ofNat k` and `NInf.infty` it takes only the values `fundamentalSeq k` and `epsilonZero` +-- ((i), (iii)). -- Reading (cited, not claimed): Escardó, preprint of JSL 78(3) (2013): `NInf` is his `ℕ∞` (p. 1), -- `eps` his selection function (Theorem 3.5, p. 5), `exists_ne_infty_eq_false_or` his Lemma 8.1 by his -- proof (p. 14), `wlpo_of_eqOr_infty` the right-to-left half of his WLPO row (p. 4) and @@ -4616,13 +4654,14 @@ example (L : ZeroParadox.NInf → Ordinal.{0}) -- `X + 1` and by all propositions is `L X`; § 2.8, pp. 21:6–21:7: "the decidability of Rosolini -- propositions is known as LPO", and the Rosolini structures sit in their `ℕ∞`, presented there -- as `Σ α, isProp ⟨α⟩` (p. 21:7); that presentation is not formalized here. Their Rosolini --- propositions (§ 2.4, p. 21:5) are the definedness of `RosPart`, and `toRos_surjective_iff` relates --- `NInf` to them: `toRos` is onto iff LPO; compare the quoted sentence. There a proposition `A` is --- Rosolini when `∃ α, isProp⟨α⟩ × (A = ⟨α⟩)` with `⟨α⟩ = Σ n, α n = 1` (p. 21:4); in `RosPart` the --- existential is a `Prop`, definedness is `↔`, not `=`, and `isProp⟨α⟩` (`α` true at most once) is --- dropped, as in TypeTopology `NotionsOfDecidability.SemiDecidable`, whose `is-semidecidable` "is --- called isRosolini in [EK2017]" (retrieved 2026-11-01). The trichotomy route through --- `hmap` is constructed here, not from a source. +-- propositions (§ 2.4, p. 21:5) correspond to the definedness of `RosPart`, with the differences +-- stated below, and `toRos_surjective_iff` relates `NInf` to them: `toRos` is onto iff LPO; +-- compare the quoted sentence. There a proposition `A` is Rosolini when +-- `∃ α, isProp⟨α⟩ × (A = ⟨α⟩)` with `⟨α⟩ = Σ n, α n = 1` (p. 21:4); in `RosPart` the existential +-- is a `Prop`, definedness is `↔`, not `=`, and `isProp⟨α⟩` (`α` true at most once) is dropped, +-- as in TypeTopology `NotionsOfDecidability.SemiDecidable`, whose `is-semidecidable` "is called +-- isRosolini in [EK2017]" (retrieved 2026-11-01). The trichotomy route through `hmap` is +-- constructed here, not from a source. -- `ofOption` is `ι𝟙 : ℕ + 𝟙 → ℕ∞` in TypeTopology's module -- `TypeTopology.GenericConvergentSequence` (retrieved 2026-10-29), which also holds `ℕ∞-density`, -- `ι𝟙-dense` and `not-finite-is-∞`. `density` is the two-map form of Escardó's Lemma 3.4, by the From df5a4c9b90ef2ebbe1818e9fd60e3670a5a7058d Mon Sep 17 00:00:00 2001 From: probe Date: Sun, 1 Nov 2026 10:24:12 -0600 Subject: [PATCH 014/182] DieCannotBe: decidable equality on Ordinal gives WEM (adversary r1 ADV-1) The limit-map conjunct (vi) holds with no L: a CONTROL now shows a decidable equality on Ordinal.{0} gives weak excluded middle by deciding the supremum over p of 1 against 0, and the Reading says so. Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01Qj4hZEe22hsY1FqfbKnnU2 --- ZeroParadox/DieCannotBe.lean | 21 ++++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/ZeroParadox/DieCannotBe.lean b/ZeroParadox/DieCannotBe.lean index 418762d1..a9596064 100644 --- a/ZeroParadox/DieCannotBe.lean +++ b/ZeroParadox/DieCannotBe.lean @@ -4611,17 +4611,32 @@ example (L : ZeroParadox.NInf → Ordinal.{0}) | some k => exact h1 k · intro d exact @ZeroParadox.NInf.wlpo_of_discrete_tag Ordinal.{0} d L fun x => by rw [h2]; exact h3 x --- Statement: CONTROL: under `classical`, WLPO holds with no `L` at all, so (vi) is stated with its --- decidable equality as a hypothesis. +-- Statement: CONTROL: under `classical`, WLPO holds with no `L` at all. example : ZeroParadox.WLPO := by classical exact fun r => em _ +-- Statement: CONTROL: a decidable equality on `Ordinal.{0}` gives weak excluded middle with no `L`, +-- deciding `⨆ _ : p, 1 = 0`; so (vi) also holds with no `L`, and its content is its hypothesis. +example (d : DecidableEq Ordinal.{0}) : ZeroParadox.WeakExcludedMiddle := by + intro p + let o : Ordinal.{0} := ⨆ _ : p, (1 : Ordinal.{0}) + have hb : BddAbove (Set.range fun _ : p => (1 : Ordinal.{0})) := Ordinal.bddAbove_of_small + rcases d o 0 with h | h + · refine Or.inr fun hnp => h ?_ + have : IsEmpty p := ⟨hnp⟩ + simp [o] + · refine Or.inl fun hp => ?_ + have h1 : (1 : Ordinal.{0}) ≤ o := le_ciSup hb hp + rw [h] at h1 + exact absurd h1 (by simp) -- Statement: `epsilonZero` and `fundamentalSeq`, named in `hL` and in (i), (iii), (iv) and (v), each -- depend on `Classical.choice`; their footprints are printed next. #print axioms ZeroParadox.epsilonZero #print axioms ZeroParadox.fundamentalSeq -- Reading: in (vi) `L` tags `NInf.infty` through a decidable equality on `Ordinal.{0}`, as --- `wlpo_of_tag` tags it through `Option ℕ`'s; `L` is not claimed to be computable or choice-free. +-- `wlpo_of_tag` tags it through `Option ℕ`'s; unlike `Option ℕ`'s, that decidable equality gives +-- weak excluded middle by itself (the CONTROL above), so (vi) holds with no `L`. `L` is not claimed +-- to be computable or choice-free. -- Reading (cited, not claimed): Escardó, preprint of JSL 78(3) (2013), § 11, p. 19: Coquand, -- Hancock and Setzer's limit structures reach `γ`-transfinite iteration for any `γ < ε₀` in the -- presence of simple types, and Escardó infers from that ("The argument of the first paragraph From b650e587e9bb5777893a0f382b96f23b52782423 Mon Sep 17 00:00:00 2001 From: probe Date: Sun, 1 Nov 2026 11:59:05 -0600 Subject: [PATCH 015/182] Errata integration: eight lanes in one commit, plus Tim's 2026-11-01 fixes Integrates lanes B3 (Loeb), A3 (E03-E05), L1 (choice/EM), L2b (order/valuation), L3b (ordinals), L4b (set theory), L5 (computability) and P3c (Path 3, ZP-E/C/H/M) onto illustrated 50ca2610 as a single non-merge commit. gitRobot merge cannot target a worktree, so single-lane files were copied byte-for-byte from each lane tip (verified by diff against the lane commit) and the overlaps hand-merged: register.md and the README Framework table per row at the higher version; LEAN_CUSTOM_REGISTRY.md (A3 + B3 hunks); ChoiceCannotBe.lean (A3 hunk on the die-side text); scripts/build_zpm.py (P3c's R-M.1, A3's purity-box hunk; A3's AIT paragraph was deleted by P3c, so its re-wording has no site left). ssot.json regenerated from the SJV store; MANIFEST.md regenerated. Fixes ruled by Tim 2026-11-01: - ZP-M IV and companion 5: the code half is the computability fixed point (IsComputationalQuine), met by constant codes, not "weaker than a fixed point". - ZP-M R-M.1 and companion 6: the c0 / 0-of-Q2 correspondence map is "not located as of 2026-11-01", with the search recorded. - ZP-C intro and L-INF box: c0, bottom of MachinePhase, named; ZP-E I "from which" disambiguated. - Miniature.lean: time enters with the occurrence commitment (t_snap_given). - LawvereBridge.md, Incompleteness.md, SnapNucleus.md, Kruskal.md, Surprisal.md, ZeroParadox/README.md: wording per the ruling. Wall.md:19-20 held for Tim (unchanged from L4b). PDFs: ZP-M v1.17 (companion v1.12), ZP-C v1.32, ZP-E v3.68 rebuilt; other lanes' PDFs carried at their lane versions. Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01Qj4hZEe22hsY1FqfbKnnU2 --- .zenodo.json | 2 +- BOTTOMELEMENT.md | 2 +- CLAIMS.md | 2 +- GUIDE.md | 2 +- LEAN_CUSTOM_REGISTRY.md | 6 +- README.md | 26 +- SNAP.md | 6 +- ZP-C_Illustrated_Companion.pdf | Bin 91827 -> 92049 bytes ZP-C_Information_Theory.pdf | Bin 108059 -> 108474 bytes ZP-E_Bridge_Document.pdf | Bin 149281 -> 151334 bytes ZP-E_Illustrated_Companion.pdf | Bin 94894 -> 95483 bytes ZP-G_Category_Theory.pdf | Bin 109348 -> 109751 bytes ZP-H_Categorical_Bridge.pdf | Bin 119663 -> 120172 bytes ZP-J_Illustrated_Companion.pdf | Bin 102709 -> 102774 bytes ZP-K_Computational_Grounding.pdf | Bin 123482 -> 124617 bytes ZP-K_Illustrated_Companion.pdf | Bin 99982 -> 100224 bytes ZP-L_Incomputability_Convergence.pdf | Bin 110141 -> 110257 bytes ZP-M_Illustrated_Companion.pdf | Bin 91262 -> 92223 bytes ZP-M_Kleene_Ordinal_Bridge.pdf | Bin 96739 -> 98262 bytes ZP-N_The_Constructive_Snap.pdf | Bin 93609 -> 94526 bytes ZP-P_The_Fixed_Point_Fork.pdf | Bin 95759 -> 95811 bytes ZP-Q_The_Frame_Change.pdf | Bin 101844 -> 101894 bytes ZP-R_Cross_Category_Fixed_Point.pdf | Bin 108832 -> 108885 bytes ZP-R_Diagonal_Family_Addendum.pdf | Bin 96074 -> 97449 bytes ZP_Choice_Free_Core_Addendum.pdf | Bin 68333 -> 68469 bytes ZeroParadox/Algebra/Wheel.lean | 8 +- ZeroParadox/AxiomProfile.md | 9 +- ZeroParadox/BottomCannotBe.lean | 29 +- ZeroParadox/Category/BottomUndecidable.lean | 4 +- ZeroParadox/Category/Category.lean | 2 +- ZeroParadox/Category/ChoiceCannotBe.lean | 15 +- ZeroParadox/Category/ChoiceCannotBe.md | 23 +- ZeroParadox/Category/DiagonalWitness.lean | 6 +- ZeroParadox/Category/DiagonalWitness.md | 5 +- .../Category/DifferenceGeneratesSystem.lean | 5 +- .../Category/DoubleNegationNucleus.lean | 4 +- ZeroParadox/Category/DoubleNegationNucleus.md | 11 +- .../Category/ExcludedMiddleBridge.lean | 69 +++- ZeroParadox/Category/ExcludedMiddleBridge.md | 38 +- ZeroParadox/Category/Lawvere.lean | 16 +- ZeroParadox/Category/Lawvere.md | 3 +- ZeroParadox/Category/LawvereTaboo.md | 21 +- ZeroParadox/Category/NextTimeCategorical.md | 9 +- ZeroParadox/Category/Node4Generation.md | 15 +- ZeroParadox/Category/SeamFrameChange.lean | 2 +- .../Category/WellFoundedCoalgebra.lean | 23 +- ZeroParadox/ClaimsMirror.lean | 4 +- .../Computability/ChoicePurityInvariant.lean | 5 +- .../Computability/ChoicePurityInvariant.md | 17 +- .../Computability/CodeDataFrameChange.lean | 48 +-- .../Computability/ComputableCrossing.lean | 2 +- .../Computability/ComputableCrossing.md | 5 +- .../Computability/ComputationCannotBe.lean | 29 +- ZeroParadox/Computability/GroundZero.lean | 2 +- ZeroParadox/Computability/GroundZero.md | 8 +- ZeroParadox/Computability/Kleene.lean | 19 +- ZeroParadox/Computability/Kleene.md | 21 +- .../Computability/MarkovNuUniversal.lean | 8 +- ZeroParadox/Computability/Occurrence.lean | 5 +- ZeroParadox/Computability/Occurrence.md | 14 +- .../Computability/OutputSeparates.lean | 12 +- ZeroParadox/Computability/OutputSeparates.md | 3 +- ZeroParadox/Computability/Rice.lean | 2 +- ZeroParadox/Computability/SelfApp.md | 20 +- .../Computability/UniversalChoiceFree.lean | 26 +- ZeroParadox/DiagonalFixedPoint.lean | 2 +- ZeroParadox/Information/Surprisal.md | 14 +- ZeroParadox/MANIFEST.md | 8 +- ZeroParadox/Meta/AxiomLedger.lean | 10 +- ZeroParadox/Miniature.lean | 16 +- ZeroParadox/Multihomed/Boundary.lean | 2 +- ZeroParadox/Multihomed/Boundary.md | 16 +- ZeroParadox/Multihomed/CategoricalBridge.lean | 7 +- ZeroParadox/Multihomed/CategoricalBridge.md | 4 +- ZeroParadox/Multihomed/MC1Bridge.lean | 7 +- ZeroParadox/Multihomed/MC1Bridge.md | 9 +- .../Multihomed/SeparatedSuccession.lean | 11 +- ZeroParadox/Multihomed/SnapFrameChange.lean | 7 +- ZeroParadox/Multihomed/SnapFrameChange.md | 15 +- ZeroParadox/Order/Lattice.lean | 8 +- ZeroParadox/Order/LeastFixedPoint.lean | 18 +- ZeroParadox/Order/LeastFixedPoint.md | 5 +- ZeroParadox/Order/MarkovContractionDual.lean | 35 +- ZeroParadox/Order/OrbitDichotomy.lean | 36 +- ZeroParadox/Order/Snap.lean | 6 +- ZeroParadox/Order/Snap.md | 14 +- ZeroParadox/Order/SnapCannotBe.lean | 2 +- ZeroParadox/Order/WellFoundedObstruct.md | 5 +- ZeroParadox/Ordinal/B6_CanonicalCNF.lean | 4 +- ZeroParadox/Ordinal/CnfBridge.lean | 33 +- ZeroParadox/Ordinal/ConstructiveOrdinals.md | 34 +- ZeroParadox/Ordinal/Epsilon0LeastFP.md | 10 +- ZeroParadox/Ordinal/Epsilon0MinMax.lean | 36 +- ZeroParadox/Ordinal/Epsilon0MinMax.md | 3 - ZeroParadox/Ordinal/Gentzen.lean | 1 + ZeroParadox/Ordinal/Gentzen.md | 11 +- ZeroParadox/Ordinal/Incompleteness.lean | 38 +- ZeroParadox/Ordinal/Incompleteness.md | 48 ++- ZeroParadox/Ordinal/KirbyParis.lean | 2 +- ZeroParadox/Ordinal/Kruskal.md | 31 +- ZeroParadox/Ordinal/NaturalOpsPow.lean | 2 +- .../Ordinal/OrdinalChoiceEssential.lean | 39 +- ZeroParadox/Ordinal/OrdinalChoiceEssential.md | 12 +- ZeroParadox/Ordinal/P8.lean | 2 +- ZeroParadox/Ordinal/PricedInterface.lean | 8 +- ZeroParadox/Ordinal/PricedInterface.md | 14 +- ZeroParadox/Ordinal/SnapNucleus.lean | 24 +- ZeroParadox/Ordinal/SnapNucleus.md | 29 +- .../Ordinal/SnapNucleusConstructive.lean | 12 +- .../Ordinal/SnapNucleusConstructive.md | 13 +- ZeroParadox/Ordinal/SnapSuccession.lean | 2 +- ZeroParadox/Ordinal/SnapSuccession.md | 15 +- ZeroParadox/Ordinal/SyntacticCollapse.md | 7 +- ZeroParadox/README.md | 4 +- ZeroParadox/Reals/OrderedField.lean | 8 +- ZeroParadox/Settheory/APG.lean | 45 ++- ZeroParadox/Settheory/Coalgebra.lean | 6 +- ZeroParadox/Settheory/Curry.md | 9 +- ZeroParadox/Settheory/ForkFrameChange.lean | 11 +- ZeroParadox/Settheory/LawvereBridge.lean | 19 +- ZeroParadox/Settheory/LawvereBridge.md | 21 +- ZeroParadox/Settheory/Loeb.lean | 182 ++++++++- ZeroParadox/Settheory/Loeb.md | 64 +++- ZeroParadox/Settheory/QuineDichotomy.lean | 6 +- ZeroParadox/Settheory/RequirementsGap.lean | 4 +- ZeroParadox/Settheory/SetTheoryAFA.lean | 2 +- ZeroParadox/Settheory/Wall.lean | 20 +- ZeroParadox/Settheory/Wall.md | 58 ++- ZeroParadox/Valuation/ContractionRate.lean | 2 +- ZeroParadox/Valuation/NuRateMatch.lean | 36 +- ZeroParadox/Valuation/PoleCompletion.lean | 6 +- ZeroParadox/Valuation/PoleRegistration.lean | 18 +- ZeroParadox/Valuation/PoleRegistration.md | 32 +- .../Valuation/PricedPadicInterface.lean | 6 +- ZeroParadox/Valuation/RiemannSphere.lean | 6 +- ZeroParadox/Valuation/Scale.lean | 8 +- ZeroParadox/Valuation/ScaleBridge.lean | 11 +- ZeroParadox/Valuation/ScaleBridge.md | 5 +- .../Valuation/SemilatticeInstance.lean | 3 +- ZeroParadox/Valuation/SemilatticeInstance.md | 11 +- ZeroParadox/Vendored/CorpusAudit/Audit.lean | 9 +- ZeroParadox/Vendored/NaturalOps.lean | 1 - fmc.md | 4 +- register.md | 28 +- scripts/build_dictionary_map.py | 2 +- scripts/build_manifest.py | 4 +- scripts/build_snap_map.py | 6 +- scripts/build_zp_choice_free_core.py | 14 +- scripts/build_zpc.py | 28 +- scripts/build_zpc_companion.py | 11 +- scripts/build_zpe.py | 60 +-- scripts/build_zpe_companion.py | 24 +- scripts/build_zpg.py | 13 +- scripts/build_zph.py | 16 +- scripts/build_zpj_companion.py | 9 +- scripts/build_zpk.py | 64 ++-- scripts/build_zpk_companion.py | 24 +- scripts/build_zpl.py | 8 +- scripts/build_zpl_companion.py | 2 +- scripts/build_zpm.py | 104 ++--- scripts/build_zpm_companion.py | 90 +++-- scripts/build_zpn.py | 38 +- scripts/build_zpp.py | 8 +- scripts/build_zpq.py | 8 +- scripts/build_zpr.py | 9 +- scripts/build_zpr_addendum.py | 53 ++- ssot.json | 362 +++++++++++++++++- 167 files changed, 2066 insertions(+), 836 deletions(-) diff --git a/.zenodo.json b/.zenodo.json index b1130ea7..004a5a49 100644 --- a/.zenodo.json +++ b/.zenodo.json @@ -1,6 +1,6 @@ { "title": "The Zero Paradox: A Multi-Framework Mathematical Ontology", - "description": "Licensing: this record is under two licences. The code (the Lean files, build scripts, tooling and configuration, other than the third-party material named below) is licensed under the Apache License, Version 2.0 (LICENSE), the licence named in this record's licence field. The documents (the PDFs at the repository root, every Markdown file except CLAUDE.md and those under tools/ and .claude/, and the site layouts in _layouts/) are licensed under CC BY-NC-ND 4.0 (LICENSE-DOCS). NOTICE states which paths fall under which licence. Third-party material is covered by neither and keeps its own terms: the vendored Lean under ZeroParadox/Vendored/ and the port ZeroParadox/Ordinal/NaturalOpsPow.lean (Apache License, Version 2.0, from their original authors), and the fonts in scripts/fonts/, whose licence texts ship beside them (DejaVu under the Bitstream Vera and Arev font licences, with the DejaVu changes in the public domain; STIX Two under the SIL Open Font License, Version 1.1). A formal mathematical framework, verified sorry-free in Lean 4 + Mathlib across lattice algebra, p-adic topology, information theory, functional analysis, and category theory, whose central theorem T-SNAP proves the shape of the Binary Snap, the step from the bottom element ⊥ of a two-state carrier to the state above it (named ε₀ in that chart), and not that the step occurs: occurrence rests on the framework's occurrence commitment (with DA-1), not on T-SNAP (what T-SNAP is and is not: ZeroParadox/Order/SnapCannotBe.lean, Sections I-II). The step's join is derived from the bottom-element axiom of join-semilattice theory, with no snap-specific axiom, and that a first step above ⊥ exists at all rests on the framework's one substantive modelling commitment, discrete states (AX-B1); T-SNAP depends on no Lean axioms (#print axioms is empty); Classical.choice appears in the realization layers, mostly inherited from Mathlib but not only there, and ZeroParadox/Category/ChoiceCannotBe.lean, Section IV, collects cases, of either provenance, where a general statement proved with choice implies excluded middle or its weak form by a choice-free reduction, with their footprints printed in ZeroParadox/AxiomProfile.lean, Section 0. The formal layers included, each verified sorry-free in Lean 4 + Mathlib, are: ZP-A (lattice algebra), ZP-B (p-adic topology), ZP-C (information theory), ZP-D (functional analysis / state layer), ZP-E (cross-framework synthesis / T-SNAP derivation), ZP-F (counterexamples - the snap fails in all ordered fields), ZP-G (category theory), ZP-H (categorical bridge, with the snap floor realized as genuine functors into the real Mathlib categories TopCat, ModuleCat ℂ, and the Kleisli category of the probability monad), ZP-I (inside zero), ZP-J (self-reference / AFA decoration uniqueness / wheel of fractions - division by zero as a total operation), ZP-K (computational grounding), ZP-L (incomputability convergence / ε₀ as ordinal snap threshold), ZP-M (Kleene-ordinal bridge), ZP-N (the constructive snap - the ε₀ snap rebuilt syntactically from below on ordinal notations, choice-free; ZP-L's ε₀ results, as stated, carry Classical.choice in their statements; the ascent below ε₀ is restated choice-free on ordinal notations, and for ε₀ itself a choice-free Lean restatement of the fixed-point equation and its uniqueness on E0Note sets existence by definition, while a choice-free derivation in Lean of the fixed point on a well-founded carrier, leastness included, was not located as of 2026-10-08, searched as recorded in ZeroParadox/Ordinal/SnapNucleus.md), ZP-P (the fixed-point fork - a synthesis layer: least versus greatest fixed point, i.e. induction / well-founded versus coinduction / non-well-founded closure, with a choice-free Knaster–Tarski fork schema and the diagonal fixed point ⊥ at the collapse seam, where choice enters only the non-well-founded realizations and is inherited from Mathlib), and ZP-Q (the frame-change - the bottom read as both 0 and ∞: the order-theoretic frame-flip universal holds, valuation and categorical per-domain instances are built, and the categorical Lawvere universal meets a proven Cantor wall, with the cross-domain identity a type boundary), and ZP-R (cross-category fixed point - a synthesis / placement layer: the framework's self-application fixed point is a role filled per face, and ZP-R asks where that role is filled by a Lawvere fixed point across three faces: refuted in Set on every carrier except a one-element one (Cantor), free of a monotone obstruction on complete lattices (Knaster–Tarski), with no reflexive object built here and no map from the two-element chain onto its monotone self-maps (the first finite stage of Soto-Andrade and Varela's two-element example, 1984, §2.5, pp. 15–16; the case Y = 2 of Trimble's Cantor theorem for posets; Bergman 2008, Cor. 7), and realized in the computability face (Rogers / Kleene; that this fixed point is a Lawvere instance is cited); Lawvere's theorem is the translation key between the faces formalized here, not a mechanism every face instantiates, and ZP-R conjectures nothing global; its Diagonal Family Addendum maps the faces formalized here by the μ/ν fork - wall faces (Cantor, Russell, Turing, Tarski, Curry) where self-reference cannot close, and floor faces (the Quine atom, the Kleene quine, Löb / Gödel 2nd, Rice) where it does, each fixed point supplied per face - with the unification credited to Lawvere (1969) and Yanofsky (2003) and the contribution the formalization (the engine, the wall faces, and the Quine-atom and Löb / Gödel 2nd floor faces choice-free; the computability floor faces choice-carrying) and its tie to the self-application role). The framework's claims are mapped against established prior art in a 'Convergence with established work' ledger (CLAIMS.md), with credit pointing outward and an honest delta for each, and the claim graph itself is machine-checked (ZeroParadox/ClaimsMirror.lean), each proved status a verified link to a green Lean declaration rather than a label; and a ZP-J Keystone Addendum records two machine-checked investigations of the keystone (the self-referential 'diagonal' fixed point at the floor): a face-by-face Lawvere verdict, and the binary snap as a crossing of the well-foundedness boundary (Taylor; Adámek-Milius-Moss), with the full coalgebraic version flagged open.", + "description": "Licensing: this record is under two licences. The code (the Lean files, build scripts, tooling and configuration, other than the third-party material named below) is licensed under the Apache License, Version 2.0 (LICENSE), the licence named in this record's licence field. The documents (the PDFs at the repository root, every Markdown file except CLAUDE.md and those under tools/ and .claude/, and the site layouts in _layouts/) are licensed under CC BY-NC-ND 4.0 (LICENSE-DOCS). NOTICE states which paths fall under which licence. Third-party material is covered by neither and keeps its own terms: the vendored Lean under ZeroParadox/Vendored/ and the port ZeroParadox/Ordinal/NaturalOpsPow.lean (Apache License, Version 2.0, from their original authors), and the fonts in scripts/fonts/, whose licence texts ship beside them (DejaVu under the Bitstream Vera and Arev font licences, with the DejaVu changes in the public domain; STIX Two under the SIL Open Font License, Version 1.1). A formal mathematical framework, verified sorry-free in Lean 4 + Mathlib across lattice algebra, p-adic topology, information theory, functional analysis, and category theory, whose central theorem T-SNAP proves the shape of the Binary Snap, the step from the bottom element ⊥ of a two-state carrier to the state above it (named ε₀ in that chart), and not that the step occurs: occurrence rests on the framework's occurrence commitment (with DA-1), not on T-SNAP (what T-SNAP is and is not: ZeroParadox/Order/SnapCannotBe.lean, Sections I-II). The step's join is derived from the bottom-element axiom of join-semilattice theory, with no snap-specific axiom, and that a first step above ⊥ exists at all rests on the framework's one substantive modelling commitment, discrete states (AX-B1); T-SNAP depends on no Lean axioms (#print axioms is empty); Classical.choice appears in the realization layers, mostly inherited from Mathlib but not only there, and ZeroParadox/Category/ChoiceCannotBe.lean, Section IV, collects cases, of either provenance, where a general statement proved with choice implies excluded middle or its weak form by a choice-free reduction, with their footprints printed in ZeroParadox/AxiomProfile.lean, Section 0. The formal layers included, each verified sorry-free in Lean 4 + Mathlib, are: ZP-A (lattice algebra), ZP-B (p-adic topology), ZP-C (information theory), ZP-D (functional analysis / state layer), ZP-E (cross-framework synthesis / T-SNAP derivation), ZP-F (counterexamples - the snap fails in all ordered fields), ZP-G (category theory), ZP-H (categorical bridge, with the snap floor realized as genuine functors into the real Mathlib categories TopCat, ModuleCat ℂ, and the Kleisli category of the probability monad), ZP-I (inside zero), ZP-J (self-reference / AFA decoration uniqueness / wheel of fractions - division by zero as a total operation), ZP-K (computational grounding), ZP-L (incomputability convergence / ε₀ as ordinal snap threshold), ZP-M (Kleene-ordinal bridge), ZP-N (the constructive snap - the ε₀ snap rebuilt syntactically from below on ordinal notations, choice-free; ZP-L's ε₀ results, as stated, carry Classical.choice in their statements; the ascent below ε₀ is restated choice-free on ordinal notations, and for ε₀ itself a choice-free Lean restatement of the fixed-point equation and its uniqueness on E0Note sets existence by definition, while a choice-free derivation in Lean of the fixed point on a well-founded carrier whose statements are choice-free, leastness included, was not located as of 2026-10-08 (searched again 2026-10-13), searched as recorded in ZeroParadox/Ordinal/SnapNucleus.md), ZP-P (the fixed-point fork - a synthesis layer: least versus greatest fixed point, i.e. induction / well-founded versus coinduction / non-well-founded closure, with a choice-free Knaster–Tarski fork schema and the diagonal fixed point ⊥ at the collapse seam, where choice enters only the non-well-founded realizations and is inherited from Mathlib), and ZP-Q (the frame-change - the bottom read as both 0 and ∞: the order-theoretic frame-flip universal holds, valuation and categorical per-domain instances are built, and the categorical Lawvere universal meets a proven Cantor wall, with the cross-domain identity a type boundary), and ZP-R (cross-category fixed point - a synthesis / placement layer: the framework's self-application fixed point is a role filled per face, and ZP-R asks where that role is filled by a Lawvere fixed point across three faces: refuted in Set on every carrier except a one-element one (Cantor), free of a monotone obstruction on complete lattices (Knaster–Tarski), with no reflexive object built here and no map from the two-element chain onto its monotone self-maps (the first finite stage of Soto-Andrade and Varela's two-element example, 1984, §2.5, pp. 15–16; the case Y = 2 of Trimble's Cantor theorem for posets; Bergman 2008, Cor. 7), and realized in the computability face (Rogers / Kleene; that this fixed point is a Lawvere instance is cited); Lawvere's theorem is the translation key between the faces formalized here, not a mechanism every face instantiates, and ZP-R conjectures nothing global; its Diagonal Family Addendum maps the faces formalized here by the μ/ν fork - wall faces (Cantor, Russell, Turing, Tarski, Curry) where self-reference cannot close, and floor faces (the Quine atom, the Kleene quine, Löb / Gödel 2nd, Rice) where it does, each fixed point supplied per face - with the unification credited to Lawvere (1969) and Yanofsky (2003) and the contribution the formalization (the engine, the wall faces, and the Quine-atom and Löb / Gödel 2nd floor faces choice-free; the computability floor faces choice-carrying) and its tie to the self-application role). The framework's claims are mapped against established prior art in a 'Convergence with established work' ledger (CLAIMS.md), with credit pointing outward and an honest delta for each, and the claim graph itself is machine-checked (ZeroParadox/ClaimsMirror.lean), each proved status a verified link to a green Lean declaration rather than a label; and a ZP-J Keystone Addendum records two machine-checked investigations of the keystone (the self-referential 'diagonal' fixed point at the floor): a face-by-face Lawvere verdict, and the binary snap as a crossing of the well-foundedness boundary (Taylor; Adámek-Milius-Moss), with the full coalgebraic version flagged open.", "creators": [ { "name": "Brigham, Timothy" diff --git a/BOTTOMELEMENT.md b/BOTTOMELEMENT.md index 78210cc7..47f961a6 100644 --- a/BOTTOMELEMENT.md +++ b/BOTTOMELEMENT.md @@ -326,7 +326,7 @@ The classical self-reference arguments are not separate theorems that happen to | the wall | μ | no well-founded relation admits a self-loop (a host verdict, not an engine face) | [`wf_no_selfloop`](ZeroParadox/Settheory/Wall.lean) | (none) | | Quine atom | ν floor | ⊥ = {⊥}: ⊥ of a ZPSemilattice in the Quine-atom role, from the class fields | [`t_exec`](ZeroParadox/Settheory/SetTheoryAFA.lean) | (none) | | Löb | ν floor | given a Löb diagonal ψ (hypotheses hfix1, hfix2), ⊢ □A → A yields ⊢ A | [`loeb`](ZeroParadox/Settheory/Loeb.lean) | (none) | -| Gödel 2nd | ν floor | given a Löb diagonal for falsum, a consistent system does not prove □falsum → falsum | [`godel_two`](ZeroParadox/Settheory/Loeb.lean) | (none) | +| Gödel 2nd | ν floor | given a Löb diagonal for falsum, a consistent system does not prove □falsum → falsum (Gödel's second theorem when the class is instantiated at a theory of arithmetic and falsum is its falsum; in the class, falsum may be any sentence) | [`godel_two`](ZeroParadox/Settheory/Loeb.lean) | (none) | | Kleene quine | ν floor | every computable self-map on codes has a fixed point up to eval (Rogers' form of the recursion theorem) | [`computability_face_fixedPoint`](ZeroParadox/Category/Lawvere.lean) | `[propext, Classical.choice, Quot.sound]` | | Rice | ν floor | a fixed point up to eval exists; every non-trivial semantic property is undecidable over all codes | [`rice_face_has_bottom`](ZeroParadox/Computability/Rice.lean), [`quine_exists_yet_rice`](ZeroParadox/Computability/Rice.lean) | `[propext, Classical.choice, Quot.sound]` | diff --git a/CLAIMS.md b/CLAIMS.md index d85c4fe9..f038b1c3 100644 --- a/CLAIMS.md +++ b/CLAIMS.md @@ -138,7 +138,7 @@ The framework's set-theoretic *commitment* — the property it assumes of its ho | Item | Status | |------|--------| -| `Classical.choice` necessity (analytic layers and the die) | **Core is choice-free (verified); necessity is settled in the cases listed in `ZeroParadox/Category/ChoiceCannotBe.lean` § IV, given its premise, several analytic-layer statements are STATEMENT-CARRIED by measurement (`ZeroParadox/Category/ChoiceCannotBe.md`; for those the open question is a restatement on a choice-free carrier), and the rest is open.** The central results carry no `Classical.choice` — T-SNAP depends on no axioms at all, and the lattice (ZP-A), the Quine-atom self-reference (ZP-J), and the structural floor are choice-free. Elsewhere it appears mostly where the framework builds on Mathlib's classically-built topology / analysis / ordinal / computability libraries (Tier 3). Two axes, and they are independent: **provenance** (whose declaration spends the choice) and **necessity** (whether any proof could avoid it). Each essential case rests on a choice-free taboo reduction — a reduction that spent choice would establish nothing — and the cases sit on both sides of the provenance axis. `fixedPointFree_of_nontrivial` (`ZeroParadox/Category/Lawvere.lean`) and `botCovered_botIntervalTwo_classical`, `Motion.registeredDecidable_of_classical` and `Motion.selectedTotal_of_classical` (`ZeroParadox/Die.lean`) carry a bare `classical` written in framework source (the last also calls `Classical.choose` directly), so those are **the framework's own**; well-order comparability spends Mathlib's choice in `InitialSeg.total`, so that one is **inherited** — and is essential on its premise (§ IV). **An inherited dependence can be essential**, which is why "inherited" never meant "removable". For everything outside those cases and the statement-carried statements, whether the dependence is forced or merely incidental remains **open**; the one layer classified so far (`PadicTree`, the choice-probe) found it mostly incidental and routable. For the ordinal results, ZP-N restates the ascent choice-free on ONote; the state of the restatement question is in `ZeroParadox/Ordinal/SnapNucleus.md` § Axiom footprint. | +| `Classical.choice` necessity (analytic layers and the die) | **Core is choice-free (verified); necessity is settled in the cases listed in `ZeroParadox/Category/ChoiceCannotBe.lean` § IV, given its premise, several analytic-layer statements are STATEMENT-CARRIED by measurement (`ZeroParadox/Category/ChoiceCannotBe.md`; for those the open question is a restatement on a carrier whose statements are choice-free; for the ε₀ results of `ZeroParadox/Ordinal/Epsilon0MinMax.lean` and `ZeroParadox/Ordinal/SnapNucleus.lean` it has a defined reading in Lean on `E0Note` and a derived one not located as of 2026-10-13, `ZeroParadox/Ordinal/SnapNucleus.md` § Axiom footprint), and the rest is open.** The central results carry no `Classical.choice` — T-SNAP depends on no axioms at all, and the lattice (ZP-A), the Quine-atom self-reference (ZP-J), and the structural floor are choice-free. Elsewhere it appears mostly where the framework builds on Mathlib's classically-built topology / analysis / ordinal / computability libraries (Tier 3). Two axes, and they are independent: **provenance** (whose declaration spends the choice) and **necessity** (whether any proof could avoid it). Each essential case rests on a choice-free taboo reduction — a reduction that spent choice would establish nothing — and the cases sit on both sides of the provenance axis. `fixedPointFree_of_nontrivial` (`ZeroParadox/Category/Lawvere.lean`) and `botCovered_botIntervalTwo_classical`, `Motion.registeredDecidable_of_classical` and `Motion.selectedTotal_of_classical` (`ZeroParadox/Die.lean`) carry a bare `classical` written in framework source (the last also calls `Classical.choose` directly), so those are **the framework's own**; well-order comparability spends Mathlib's choice in `InitialSeg.total`, so that one is **inherited** — and is essential on its premise (§ IV). **An inherited dependence can be essential**, which is why "inherited" never meant "removable". For everything outside those cases and the statement-carried statements, whether the dependence is forced or merely incidental remains **open**; the one layer classified so far (`PadicTree`, the choice-probe) found it mostly incidental and routable. For the ordinal results, ZP-N restates the ascent choice-free on ONote; the state of the restatement question is in `ZeroParadox/Ordinal/SnapNucleus.md` § Axiom footprint. | | OQ-E2: cardinality ↔ semilattice correspondence | **Partially closed — ZP-I T-IZ.** Ordinal indexing Ω = ω forced by the countable binary substrate (ZP-C D4, Q₂ separability, binary alphabet); internal/external perspective relativity is ordinal, not set-theoretically free. The formal connection between specific semilattice structures and specific CH instances remains open. | | DA-3: perspective-relative cardinality | Closed (definitional, via D7 exhaustiveness) / Candidate (DA-3-C1); formal cardinality derivation deferred to OQ-E2. | | Lawvere unification of the diagonal fixed point | **Conjecture / connection, not proved.** That the shared self-referential-fixed-point attribute (Tier 5) is an instance of Lawvere's fixed-point theorem (Lawvere 1969) is a connection, not a ZP result. Yanofsky (2003) restated that theorem in plain set/function terms and unified Cantor, Russell, Gödel, Tarski, Turing, and the recursion theorem (quine) as one scheme - those faces are prior art, cited not claimed. ZP's contribution relative to this literature: candidate faces outside their scope (the 2-adic valuation v₂(0)=∞, ε₀, the wheel), the machine-checked axiom/choice footprint of each face, and the location claim (the Gödel inversion: the Quine-atom and v₂(0)=∞ faces each have their fixed point at their carrier's bottom: the Quine atom is ⊥ of a ZP-A lattice carrying `AFAStructure` (`t_exec`), and 0, the unique fixed point of doubling on ℚ₂ (`q2_unique_fp`), is the least element of ℚ₂ ordered by the 2-adic norm, and the greatest when ℚ₂ is ordered by valuation, where v₂(0)=∞; the ε₀ role never sits at a floor: it is the first landing (a fixed point of the closure) strictly above one. The value `Ordinal.epsilon 0`, lifted as `↑ε₀`, fills the ε₀ role, the first landing strictly above a floor: in `WithBot Ordinal`, above the boundary model's floor placed at the bottom (`phase_epsilon0_isLeast_landing_above_floor`), and in `WithTop Ordinal`, where that floor is placed at the top, the first landing strictly above that order's least element, the snap `↑0` (`phaseTop_epsilon0_isLeast_landing_above_snap`; both `ZeroParadox/Multihomed/BoundaryOrder.lean`). In `Ordinal` that value differs from the bottom role's occupant 0 (`epsilon0_ne_bot`, `epsilon0_ne_zero`)) - a framing, not a theorem. The numerical "one object" identity is retired as ill-typed; MC-1 names the resulting family (Tier 5), strictly weaker than any cross-face unification and well within the "same scheme" Lawvere/Yanofsky establish. See the Convergence section below. **Update (Lawvere):** the Set face is machine-checked - in Set no face carries a Lawvere witness, a point-surjection onto a function space (Cantor obstruction, `no_witness_of_nontrivial`), and run in the other direction the Set-level wall faces (Cantor, Russell, Turing, Tarski, Curry) are instances of the engine by its contrapositive - and Lean proves Rogers' fixed-point theorem classically (`computability_face_fixedPoint`, wrapping Mathlib's recursion theorem). That the computability face is a genuine Lawvere instance, in its multi-valued form (Bauer Thm 5.2), is cited, not proved here: the effective-topos / Turing-category setting, Hyland 1982 and Cockett–Hofstra 2008, is cited at `ZeroParadox/Category/DiagonalWitness.lean`, and the ZP-J Keystone Addendum's Section II box cites the Lawvere-form derivation (Bauer 2017); the cross-face unification into one object is retired as ill-typed (object equality across categories does not typecheck and is not invariant under equivalence); MC-1 is the family. | diff --git a/GUIDE.md b/GUIDE.md index 6d87abdd..3eac304e 100644 --- a/GUIDE.md +++ b/GUIDE.md @@ -12,7 +12,7 @@ For a dictionary and map of ⊥ - the object the whole framework is built on - s ## What This Is -The Zero Paradox proves that an atom above ⊥ of the discrete state chart (a state with nothing between it and ⊥; c₁ in `MachinePhase`) is structurally forced - not assumed - given the framework's discrete state model (a bare join-semilattice alone can be densely ordered, and in a dense order no element has a first step, so there is no such atom; the real numbers are the familiar dense case). The result is machine-verified in Lean 4. The supporting structure examines what happens at the bottom element ⊥ across several mathematical frameworks; each independently locates the same structural constraint. One additional hypothesis per framework is required that is not derivable from that framework's axioms alone - these are catalogued in [Axiomatic Commitments](README.md#axiomatic-commitments) in README.md. +The Zero Paradox proves that an atom above ⊥ of the discrete state chart (a state with nothing between it and ⊥; c₁ in `MachinePhase`) is structurally forced - not assumed - given the framework's discrete state model (a bare join-semilattice alone can be densely ordered, and in a dense order no element has a first step, so there is no such atom; the real numbers are the familiar dense case, and since they have no least element, a dense case with one is the non-negative reals under max, where 0 is least and has no atom above it). The result is machine-verified in Lean 4. The supporting structure examines what happens at the bottom element ⊥ across several mathematical frameworks; each independently locates the same structural constraint. One additional hypothesis per framework is required that is not derivable from that framework's axioms alone - these are catalogued in [Axiomatic Commitments](README.md#axiomatic-commitments) in README.md. Each layer of the proof is internally closed before any cross-framework claim is made. diff --git a/LEAN_CUSTOM_REGISTRY.md b/LEAN_CUSTOM_REGISTRY.md index a2487c5b..241e8d5f 100644 --- a/LEAN_CUSTOM_REGISTRY.md +++ b/LEAN_CUSTOM_REGISTRY.md @@ -80,7 +80,7 @@ Get-ChildItem ZeroParadox -Recurse -Filter *.lean | Select-String -Pattern '\[ZP **Relationship to Mathlib:** No Mathlib analog -**Reason:** Mathlib has no formalization of Kolmogorov complexity. `ZPSurprisal` is an import stub for the I-KC axiom (D7'): it models conditional K-complexity as an abstract `ℕ`-valued morphism assignment. The one field (`surp_id`: identity morphisms have zero surprisal) is the only structurally usable I-KC axiom in the ZP-G theorems; the rest of K-complexity is outside Lean scope. +**Reason:** No formalization of Kolmogorov complexity was located in the pinned Mathlib (`5450b53`) as of 2026-10-04; the search is recorded in `ZeroParadox/Information/Disjunctive.md`. Outside Mathlib, Lean developments define it: AlexeyMilovanov/kolmogorov-complexity-lean (`condK`, `plainK`, commit 28da5139) and facebookresearch/atlas-lean (`K`, commit acf9c1f8), read at their source by a prior-art gate on 2026-10-31 and not elaborated here. The first also defines Martin-Löf randomness (`Kolmogorov.IsMartinLofRandom`, `KolmogorovMathlib/AlgorithmicRandomness/MartinLof.lean`) and proves the Levin–Schnorr theorem (`Kolmogorov.isMartinLofRandom_uniform_iff_le_KPPlain_cantorPrefix`, `KolmogorovMathlib/MonotoneComplexity/LevinSchnorr/Criteria.lean`), source read at commit 28da5139 on 2026-11-01 and not elaborated here. A proof in either development that a Martin-Löf random sequence is disjunctive was not located as of 2026-11-01, searched as follows: code search of the first for "disjunctive" and "infix" (none) and its `docs/SUV_COVERAGE.md` for substring and occurrence entries (none; the nearest is `exists_const_window_true_of_isMartinLofRandomReal`, a `1` in every window of length about `c · log n`, which is not disjunctiveness); code search of the second for "MartinLof" and "Martin-Löf" (none). Uncomputability does not keep K out of Lean (an uncomputable function can be defined noncomputably); leaving it unformalized is this corpus's scope decision. `ZPSurprisal` is an import stub for the I-KC axiom (D7'): it models conditional K-complexity as an abstract `ℕ`-valued morphism assignment. The one field (`surp_id`: identity morphisms have zero surprisal) is the only structurally usable I-KC axiom in the ZP-G theorems; the rest of K-complexity is outside this corpus's Lean scope. --- @@ -256,7 +256,7 @@ The concrete model confirming that `ValuationStructure`'s abstract axioms have a **Relationship to Mathlib:** No Mathlib analog -**Reason:** No modal or provability logic was located in the pinned Mathlib as of 2026-08-30 — searched on three axes (Loeb/GL; Kripke and "modal logic"; provability/derivability): `Kripke` and `modal logic` return nothing, every `GL` hit is `GeneralLinearGroup`, and the `provability` hits are first-order material under `ModelTheory/` plus two incidental doc-comments under `Mathlib/Tactic/`. A minimal typeclass carrying just the Hilbert-Bernays-Loeb apparatus, so that Loeb's theorem can be presented as a face of the diagonal family. +**Reason:** No modal or provability logic was located in the pinned Mathlib as of 2026-08-30 — searched on three axes (Loeb/GL; Kripke and "modal logic"; provability/derivability): `Kripke` and `modal logic` return nothing, every `GL` hit is `GeneralLinearGroup`, and the `provability` hits are first-order material under `ModelTheory/` plus two incidental doc-comments under `Mathlib/Tactic/`. A typeclass carrying the Hilbert-Bernays-Loeb apparatus, so that Loeb's theorem can be presented as a face of the diagonal family. ### `QuineHost` — `ZeroParadox/Settheory/QuineHost.lean` @@ -311,7 +311,7 @@ The concrete model confirming that `ValuationStructure`'s abstract axioms have a **Relationship to Mathlib:** No Mathlib analog -**Reason:** The connector between a `StateTransition`-style step function `σ → Option σ` and the framework's own `natPF_NatListRegime` presentation of the polynomial functor `X ↦ 1 + X`. Mathlib carries both sides — `Computability/StateTransition.lean` and `Data/QPF/Univariate/Basic.lean` — and no map between them, because the two live in unrelated corners of the library. This is that bridge, and it is where the framework's operational face (`Occurrence.lean`) meets its coalgebraic one (`NatListRegime.lean`). The construction itself is standard: reading a partial step function as a `1 + X`-coalgebra is textbook (Jacobs, *Introduction to Coalgebra*, Ch. 2), and no novelty is claimed for it. +**Reason:** The connector between a `StateTransition`-style step function `σ → Option σ` and the framework's own `natPF_NatListRegime` presentation of the polynomial functor `X ↦ 1 + X`. Mathlib carries both sides — `Computability/StateTransition.lean` and `Data/QPF/Univariate/Basic.lean` — and a map between them was not located in the pinned Mathlib (`5450b53`) as of 2026-10-31, searched as follows: Mathlib files mentioning `StateTransition` together with `PFunctor`, `QPF` or `Coalgebra` (none), `Option` under `Data/PFunctor` and `Data/QPF` (none), and one LeanExplore query for a step function `σ → Option σ` read as a `1 + X`-coalgebra (none). The nearest neighbour is `Computation.corec` (`Mathlib/Data/Seq/Computation.lean`), which unfolds a step function `β → α ⊕ β` coinductively into `Computation α`, not into the QPF `Cofix` of `X ↦ 1 + X`. At `α := Unit` its step shape is `stepCoalg`'s `σ → Option σ` up to Mathlib's `Equiv.optionEquivSumPUnit` (`Option σ ≃ σ ⊕ PUnit`) and a swap of the summands, so it is the same kind of unfolding with a different target. A map between `Computation Unit` and that `Cofix`, or a theorem that `Computation` is a final coalgebra, was not located in the pinned Mathlib as of 2026-11-01, searched as follows: `Data/PFunctor` and `Data/QPF` for `Computation`, `Stream'`, `ENat` and `PartENat` (none); `Data/Seq` for `PFunctor`, `QPF`, `Cofix` and `Coalgebra` (none); the whole library for `Computation Unit` (none); two LeanExplore phrasings and theoremsearch (generic `PFunctor.M` / `QPF.Cofix` results only). This is that bridge, and it is where the framework's operational face (`Occurrence.lean`) meets its coalgebraic one (`NatListRegime.lean`). The construction itself is standard: reading a partial step function as a `1 + X`-coalgebra is textbook (Jacobs, *Introduction to Coalgebra*, Ch. 2), and no novelty is claimed for it. ### `streamPF` — `ZeroParadox/Computability/OutputSeparates.lean` diff --git a/README.md b/README.md index 87b080c6..8a17b3bc 100644 --- a/README.md +++ b/README.md @@ -82,27 +82,27 @@ An independent re-check is three commands: `git clone https://github.com/timbrig |------|----------|---------|-------| | [Lattice Algebra](ZP-A_Lattice_Algebra.pdf) | ZP-A | v1.33 | The lattice-algebra foundation: the bottom element ⊥ and the order it induces. | | [p-adic Topology](ZP-B_pAdic_Topology.pdf) | ZP-B | v1.30 | The 2-adic topology: why p = 2, and why departure from ⊥ is irreversible. | -| [Information Theory](ZP-C_Information_Theory.pdf) | ZP-C | v1.26 | The information layer: state distributions, 1-bit cost, unbounded surprisal at ⊥. | +| [Information Theory](ZP-C_Information_Theory.pdf) | ZP-C | v1.32 | The information layer: state distributions, 1-bit cost, surprisal unbounded in depth, and the 2-adic additive valuation ⊤ at the point to which c₀, ⊥ of MachinePhase, corresponds. | | [State Layer](ZP-D_State_Layer.pdf) | ZP-D | v1.19 | The Hilbert-space layer: the snap as an orthogonal shift between states. | -| [Bridge Document](ZP-E_Bridge_Document.pdf) | ZP-E | v3.61 | The bridge: the snap assembled as a derived theorem across the layers. | +| [Bridge Document](ZP-E_Bridge_Document.pdf) | ZP-E | v3.68 | The bridge: the snap assembled as a derived theorem across the layers. | | [The Counterexamples](ZP-F_The_Counterexamples.pdf) | ZP-F | v1.20 | The counterexamples: ordered fields (ℝ, ℚ) where the snap cannot occur. | -| [Category Theory](ZP-G_Category_Theory.pdf) | ZP-G | v1.23 | The categorical layer: ⊥ as initial object, the informational singularity. | -| [Categorical Bridge](ZP-H_Categorical_Bridge.pdf) | ZP-H | v1.27 | The categorical bridge: the snap holding under all four domain functors. | +| [Category Theory](ZP-G_Category_Theory.pdf) | ZP-G | v1.25 | The categorical layer: ⊥ as initial object, the informational singularity. | +| [Categorical Bridge](ZP-H_Categorical_Bridge.pdf) | ZP-H | v1.29 | The categorical bridge: the snap holding under all four domain functors. | | [Native Categories Addendum](ZP-H_Native_Categories_Addendum.pdf) | ZP-H Native Categories Addendum | v1.7 | The snap floor realized inside each framework's native Mathlib category (TopCat, ModuleCat ℂ, KleisliCat PMF). Reads after ZP-H. | | [Inside Zero](ZP-I_Inside_Zero.pdf) | ZP-I | v1.28 | Inside zero: each nowhere-zero 2-adic sequence whose valuation equals a depth index in ℕ that climbs at every step converges to 0 in the 2-adics; reading that limit as an occupant of the ⊥ role, and then as a successor ⊥′, are two further commitments. | | [Self-Reference](ZP-J_Self_Reference.pdf) | ZP-J | v2.14 | Self-reference: ⊥ as the Quine atom, and the AFA structure it requires. | | [AFA Addendum](ZP-J_AFA_Addendum.pdf) | ZP-J AFA Addendum | v1.19 | Decoration uniqueness for finite graphs from the valuation structure alone. Reads after ZP-J. | | [Wheel Addendum](ZP-J_Wheel_Addendum.pdf) | ZP-J Wheel Addendum | v1.9 | The wheel of fractions as a wheel: division by zero made total. Reads after ZP-J. | | [Keystone Addendum](ZP-J_Keystone_Addendum.pdf) | ZP-J Keystone Addendum | v1.27 | The diagonal-fixed-point keystone: the Lawvere face-split (Set face machine-checked, computability face cited) and the snap as a well-foundedness boundary crossing. Reads after ZP-J. | -| [Computational Grounding](ZP-K_Computational_Grounding.pdf) | ZP-K | v1.27 | Computational grounding: the bottom's structural self-containment, with the computational reading carried as a commitment. | -| [Incomputability Convergence](ZP-L_Incomputability_Convergence.pdf) | ZP-L | v1.30 | ε₀ as the exact ordinal threshold the snap is keyed to. (That the snap occurs follows from the occurrence commitment together with DA-1, closed given DP-2.) | -| [Kleene-Ordinal Bridge](ZP-M_Kleene_Ordinal_Bridge.pdf) | ZP-M | v1.13 | The bridge between the Kleene quine and the ε₀ fixed point. | -| [The Constructive Snap](ZP-N_The_Constructive_Snap.pdf) | ZP-N | v2.5 | The constructive companion to ZP-L: the ε₀ snap from below on ordinal notations, choice-free (propext only). Locates ZP-L's classical dependency in Mathlib's order instance, and proves that comparing arbitrary well-orders implies excluded middle (a known taboo, cited to Kraus/Nordvall Forsberg/Xu), so comparability has no choice-free proof given the premise stated in [ChoiceCannotBe.lean](ZeroParadox/Category/ChoiceCannotBe.lean) § IV. Adds a carrier of notations denoting the ordinals up to ε₀, whose crossing into Ordinal is one named map with a measured price. ZP-L's ε₀ results, as stated, carry Classical.choice in their statements (measured 2026-10-08); the ascent below ε₀ is restated choice-free on ordinal notations, and for ε₀ itself a choice-free Lean restatement of the fixed-point equation and its uniqueness on E0Note sets existence by definition, while a choice-free derivation in Lean of the fixed point on a well-founded carrier, leastness included, was not located as of 2026-10-08 ([SnapNucleus.md](ZeroParadox/Ordinal/SnapNucleus.md) § Axiom footprint). | -| [The Fixed-Point Fork](ZP-P_The_Fixed_Point_Fork.pdf) | ZP-P | v1.26 | Synthesis layer: the least-vs-greatest fixed-point fork, generalizing the Foundation/AFA orthogonal-contact-point claim across frameworks. | -| [The Frame-Change](ZP-Q_The_Frame_Change.pdf) | ZP-Q | v1.13 | Synthesis layer (ZP-P sequel): the bottom read as both 0 and ∞, and what that does not settle. The order-theoretic frame-flip universal is proved; the categorical Lawvere universal meets a proven Cantor wall; the cross-domain identity is a type boundary. | -| [Cross-Category Fixed Point](ZP-R_Cross_Category_Fixed_Point.pdf) | ZP-R | v1.20 | Synthesis / placement layer. The framework's self-application fixed point is a role filled per face: in the fork / AFA face by ⊥ of the ZPSemilattice, a fixed point and the only one by the class fields fixed_bot and unique_fp of AbstractSelfApp (selfApp_pinnable), not produced by Lawvere's engine; in the computability face by a Kleene code, with fixed points up to eval (Rogers' form), infinitely many for each partial computable F (fixed_points_infinite). It asks where the role is filled by a Lawvere fixed point across three faces: refuted in Set on every carrier except a one-element one (Cantor), free of a monotone obstruction on complete lattices (Knaster–Tarski), with no reflexive object built here and no map from the two-element chain onto its monotone self-maps (the first finite stage of Soto-Andrade and Varela's two-element example, 1984, §2.5, pp. 15–16; the case Y = 2 of Trimble's Cantor theorem for posets; Bergman 2008, Cor. 7), and realized in the computability face (Rogers/Kleene, the crossing; that Rogers' general form is a Lawvere instance is cited). F1 states what is measured per face; how the faces formalized here relate to Lawvere's theorem is collected in ZP-R Section III, in the box "Lawvere's theorem, face by face", and ZP-R conjectures nothing global. Outside the PDF, the narrower case of computable eval-respecting maps is checked in Lean (hasWitnessRel_evalClass with fixedPoint_of_witnessRel, ZeroParadox/Category/DiagonalWitness.lean). | -| [Diagonal Family Addendum](ZP-R_Diagonal_Family_Addendum.pdf) | ZP-R Diagonal Family Addendum | v1.18 | The faces formalized here of the self-referential relationship, by the μ/ν fork: wall faces (Cantor, Russell, Turing, Tarski, Curry) where self-reference cannot close, and floor faces (Quine atom, Kleene quine, Löb / Gödel 2nd, Rice) where it does, Löb / Gödel 2nd from a hypothesized Löb diagonal; Gödel's first incompleteness sits between the columns and is not formalized here. Lean-witnessed except the Gödel-first row. The self-application fixed point is a role filled per face: in the fork / AFA face by ⊥ of the ZPSemilattice, from the class fields (t_exec); in the computability face by a Kleene code, computability_face_fixedPoint giving every computable self-map on codes a fixed point up to eval (Rogers' form). Reads after ZP-R. | -| [The Choice-Free Core](ZP_Choice_Free_Core_Addendum.pdf) | Choice-Free Core | v1.13 | Framework-wide note: the central results are choice-free (T-SNAP is axiom-free); the framework is not choice-free as a whole - most of its choice is inherited from Mathlib in the analytic realizations, and some is the framework's own. [ChoiceCannotBe.lean](ZeroParadox/Category/ChoiceCannotBe.lean) § IV collects cases, of either provenance, where a general statement proved with choice implies excluded middle or its weak form by a choice-free reduction, and ZeroParadox/AxiomProfile.lean § 0 prints their footprints; for the fixed-point-free case this concerns the general statement over arbitrary types: restricted to carriers with decidable equality it is `[propext]` (fixedPointFree_of_nontrivial_decidable). See CLAIMS.md. Anchored on AxiomProfile.lean. | +| [Computational Grounding](ZP-K_Computational_Grounding.pdf) | ZP-K | v1.31 | Computational grounding: the bottom's structural self-containment, with the computational reading carried as a commitment. | +| [Incomputability Convergence](ZP-L_Incomputability_Convergence.pdf) | ZP-L | v1.32 | ε₀ as the exact ordinal threshold the snap is keyed to. (That the snap occurs follows from the occurrence commitment together with DA-1, closed given DP-2.) | +| [Kleene-Ordinal Bridge](ZP-M_Kleene_Ordinal_Bridge.pdf) | ZP-M | v1.17 | The bridge between the Kleene quine and the ε₀ fixed point. | +| [The Constructive Snap](ZP-N_The_Constructive_Snap.pdf) | ZP-N | v2.7 | The constructive companion to ZP-L: the ε₀ snap from below on ordinal notations, choice-free (propext only). Locates ZP-L's classical dependency in Mathlib's order instance, and proves that comparing arbitrary well-orders implies excluded middle (a known taboo, cited to Kraus/Nordvall Forsberg/Xu), so comparability has no choice-free proof given the premise stated in [ChoiceCannotBe.lean](ZeroParadox/Category/ChoiceCannotBe.lean) § IV. Adds a carrier of notations denoting the ordinals up to ε₀, whose crossing into Ordinal is one named map with a measured price. ZP-L's ε₀ results, as stated, carry Classical.choice in their statements (measured 2026-10-08); the ascent below ε₀ is restated choice-free on ordinal notations, and for ε₀ itself a choice-free Lean restatement of the fixed-point equation and its uniqueness on E0Note sets existence by definition, while a derivation in Lean of the fixed point on a well-founded carrier whose statements are choice-free, leastness included, was not located as of 2026-10-13 ([SnapNucleus.md](ZeroParadox/Ordinal/SnapNucleus.md) § Axiom footprint). | +| [The Fixed-Point Fork](ZP-P_The_Fixed_Point_Fork.pdf) | ZP-P | v1.27 | Synthesis layer: the least-vs-greatest fixed-point fork, generalizing the Foundation/AFA orthogonal-contact-point claim across frameworks. | +| [The Frame-Change](ZP-Q_The_Frame_Change.pdf) | ZP-Q | v1.14 | Synthesis layer (ZP-P sequel): the bottom read as both 0 and ∞, and what that does not settle. The order-theoretic frame-flip universal is proved; the categorical Lawvere universal meets a proven Cantor wall; the cross-domain identity is a type boundary. | +| [Cross-Category Fixed Point](ZP-R_Cross_Category_Fixed_Point.pdf) | ZP-R | v1.22 | Synthesis / placement layer. The framework's self-application fixed point is a role filled per face: in the fork / AFA face by ⊥ of the ZPSemilattice, a fixed point and the only one by the class fields fixed_bot and unique_fp of AbstractSelfApp (selfApp_pinnable), not produced by Lawvere's engine; in the computability face by a Kleene code, with fixed points up to eval (Rogers' form), infinitely many for each partial computable F (fixed_points_infinite). It asks where the role is filled by a Lawvere fixed point across three faces: refuted in Set on every carrier except a one-element one (Cantor), free of a monotone obstruction on complete lattices (Knaster–Tarski), with no reflexive object built here and no map from the two-element chain onto its monotone self-maps (the first finite stage of Soto-Andrade and Varela's two-element example, 1984, §2.5, pp. 15–16; the case Y = 2 of Trimble's Cantor theorem for posets; Bergman 2008, Cor. 7), and realized in the computability face (Rogers/Kleene, the crossing; that Rogers' general form is a Lawvere instance is cited). F1 states what is measured per face; how the faces formalized here relate to Lawvere's theorem is collected in ZP-R Section III, in the box "Lawvere's theorem, face by face", and ZP-R conjectures nothing global. Outside the PDF, the narrower case of computable eval-respecting maps is checked in Lean (hasWitnessRel_evalClass with fixedPoint_of_witnessRel, ZeroParadox/Category/DiagonalWitness.lean). | +| [Diagonal Family Addendum](ZP-R_Diagonal_Family_Addendum.pdf) | ZP-R Diagonal Family Addendum | v1.22 | The faces formalized here of the self-referential relationship, by the μ/ν fork: wall faces (Cantor, Russell, Turing, Tarski, Curry) where self-reference cannot close, and floor faces (Quine atom, Kleene quine, Löb / Gödel 2nd, Rice) where it does, Löb / Gödel 2nd from a hypothesized Löb diagonal; Gödel's first incompleteness sits between the columns and is not formalized here. Lean-witnessed except the Gödel-first row. The self-application fixed point is a role filled per face: in the fork / AFA face by ⊥ of the ZPSemilattice, from the class fields (t_exec); in the computability face by a Kleene code, computability_face_fixedPoint giving every computable self-map on codes a fixed point up to eval (Rogers' form). Reads after ZP-R. | +| [The Choice-Free Core](ZP_Choice_Free_Core_Addendum.pdf) | Choice-Free Core | v1.14 | Framework-wide note: the central results are choice-free (T-SNAP is axiom-free); the framework is not choice-free as a whole - most of its choice is inherited from Mathlib in the analytic realizations, and some is the framework's own. [ChoiceCannotBe.lean](ZeroParadox/Category/ChoiceCannotBe.lean) § IV collects cases, of either provenance, where a general statement proved with choice implies excluded middle or its weak form by a choice-free reduction, and ZeroParadox/AxiomProfile.lean § 0 prints their footprints; for the fixed-point-free case this concerns the general statement over arbitrary types: restricted to carriers with decidable equality it is `[propext]` (fixedPointFree_of_nontrivial_decidable). See CLAIMS.md. Anchored on AxiomProfile.lean. | ### Reading Order (by Specialty) diff --git a/SNAP.md b/SNAP.md index 5921e397..64f169ad 100644 --- a/SNAP.md +++ b/SNAP.md @@ -12,7 +12,7 @@ For the framework's *object*, the bottom element ⊥, see its companion referenc This is a **reference** for the framework's central transition, the **snap** - the one-way move off the bottom element ⊥ into the first structured state, ε₀. It is the companion to [The Bottom Element](BOTTOMELEMENT.md): that page maps the *object* ⊥ (the noun); this page maps the *transition* off it (the verb). Where the bottom dictionary is mostly nouns, this one is mostly verbs - the snap is an action. -It is a **beginning, not a resolution.** What is *proved* is that the snap's shape is derived rather than assumed (that it occurs follows from the occurrence commitment together with DA-1, closed given DP-2), one-way, takes its first step from below, and that the domain snaps form one **family** (MC-1, membership proved per domain); what is *retired* is the reading that they are numerically one object (ill-typed: object equality across categories does not typecheck and is not invariant under equivalence); and what stays *open* is a choice-free proof of ε₀'s leastness on a well-founded carrier, not located as of 2026-10-08 (`ZeroParadox/Ordinal/SnapNucleus.md` § Axiom footprint). The frame-change faces are proved theorems that compose known results, so no new theorem is claimed there; what stays a conjecture is only the abstract cross-domain reading (`Reading:` INVERSION, conjectural) - that they are literally one change of frame (a type boundary) - written up in [ZP-Q](ZP-Q_The_Frame_Change.pdf). +It is a **beginning, not a resolution.** What is *proved* is that the snap's shape is derived rather than assumed (that it occurs follows from the occurrence commitment together with DA-1, closed given DP-2), one-way, takes its first step from below, and that the domain snaps form one **family** (MC-1, membership proved per domain); what is *retired* is the reading that they are numerically one object (ill-typed: object equality across categories does not typecheck and is not invariant under equivalence); and what stays *open* is the derived reading of the choice-free restatement: ε₀'s fixed point, leastness included, derived on a well-founded Lean carrier whose statements are choice-free, not located as of 2026-10-13 (the defined reading, on E0Note, is in Lean; both: `ZeroParadox/Ordinal/SnapNucleus.md` § Axiom footprint). The frame-change faces are proved theorems that compose known results, so no new theorem is claimed there; what stays a conjecture is only the abstract cross-domain reading (`Reading:` INVERSION, conjectural) - that they are literally one change of frame (a type boundary) - written up in [ZP-Q](ZP-Q_The_Frame_Change.pdf). --- @@ -30,7 +30,7 @@ The snap is the framework's one theorem - the one-way departure from ⊥ into th **Proved - a wall: the snap is not one mechanism across categories.** The per-domain frame-flips share a shape, not a single categorical map. In Set (all endofunctions) no nontrivial total type carries a Lawvere fixed-point witness - Cantor forbids it - so the lattice and 2-adic faces are provably not Set-level Lawvere instances ([`nontrivial_lattice_no_witness`](ZeroParadox/Category/Lawvere.lean), [`q2_no_witness`](ZeroParadox/Category/Lawvere.lean)); their ⊥ is a proved fixed point of its own self-map ([`q2_unique_fp`](ZeroParadox/Computability/SelfApp.lean), [`selfApp_fp_set_eq_singleton`](ZeroParadox/Multihomed/SelfAppForkPlace.lean)), carrying the diagonal shape but not a genuine Set-level Lawvere instance. The computability face, by contrast, IS a genuine recursion fixed point ([`computability_face_fixedPoint`](ZeroParadox/Category/Lawvere.lean), Kleene / Rogers) - but it lives in the effective category, where the fixed-point-free DIAGONAL CONSTRUCTION is not admissible. `Reading:` CARRIER - the verdict is category-relative, not a property of the object: the same diagonal shape is refuted in Set and available in the effective setting. That is not the claim that no fixed-point-free computable endomap exists - c |-> Code.pair c c is one - and the fixed point it gets is Rogers', up to eval. Heterogeneous categories, heterogeneous verdicts: what unifies them is the diagonal shape, not one mechanism. The universality that holds is order-theoretic (the fork), not categorical - a proved obstruction. -**The family (proved), the identity (retired), choice-free minimality (open).** The domain snaps form one **family** (MC-1): per-domain membership is proved, the reading that they are *numerically one* transition is retired as ill-typed (object equality across categories does not typecheck and is not invariant under equivalence). Separately, leastness is proved on `Ordinal` ([`epsilon0_min_eq_max`](ZeroParadox/Ordinal/Epsilon0MinMax.lean), with choice); a choice-free proof of it on a well-founded carrier was not located as of 2026-10-08. The choice is carried by the statement, so no re-routing of the proof can remove it; only a restatement whose own statement is choice-free can (`ZeroParadox/Ordinal/SnapNucleus.md` § Axiom footprint). +**The family (proved), the identity (retired), choice-free minimality (open).** The domain snaps form one **family** (MC-1): per-domain membership is proved, the reading that they are *numerically one* transition is retired as ill-typed (object equality across categories does not typecheck and is not invariant under equivalence). Separately, leastness is proved on `Ordinal` ([`epsilon0_min_eq_max`](ZeroParadox/Ordinal/Epsilon0MinMax.lean), with choice); the choice is carried by the statement, so no proof of the statement as written can drop it; restated on a carrier whose statements are choice-free, it has two readings: a defined one, in Lean on [`E0Note`](ZeroParadox/Ordinal/PricedInterface.lean), where the fixed point is unique by theorem and exists by definition ([`e0OmegaPow_fixedpoint_iff`](ZeroParadox/Ordinal/PricedInterface.lean)), and a derived one, on a well-founded Lean carrier with leastness derived, not located as of 2026-10-13 (both, with the search record: `ZeroParadox/Ordinal/SnapNucleus.md` § Axiom footprint; the same-carrier respelling: `ZeroParadox/Category/ChoiceCannotBe.md`, STATEMENT-CARRIED). **A note on the frame-change faces.** [`snap_is_frameflip`](ZeroParadox/Multihomed/SnapFrameChange.lean), [`catseam_is_frameflip`](ZeroParadox/Category/SeamFrameChange.lean), and [`fork_is_frameflip`](ZeroParadox/Settheory/ForkFrameChange.lean) are proved theorems that compose known results (no novelty is claimed); the per-domain frame-flips and the order-theoretic universal hold. What remains a conjecture is only the abstract cross-domain statement "the snap ⊥ → ε₀ IS the change of point of view" - that the faces are literally one change of frame (a type boundary). The formal write-up is the finalized document [ZP-Q The Frame-Change](ZP-Q_The_Frame_Change.pdf) (see register.md for the current version). Note the scope: the DOCUMENT is finalized; the three Lean files above are still marked experimental probes in their own headers, and `SnapFrameChange.lean` carries the cross-domain claim as an explicit open conjecture. "Finalized" refers to the write-up, not to the Lean support. @@ -64,7 +64,7 @@ Each exclusion is either a **proved obstruction** (a Lean-checked wall), a **ret | *numerically one transition across its carriers*. The valuation, categorical, order, and computability snaps form one **family** (MC-1), not one object: each is a member (membership proved per domain), but the reading that they are numerically the same object is **retired** as ill-typed (object equality across categories does not typecheck and is not invariant under equivalence). What they share is the diagonal-fixed-point *shape*, not an identity | *meta (no Lean witness)* | | *a physical, temporal, or causal event*. The framework is silent on physics. The snap is an order and derivation transition, not a process unfolding in time; which specific state emerges first is outside its scope | *meta (no Lean witness)* | | *dependent on a snap-specific axiom*. T-SNAP is derived from the bottom axiom A4 (the join identity ∀ x, ⊥ ∨ x = x) and the framework's commitments; `t_snap_given` states two of them, the start at ⊥ and occurrence at the first step, as its hypotheses. No snap axiom appears anywhere in the development: AX-1 is retired, and that the snap occurs follows from the occurrence commitment together with DA-1, neither of them an axiom | [`t_snap_derived`](ZeroParadox/Order/Snap.lean), [`t_snap_given`](ZeroParadox/Order/Snap.lean) | -| *proved to be a choice-free least fixed point*. Leastness is proved on `Ordinal` (`epsilon0_min_eq_max`, with choice); a choice-free proof of it on a well-founded carrier was not located as of 2026-10-08. The choice is carried by the statement, through Mathlib's `Ordinal` order instance and operations, so no re-routing of the proof can remove it; only a restatement whose own statement is choice-free can (`ZeroParadox/Ordinal/SnapNucleus.md` § Axiom footprint). The from-below ascent on notations is choice-free (`tower_strictMono`) | [`epsilon0_min_eq_max`](ZeroParadox/Ordinal/Epsilon0MinMax.lean), [`epsilonZero_eq_nfp`](ZeroParadox/Ordinal/Gentzen.lean) | +| *proved to be a choice-free least fixed point*. Leastness is proved on `Ordinal` (`epsilon0_min_eq_max`, with choice); the choice is carried by the statement, through Mathlib's `Ordinal` order instance and operations, so no proof of the statement as written can drop it; restated on a carrier whose statements are choice-free, it has two readings: a defined one, in Lean on `E0Note`, where the fixed point is unique by theorem and exists by definition (`e0OmegaPow_fixedpoint_iff`), and a derived one, on a well-founded Lean carrier with leastness derived, not located as of 2026-10-13 (both, with the search record: `ZeroParadox/Ordinal/SnapNucleus.md` § Axiom footprint; the same-carrier respelling: `ZeroParadox/Category/ChoiceCannotBe.md`, STATEMENT-CARRIED). The from-below ascent on notations is choice-free (`tower_strictMono`) | [`epsilon0_min_eq_max`](ZeroParadox/Ordinal/Epsilon0MinMax.lean), [`epsilonZero_eq_nfp`](ZeroParadox/Ordinal/Gentzen.lean) | --- diff --git a/ZP-C_Illustrated_Companion.pdf b/ZP-C_Illustrated_Companion.pdf index a681861788acf9c4e6c448871b1f8ce6442a4175..be887e8f4c5685dfa9b44be7cc0973c5d1989fbd 100644 GIT binary patch delta 8272 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 delta 8062 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 I=c9lA|Gz^vs{jB1 diff --git a/ZP-C_Information_Theory.pdf b/ZP-C_Information_Theory.pdf index 1978de2cad10eef9993412ff833417a5a4d66cb8..7c5ecb8b7bfdc342321edf5d44f79e5f9c674195 100644 GIT binary patch delta 38755 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 diff --git a/ZP-E_Bridge_Document.pdf b/ZP-E_Bridge_Document.pdf index 9fec48724ec7791bf0682026f37157ecc0a1f5de..f1f045e92a2d2456daf3b10d7a33a1e34f7196e3 100644 GIT binary patch delta 79257 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