Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
130 commits
Select commit Hold shift + click to select a range
5920dc0
more lemmas
vihdzp Apr 5, 2026
d95fb2d
start
vihdzp Apr 5, 2026
dadb299
finish
vihdzp Apr 5, 2026
a45d246
Merge branch 'cof_ord' into club
vihdzp Apr 5, 2026
fc7d23c
clubstep
vihdzp Apr 5, 2026
d3c8814
fix
vihdzp Apr 5, 2026
658640c
add of_isEmpty lemmas
vihdzp Apr 5, 2026
a7d7800
simp can prove this
vihdzp Apr 5, 2026
8c14427
Merge branch 'dirsupevenmore' into club
vihdzp Apr 5, 2026
c416722
fodor
vihdzp Apr 6, 2026
88dbbf2
alt name
vihdzp Apr 6, 2026
12f44ab
golf
vihdzp Apr 6, 2026
e86f8bf
Merge branch 'master' into club
vihdzp Apr 22, 2026
cbd1de3
move
vihdzp Apr 22, 2026
45d11af
Merge branch 'club' of https://github.com/vihdzp/mathlib4 into club
vihdzp Apr 22, 2026
07729e2
fix
vihdzp Apr 22, 2026
0bc5c75
rev
vihdzp Apr 22, 2026
6c6ea02
generalize thms
vihdzp Apr 22, 2026
aa246e3
golf
vihdzp Apr 22, 2026
d8617fe
Merge branch 'club' into stat
vihdzp Apr 22, 2026
de6f648
fix
vihdzp Apr 22, 2026
ead304b
fix
vihdzp Apr 22, 2026
0043400
changes
vihdzp Apr 22, 2026
64d2e45
fix
vihdzp Apr 22, 2026
bb06cc9
move
vihdzp Apr 22, 2026
5592974
this too
vihdzp Apr 22, 2026
abfc3cb
fix
vihdzp Apr 22, 2026
47abd1a
here too
vihdzp Apr 22, 2026
df7f90a
only move
vihdzp Apr 22, 2026
a13dc42
add documentation
vihdzp Apr 22, 2026
f15b782
fix
vihdzp Apr 22, 2026
10b5339
finish
vihdzp Apr 22, 2026
7856e26
better diff?
vihdzp Apr 22, 2026
10eb468
of an order
vihdzp Apr 22, 2026
bfb241b
Merge branch 'move' into enum
vihdzp Apr 22, 2026
847bef0
fix
vihdzp Apr 22, 2026
36d3d7a
rephrase
vihdzp Apr 22, 2026
7d39b7e
fix yet again
vihdzp Apr 22, 2026
d25eb9e
new file
vihdzp Apr 22, 2026
55025a7
fix
vihdzp Apr 22, 2026
f0d220a
Merge branch 'master' into club
vihdzp Apr 22, 2026
d62b15d
Merge branch 'master' into enum
vihdzp Apr 22, 2026
d472d5c
fix large import
vihdzp Apr 22, 2026
b27674b
Merge branch 'club' of https://github.com/vihdzp/mathlib4 into club
vihdzp Apr 22, 2026
208d74b
Merge branch 'master' into enum
vihdzp Apr 24, 2026
5400b16
generalize result
vihdzp Apr 24, 2026
5a446de
namespace open
vihdzp Apr 24, 2026
f1b46ac
fix
vihdzp Apr 24, 2026
0fb35f8
Merge branch 'master' into club
vihdzp May 1, 2026
08b5953
link correct PR
vihdzp May 1, 2026
89199f2
Merge branch 'master' into enum
vihdzp May 10, 2026
d680ddf
add instance for cardinal
vihdzp May 10, 2026
1d0cb0f
fix
vihdzp May 10, 2026
48509f6
fix lint
vihdzp May 10, 2026
d22acf3
Merge branch 'master' into enum
vihdzp May 10, 2026
c6c1fcc
Merge branch 'master' into enum
vihdzp May 10, 2026
bfcb9c5
merge
vihdzp May 10, 2026
c39f0f0
Merge branch 'enum' of https://github.com/vihdzp/mathlib4 into enum
vihdzp May 10, 2026
34a6cf9
fix
vihdzp May 10, 2026
44e2cb5
union
vihdzp May 10, 2026
d65b49e
order imports
vihdzp May 10, 2026
f594449
fix import
vihdzp May 10, 2026
883a689
merge
vihdzp May 10, 2026
5a92b58
progress
vihdzp May 10, 2026
8ba3699
fix name
vihdzp May 10, 2026
08cdd4c
Merge branch 'enum' into stat
vihdzp May 10, 2026
a46ea2c
non-dependent version
vihdzp May 10, 2026
9381344
golf
vihdzp May 10, 2026
8fe031f
Merge branch 'master' into club
vihdzp May 12, 2026
272f0ad
Merge branch 'club' into stat
vihdzp May 13, 2026
09d5a39
Merge branch 'master' into club
vihdzp May 13, 2026
5229c35
implicit
vihdzp May 13, 2026
9b0ec71
additions
vihdzp May 13, 2026
740c16a
fix
vihdzp May 14, 2026
cb72a58
Merge branch 'master' into club
vihdzp May 20, 2026
57d79cf
fix
vihdzp May 21, 2026
111f394
Merge branch 'master' into clubqf
vihdzp May 21, 2026
70e1a81
merge
vihdzp May 21, 2026
9e1d762
fix
vihdzp May 21, 2026
c8521e4
more
vihdzp May 22, 2026
4f77cf9
more
vihdzp May 22, 2026
8936782
changes
vihdzp May 22, 2026
b4866a3
ideal
vihdzp May 22, 2026
4810229
start
vihdzp May 22, 2026
41a7add
more
vihdzp May 22, 2026
ee445e0
more
vihdzp May 22, 2026
a8dd560
a lot
vihdzp May 22, 2026
f5ca261
finish
vihdzp May 22, 2026
a33cc54
add result
vihdzp May 22, 2026
bd0eb03
finish
vihdzp May 22, 2026
065fefa
Merge branch 'master' into stat
vihdzp May 22, 2026
eb59dc0
reduce imports
vihdzp May 22, 2026
c727a02
split
vihdzp May 22, 2026
8d9e99f
split
vihdzp May 22, 2026
84e1e9b
golf
vihdzp May 22, 2026
1e4865e
have
vihdzp May 22, 2026
029883e
merge
vihdzp May 22, 2026
e8f0123
merge
vihdzp May 22, 2026
6b9697d
Merge branch 'stat' of https://github.com/vihdzp/mathlib4 into stat
vihdzp May 22, 2026
2e5e8ea
fix
vihdzp May 22, 2026
415ba66
start
vihdzp May 22, 2026
87bba65
more
vihdzp May 22, 2026
9acee7f
finish
vihdzp May 22, 2026
3b05026
not using yet
vihdzp May 22, 2026
e656067
revert
vihdzp May 22, 2026
122721a
more theorems
vihdzp May 23, 2026
8de73c0
spacing
vihdzp May 23, 2026
5b7dd80
generalize
vihdzp May 23, 2026
33bf921
evenmore
vihdzp May 23, 2026
1d05495
suggestion
vihdzp May 23, 2026
e7cb9be
suggestions
vihdzp May 24, 2026
0746b29
suggestion
vihdzp May 24, 2026
c2500f9
merge
vihdzp May 24, 2026
a7301dc
why is this here
vihdzp May 24, 2026
5a8bb30
Merge branch 'statminusminusminus' into statminusminus
vihdzp May 24, 2026
b47b27e
merge
vihdzp May 24, 2026
641b2f4
merge
vihdzp May 24, 2026
4dceff8
merge
vihdzp May 24, 2026
545b843
minimize imports
vihdzp May 27, 2026
7564dfc
merge
vihdzp May 27, 2026
614e0eb
fix
vihdzp May 27, 2026
ef3b156
fix
vihdzp May 27, 2026
1efd839
fi
vihdzp May 27, 2026
0976e02
revert
vihdzp May 27, 2026
19e586a
minimize
vihdzp May 27, 2026
362b6b6
fix
vihdzp Jun 22, 2026
b6aff06
fix merge
vihdzp Jun 22, 2026
b82840f
style
vihdzp Jun 22, 2026
7c639dc
wikidata
vihdzp Jun 22, 2026
8319de3
Update wording
vihdzp Jun 22, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
76 changes: 70 additions & 6 deletions Mathlib/SetTheory/Cardinal/Cofinality/Club.lean
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,8 @@ Authors: Violeta Hernández Palacios
-/
module

