Skip to content

Commit 5d33eb9

Browse files
committed
add
1 parent 9810898 commit 5d33eb9

1 file changed

Lines changed: 71 additions & 1 deletion

File tree

Mathlib/SetTheory/Cardinal/Pigeonhole.lean

Lines changed: 71 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ public section
2222

2323
open Order Ordinal Set
2424

25-
universe u
25+
universe u v
2626

2727
namespace Cardinal
2828

@@ -125,3 +125,73 @@ theorem le_range_of_union_finset_eq_univ {α β : Type*} [Infinite β] (f : α
125125
le_range_of_union_finset_eq_univ
126126

127127
end Cardinal
128+
129+
open Cardinal
130+
131+
/-- **Δ-system lemma**: every uncountable family of finite sets must contain an uncountable
132+
Δ-system, i.e. an uncountable subfamily that share the same pairwise intersection. -/
133+
theorem Uncountable.exists_uncountable_pairwise_inter_eq {α : Type u} {ι : Type v} [DecidableEq α]
134+
[Uncountable ι] (f : ι → Finset α) :
135+
∃ (s : Set ι) (t : Finset α), Uncountable s ∧ s.Pairwise (f · ∩ f · = t) := by
136+
suffices ∀ (s : Set ι) (n : ℕ), (∀ i ∈ s, (f i).card = n) → Uncountable s →
137+
∃ s' ⊆ s, ∃ (t : Finset α), Uncountable s' ∧ s'.Pairwise (f · ∩ f · = t) by
138+
rcases exists_uncountable_fiber (fun i => ULift.up (f i).card) (by simp) (by infer_instance)
139+
with ⟨⟨n⟩, h⟩
140+
rcases this _ n (by grind) h with ⟨s', -, t, hs, ht⟩
141+
exact ⟨s', t, hs, ht⟩
142+
intro s n hn hs
143+
induction n generalizing f s with
144+
| zero =>
145+
exact ⟨s, subset_rfl, ∅, hs, fun i hi j hj hij => by grind⟩
146+
| succ n ih =>
147+
by_cases h : ∀ a, Countable {i ∈ s | a ∈ f i}
148+
· let g : Ordinal.{v} → ι := WellFoundedLT.fix fun j ih =>
149+
Classical.epsilon fun i => i ∈ s ∧ ∀ k (hk : k < j), f i ∩ f (ih k hk) = ∅
150+
have hg : ∀ j < ω₁, g j ∈ s ∧ ∀ k < j, f (g j) ∩ f (g k) = ∅ := by
151+
intro j hj
152+
have hg : g j = Classical.epsilon fun i => i ∈ s ∧ ∀ k (hk : k < j), f i ∩ f (g k) = ∅ := by
153+
simp only [g]
154+
rw [WellFoundedLT.fix_eq]
155+
suffices {i ∈ s | ∀ k (hk : k < j), f i ∩ f (g k) = ∅}.Nonempty by
156+
simp only [nonempty_def, mem_setOf_eq] at this
157+
apply Classical.epsilon_spec at this
158+
rw [← hg] at this
159+
exact this
160+
apply Uncountable.nonempty
161+
rw [setOf_and, setOf_mem_eq, ← diff_compl, ← diff_self_inter]
162+
apply hs.to_set.diff
163+
simp_rw [compl_setOf, not_forall, setOf_exists, ← mem_Iio, inter_iUnion₂]
164+
apply Countable.biUnion
165+
· rwa [← le_aleph0_iff_set_countable, mk_Iio_ordinal, lift_le_aleph0, ← lt_succ_iff,
166+
succ_aleph0, ← lt_ord, ord_aleph]
167+
· intro a ha
168+
simp_rw [Finset.eq_empty_iff_forall_notMem, Finset.mem_inter, not_and', not_forall,
169+
← SetLike.mem_coe, setOf_exists, not_not, inter_iUnion₂]
170+
apply Countable.biUnion
171+
· apply Finite.countable
172+
simp
173+
· intro i hi
174+
simp_rw [SetLike.mem_coe, inter_setOf_eq_sep]
175+
exact h i
176+
have hg' : InjOn g (Iio ω₁) := by
177+
intro j hj k hk hjk
178+
by_contra hjk'
179+
wlog hjk'' : k < j generalizing j k
180+
· exact this hk hj hjk.symm (ne_comm.1 hjk') (lt_of_le_of_ne (le_of_not_gt hjk'') hjk')
181+
have := (hg j hj).2 k hjk''
182+
simp only [← hjk, Finset.inter_self] at this
183+
simpa [this] using hn _ (hg j hj).1
184+
refine ⟨g '' Iio ω₁, by grind, ∅, .to_subtype (.image ?_ hg'), Pairwise.image ?_⟩
185+
· rw [← uncountable_coe_iff, ← aleph0_lt_mk_iff, mk_Iio_ordinal, aleph0_lt_lift, card_omega]
186+
exact aleph0_lt_aleph_one
187+
intro j hj k hk hjk
188+
simp only [Function.onFun_apply]
189+
wlog hjk' : k < j generalizing j k
190+
· rw [Finset.inter_comm]
191+
exact this hk hj hjk.symm (lt_of_le_of_ne (le_of_not_gt hjk') hjk)
192+
exact (hg j hj).2 k hjk'
193+
· simp only [not_forall, not_countable_iff] at h
194+
rcases h with ⟨a, ha⟩
195+
rcases ih (fun i => f i \ {a}) _ (by grind) ha with ⟨s', hs', t, hs'', ht⟩
196+
exact ⟨s', hs'.trans (sep_subset _ _), t ∪ {a}, hs'', fun i hi j hj hij => by
197+
grind [Set.Pairwise]⟩

0 commit comments

Comments
 (0)