Skip to content

ε₀ on ThetaNote and ThetaWNoteD: least fixed point of ω^· and supremum of the ω-tower - #2

Open
timbrigham wants to merge 3 commits into
MaxWellApexLab:mainfrom
timbrigham:theta0-zero-least-fixed-point
Open

timbrigham wants to merge 3 commits into
MaxWellApexLab:mainfrom
timbrigham:theta0-zero-least-fixed-point

Conversation

@timbrigham

Copy link
Copy Markdown

Two small modules, one per ϑ-notation, stating that ϑ 0 (on ThetaNote) and ϑ₀ 0 (on ThetaWNoteD) are the least fixed point of the notation's own omegaPow and the supremum of the ω-tower over 0. Full lake build and scripts/AxiomCheck.lean pass on top of 53db882. Feel free to rename, move, or close.

New declarations, in Ordinal/Theta/EpsilonZero.lean and Ordinal/ThetaW/EpsilonZero.lean (namespaces ThetaNote / ThetaWNoteD):

  • isLeast_epsilonZero : IsLeast {a | omegaPow a = a} epsilonZero
  • lt_epsilonZero_iff : a < epsilonZero ↔ ∃ m, a < omegaTower m zero (reuses omegaTower from HullCofinal.lean)
  • supporting lemmas: omegaPow_epsilonZero, epsilonZero_le_of_omegaPow_eq, omegaPow_ne_self_of_lt_epsilonZero, omegaTower_zero_lt_epsilonZero, exists_lt_omegaTower_of_lt_epsilonZero

How. Leastness rests on a raw-term lemma, ThetaTerm.theta_zero_le_of_ofList_eq / ThetaWTerm.theta_zero_zero_le_of_ofList_eq: if ofList [t] = t then ϑ 0 ≤ t, with no normal-form or domain hypothesis. It is a case split on t using the existing order clauses (theta_lt_Omega(_iff), theta_lt_theta_of_lt, theta_lt_theta_of_lt_level), and does not use well-foundedness. The supremum is by induction on term length: a notation below ϑ 0 is not principal, so it is a Cantor sum whose entries are each below some tower stage (lt_prin_iff, lt_omegaPow_iff).

Other changes: two import lines in OrdinalAnalysis.lean, six #guard_msgs entries in scripts/AxiomCheck.lean, and a mention of each file in the README. The four bundled theorems print [propext, Classical.choice, Quot.sound]. The two raw-term lemmas print [propext, Quot.sound], and their #guard_msgs entries fix that axiom set.

Also checked: the six declarations pinned in AxiomCheck.lean pass nanoda on a lean4export (v4.33.0) export of those names, with the two raw-term lemmas checked with Classical.choice left out of permitted_axioms.

I didn't find a declaration that names the ε₀ term on either ϑ-notation or states either property, but I may have missed one.

Claude wrote this PR (the proofs and this description) at my direction. — Tim

timbrigham and others added 3 commits October 9, 2026 11:28
… supremum of the omega-tower over 0

New module OrdinalAnalysis/Ordinal/ThetaW/EpsilonZero.lean. On the domained multi-level
theta-notation, isLeast_epsilonZero shows that theta_0 0 is the least fixed point of omegaPow,
and lt_epsilonZero_iff shows that a notation lies below theta_0 0 exactly when it lies below
some stage omegaTower m 0. Both are stated against the notation's own order and omegaPow,
reuse omegaTower from HullCofinal.lean, and do not use well-foundedness. The two theorems
are added to scripts/AxiomCheck.lean and the README's ThetaWNoteD paragraph mentions them.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FJrffXdNS9Weh7DwnUt9PV
…e omega-tower; raw-term leastness on both notations

New module OrdinalAnalysis/Ordinal/Theta/EpsilonZero.lean, the one-level counterpart of
Ordinal/ThetaW/EpsilonZero.lean: ThetaNote.isLeast_epsilonZero and
ThetaNote.lt_epsilonZero_iff. On both notations leastness now rests on a raw-term lemma,
ThetaTerm.theta_zero_le_of_ofList_eq and ThetaWTerm.theta_zero_zero_le_of_ofList_eq
(ofList [t] = t implies theta 0 <= t, with no normal-form or domain hypothesis), proved by
cases from the existing order clauses; both use only propext and Quot.sound. The import, the
AxiomCheck entries (raw lemmas pinned at [propext, Quot.sound]) and a README mention are added.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FJrffXdNS9Weh7DwnUt9PV
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FJrffXdNS9Weh7DwnUt9PV
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