public import Mathlib.Order.DirSupClosed
public import Mathlib.Order.IsNormal
public import Mathlib.SetTheory.Cardinal.Cofinality.Basic
public import Mathlib.SetTheory.Cardinal.Cofinality.Enum
public import Mathlib.SetTheory.Cardinal.Cofinality.Ordinal

/-!
# Club sets and stationary sets
Expand All @@ -29,10 +28,12 @@ public section

universe u v

open Cardinal Order Set
open Cardinal Order Ordinal Set

variable {α : Type v} {s t : Set α} {x : α} [LinearOrder α]

/-! ### Club sets -/

/-- A club set is closed under suprema and cofinal. -/
structure IsClub {α : Type*} [LinearOrder α] (s : Set α) where
/-- Club sets are closed under suprema. If `α` is a well-order with the order topology, this
Expand Down Expand Up @@ -68,6 +69,10 @@ theorem csSup_mem {α} [ConditionallyCompleteLinearOrder α] {s t : Set α}
(hs : IsClub s) (ht : t ⊆ s) (ht₀ : t.Nonempty) (ht₁ : BddAbove t) : sSup t ∈ s :=
hs.isLUB_mem ht ht₀ (isLUB_csSup ht₀ ht₁)

theorem ciSup_mem {α} [ConditionallyCompleteLinearOrder α] {ι} {f : ι → α} [Nonempty ι]
{s : Set α} (hs : IsClub s) (ht : .range f ⊆ s) (ht' : BddAbove (.range f)) : ⨆ i, f i ∈ s :=
hs.csSup_mem ht (Set.range_nonempty _) ht'

theorem sInter_of_orderTop {s : Set (Set α)} [OrderTop α] (hs : ∀ x ∈ s, IsClub x) :
IsClub (⋂₀ s) := by
refine ⟨.sInter fun x hx ↦ (hs x hx).dirSupClosed, ?_⟩
Expand Down Expand Up @@ -129,7 +134,7 @@ theorem sInter_of_countable {s : Set (Set α)} (hα : cof α ≠ ℵ₀) (hsα :
(hs : ∀ x ∈ s, IsClub x) : IsClub (⋂₀ s) := by
obtain hα | hα := hα.lt_or_gt
· apply IsClub.sInter_of_cof_le_one _ hs
rwa [← cof_lt_aleph0_iff]
rwa [← Order.cof_lt_aleph0_iff]
· apply IsClub.sInter hα.ne' (hα.trans_le' _) hs
rwa [le_aleph0_iff_set_countable]

Expand All @@ -142,6 +147,50 @@ theorem iInter_of_countable {ι : Sort*} {f : ι → Set α} [Countable ι] (hα
protected theorem inter (hα : cof α ≠ ℵ₀) (hs : IsClub s) (ht : IsClub t) : IsClub (s ∩ t) := by
simpa [hs, ht] using IsClub.sInter_of_countable (s := {s, t}) hα

/-- Club sets are closed under diagonal intersections. -/
protected theorem diag [IsRegularCardinalOrder α] {f : α → Set α} (hα : cof α ≠ ℵ₀)
(hf : ∀ a, IsClub (f a)) : IsClub {a | ∀ b < a, a ∈ f b} where
Comment on lines +151 to +152

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What's diagonal about this? Mayve worth giving the lemma a more syntactic name?

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It's called diagonal intersection in Kunen's book (page 220).
Image

dirSupClosed t ht ht₀ _ a ha b hb := by
obtain ⟨c, hc, hbc, -⟩ := ha.exists_between hb
apply (hf b).isLUB_mem _ ⟨c, _⟩ (ha.inter_Ici_of_mem hc) <;> grind
isCofinal a := by
obtain hα | hα := hα.lt_or_gt
· rw [Order.cof_lt_aleph0_iff, cof_eq_cardinalMk, le_one_iff_subsingleton] at hα
use a
simp
have : Nonempty α := ⟨a⟩
have := (noTopOrder_iff_noMaxOrder α).1 <| one_lt_cof_iff.1 (one_lt_aleph0.trans hα)
have (b : α) : ∃ c ∈ ⋂₀ (f '' Set.Iio b), b < c := by
obtain ⟨b', hb'⟩ := exists_gt b
have ⟨c, hc, hbc⟩ :=
(IsClub.sInter (s := f '' Set.Iio b) hα.ne' (mk_image_le.trans_lt ?_) ?_).isCofinal b'
· exact ⟨c, hc, hb'.trans_le hbc⟩
· simp
· simp [hf]
choose g hg using this
have hgm : StrictMono fun n ↦ g^[n] a := by
apply strictMono_of_lt_add_one fun n _ ↦ ?_
rw [← n.succ_eq_add_one, g.iterate_succ_apply']
exact (hg _).2
have hg' : IsLUB (.range fun n ↦ g^[n] a) (⨆ n, g^[n] a) := by
refine isLUB_ciSup (.of_not_isCofinal fun h ↦ ?_)
apply (Order.cof_le h).not_gt (hα.trans_le' _)
simpa using mk_range_le_lift (f := fun n ↦ g^[n] a)
refine ⟨⨆ n, g^[n] a, fun b hb ↦ ?_, hg'.1 ⟨0, rfl⟩⟩
obtain ⟨_, ⟨n, rfl⟩, hb, hn⟩ := hg'.exists_between hb
apply (hf b).isLUB_mem _ _ (hg'.inter_Ici_of_mem ⟨n + 1, rfl⟩)
· rintro _ ⟨⟨m, rfl⟩, hm⟩
rw [Set.mem_Ici, hgm.le_iff_le, Nat.add_one_le_iff] at hm
cases m with
| zero => contradiction
| succ m =>
simp_rw [g.iterate_succ_apply']
rw [Nat.lt_add_one_iff] at hm
simp_rw [Set.sInter_image, Set.mem_iInter] at hg
exact (hg _).1 _ (hb.trans_le <| hgm.monotone hm)
· use g^[n + 1] a
simp [- Function.iterate_succ]

theorem _root_.Order.IsNormal.isClub_range {f : α → α} (hf : IsNormal f) : IsClub (.range f) :=
⟨hf.dirSupClosed_range, fun x ↦ ⟨_, ⟨x, rfl⟩, hf.strictMono.le_apply⟩⟩

Expand Down Expand Up @@ -260,7 +309,7 @@ theorem isStationary_sUnion_iff_of_countable {s : Set (Set α)} (hα : cof α
(hsα : s.Countable) : IsStationary (⋃₀ s) ↔ ∃ x ∈ s, IsStationary x := by
obtain hα | hα := hα.lt_or_gt
· apply isStationary_sUnion_iff_of_cof_le_one
rwa [← cof_lt_aleph0_iff]
rwa [← Order.cof_lt_aleph0_iff]
· apply isStationary_sUnion_iff hα.ne' (hα.trans_le' _)
rwa [le_aleph0_iff_set_countable]

Expand All @@ -273,4 +322,19 @@ theorem isStationary_union_iff (hα : cof α ≠ ℵ₀) :
IsStationary (s ∪ t) ↔ IsStationary s ∨ IsStationary t := by
simpa using isStationary_sUnion_iff_of_countable (s := {s, t}) hα

/-- **Fodor's lemma**, or the **pressing down lemma**: if `α` has the order type of a regular
cardinal, `s` is a stationary set, and `f : α → α` is a regressive function on `s`, there exists
some stationary subset of `s` on which `f` is constant. -/
@[wikidata Q1119050]
theorem exists_isStationary_preimage_singleton [IsRegularCardinalOrder α] {f : α → α}
Comment thread
vihdzp marked this conversation as resolved.
(hα : cof α ≠ ℵ₀) (hs : IsStationary s) (hf : ∀ x ∈ s, f x < x) :
∃ a, IsStationary (s ∩ f ⁻¹' {a}) := by
unfold IsStationary
by_contra!
choose g hg using this
simp_rw [Set.eq_empty_iff_forall_notMem] at hg
obtain ⟨a, hs, ha⟩ := hs <| .diag hα fun a ↦ (hg a).1
apply (hg (f a)).2 a
grind

end WellFoundedLT
1 change: 1 addition & 0 deletions Mathlib/SetTheory/Ordinal/Basic.lean
Original file line number Diff line number Diff line change
Expand Up @@ -1207,6 +1207,7 @@ theorem card_typein_lt {r : α → α → Prop} [IsWellOrder α r] (x : α) (h :
rw [← lt_ord, h]
apply typein_lt_type

@[simp]
theorem mk_Iio_lt [LinearOrder α] [WellFoundedLT α] (i : α) (h : ord #α = typeLT α) :
#(Iio i) < #α :=
card_typein_lt (r := LT.lt) i h
Expand Down
Loading