Skip to content

Gentzen: ≺ has order type exactly ε₀ - #1

Closed
gotrevor wants to merge 4 commits into
order-type-pin-basefrom
order-type-pin
Closed

gotrevor wants to merge 4 commits into
order-type-pin-basefrom
order-type-pin

Conversation

@gotrevor

@gotrevor gotrevor commented Sep 27, 2026 •

Copy link
Copy Markdown
Owner

[ Claude wrote this PR, the proof and this description, at my direction. ]

gentzen_theorem concludes |PA| = ε₀ in its docstring, but nothing in the repo states that ≺ has order type ε₀; that reading rests on precN_code_iff plus mathlib's NONote. This adds Gentzen/OrderType.lean, which makes it a theorem:

theorem precF_type_eq_epsilon0 : Ordinal.type precF = ε₀

where precF is PrecStandard.precN on its field {n : ℕ // isNF n}. Also gentzen_theorem_with_order_type (the conjunction), and precF_iff_eval_precCode, which ties precF to the exact precCode spelling in gentzen_theorem.

Route: nonoteCode is an order iso NONote ≃ field (from precN_code_iff and isNF_iff_exists_nonote), and NONote.repr is an order iso onto Iio ε₀. The surjectivity half isn't in mathlib; it's adapted from goodstein-independence (credited in the file header). New file plus one import line plus AxiomCheck pins; lake build green on 87baec7.

Happy to adjust names or placement to your taste.

Our goodstein-independence repo proves Goodstein / Hydra / Paris-Harrington independence on mathlib's ONote too, and your InternalONote looks like it shares ancestry with a wip file of ours, so there may be more to connect.

gotrevor and others added 4 commits September 27, 2026 17:53
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
`gentzen_theorem` is stated about the coded ordering `≺` and read as
`|PA| = ε₀`, but nothing in the repo said `≺` has order type ε₀.  New
`Gentzen/OrderType.lean` says it, sorry-free:

  precF_type_eq_epsilon0 : Ordinal.type precF = ε₀

where `precF` is `PrecStandard.precN` restricted to its field
`{n : ℕ // isNF n}`.  `CodeSurj.isNF_iff_exists_nonote` gives
surjectivity of `nonoteCode` onto the field and `precN_code_iff` gives
both order-preservation and (via trichotomy) injectivity, so `codeIso`
is an order iso `(NONote, <) ≃r (Field, precF)`.  The missing input,
`Set.range NONote.repr = Set.Iio ε₀`, is not in mathlib and is proved
here (adapted from gotrevor/goodstein-independence, Apache 2.0),
yielding `reprIso : NONote ≃o Set.Iio ε₀` and `typeLT NONote = ε₀`.

Also `precF_iff_eval_precCode`, pinning `precF` to the literal
`precAt precCode` spelling `gentzen_theorem` uses, and the corollary
`gentzen_theorem_with_order_type`.  Two AxiomCheck pins added.

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

gotrevor commented Oct 6, 2026

Copy link
Copy Markdown
Owner Author

Upstream MaxWellApexLab#1 was closed.

@gotrevor gotrevor closed this Oct 6, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant