@@ -22,7 +22,7 @@ public section
2222
2323open Order Ordinal Set
2424
25- universe u
25+ universe u v
2626
2727namespace 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
127127end 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