Skip to content

Commit beeea28

Browse files
JADekkerocfnash
andcommitted
feat : new properties of the CardinalInterFilter (#11758)
extend more of the API from CountableInterFilter to CardinalInterFilter Co-authored-by: Oliver Nash <github@olivernash.org>
1 parent fdb986a commit beeea28

File tree

3 files changed

+246
-29
lines changed

3 files changed

+246
-29
lines changed

Mathlib/Order/Filter/CardinalInter.lean

Lines changed: 190 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ Authors: Josha Dekker
66
import Mathlib.Order.Filter.Basic
77
import Mathlib.Order.Filter.CountableInter
88
import Mathlib.SetTheory.Cardinal.Ordinal
9+
import Mathlib.SetTheory.Cardinal.Cofinality
910

1011
/-!
1112
# Filters with a cardinal intersection property
@@ -73,12 +74,16 @@ theorem cardinalInterFilter_aleph_one_iff :
7374
CardinalInterFilter.cardinal_sInter_mem S ((countable_iff_lt_aleph_one S).1 h) a⟩,
7475
fun _ ↦ CountableInterFilter.toCardinalInterFilter l⟩
7576

76-
/-- Every CardinalInterFilter for some c also is a CardinalInterFilter for some a < c -/
77-
theorem CardinalInterFilter.of_CardinalInterFilter_of_lt (l : Filter α) [CardinalInterFilter l c]
78-
{a : Cardinal.{u}} (hac : a < c) :
77+
/-- Every CardinalInterFilter for some c also is a CardinalInterFilter for some a c -/
78+
theorem CardinalInterFilter.of_cardinalInterFilter_of_le (l : Filter α) [CardinalInterFilter l c]
79+
{a : Cardinal.{u}} (hac : a c) :
7980
CardinalInterFilter l a where
8081
cardinal_sInter_mem :=
81-
fun S hS a ↦ CardinalInterFilter.cardinal_sInter_mem S (lt_trans hS hac) a
82+
fun S hS a ↦ CardinalInterFilter.cardinal_sInter_mem S (lt_of_lt_of_le hS hac) a
83+
84+
theorem CardinalInterFilter.of_cardinalInterFilter_of_lt (l : Filter α) [CardinalInterFilter l c]
85+
{a : Cardinal.{u}} (hac : a < c) : CardinalInterFilter l a :=
86+
CardinalInterFilter.of_cardinalInterFilter_of_le l (hac.le)
8287

8388
namespace Filter
8489

@@ -87,8 +92,7 @@ variable [CardinalInterFilter l c]
8792
theorem cardinal_iInter_mem {s : ι → Set α} (hic : #ι < c) :
8893
(⋂ i, s i) ∈ l ↔ ∀ i, s i ∈ l := by
8994
rw [← sInter_range _]
90-
apply Iff.trans
91-
apply cardinal_sInter_mem (lt_of_le_of_lt Cardinal.mk_range_le hic)
95+
apply (cardinal_sInter_mem (lt_of_le_of_lt Cardinal.mk_range_le hic)).trans
9296
exact forall_mem_range
9397

9498
theorem cardinal_bInter_mem {S : Set ι} (hS : #S < c)
@@ -152,4 +156,184 @@ theorem EventuallyEq.cardinal_bInter {S : Set ι} (hS : #S < c)
152156
(EventuallyLE.cardinal_bInter hS fun i hi => (h i hi).le).antisymm
153157
(EventuallyLE.cardinal_bInter hS fun i hi => (h i hi).symm.le)
154158

159+
/-- Construct a filter with cardinal `c` intersection property. This constructor deduces
160+
`Filter.univ_sets` and `Filter.inter_sets` from the cardinal `c` intersection property. -/
161+
def ofCardinalInter (l : Set (Set α)) (hc : 2 < c)
162+
(hl : ∀ S : Set (Set α), (#S < c) → S ⊆ l → ⋂₀ S ∈ l)
163+
(h_mono : ∀ s t, s ∈ l → s ⊆ t → t ∈ l) : Filter α where
164+
sets := l
165+
univ_sets :=
166+
sInter_empty ▸ hl ∅ (mk_eq_zero (∅ : Set (Set α)) ▸ lt_trans zero_lt_two hc) (empty_subset _)
167+
sets_of_superset := h_mono _ _
168+
inter_sets {s t} hs ht := sInter_pair s t ▸ by
169+
apply hl _ (?_) (insert_subset_iff.2 ⟨hs, singleton_subset_iff.2 ht⟩)
170+
have : #({s, t} : Set (Set α)) ≤ 2 := by
171+
calc
172+
_ ≤ #({t} : Set (Set α)) + 1 := Cardinal.mk_insert_le
173+
_ = 2 := by norm_num
174+
exact lt_of_le_of_lt this hc
175+
176+
instance cardinalInter_ofCardinalInter (l : Set (Set α)) (hc : 2 < c)
177+
(hl : ∀ S : Set (Set α), (#S < c) → S ⊆ l → ⋂₀ S ∈ l)
178+
(h_mono : ∀ s t, s ∈ l → s ⊆ t → t ∈ l) :
179+
CardinalInterFilter (Filter.ofCardinalInter l hc hl h_mono) c :=
180+
⟨hl⟩
181+
182+
@[simp]
183+
theorem mem_ofCardinalInter {l : Set (Set α)} (hc : 2 < c)
184+
(hl : ∀ S : Set (Set α), (#S < c) → S ⊆ l → ⋂₀ S ∈ l) (h_mono : ∀ s t, s ∈ l → s ⊆ t → t ∈ l)
185+
{s : Set α} : s ∈ Filter.ofCardinalInter l hc hl h_mono ↔ s ∈ l :=
186+
Iff.rfl
187+
188+
/-- Construct a filter with cardinal `c` intersection property.
189+
Similarly to `Filter.comk`, a set belongs to this filter if its complement satisfies the property.
190+
Similarly to `Filter.ofCardinalInter`,
191+
this constructor deduces some properties from the cardinal `c` intersection property
192+
which becomes the cardinal `c` union property because we take complements of all sets. -/
193+
def ofCardinalUnion (l : Set (Set α)) (hc : 2 < c)
194+
(hUnion : ∀ S : Set (Set α), (#S < c) → (∀ s ∈ S, s ∈ l) → ⋃₀ S ∈ l)
195+
(hmono : ∀ t ∈ l, ∀ s ⊆ t, s ∈ l) : Filter α := by
196+
refine .ofCardinalInter {s | sᶜ ∈ l} hc (fun S hSc hSp ↦ ?_) fun s t ht hsub ↦ ?_
197+
· rw [mem_setOf_eq, compl_sInter]
198+
apply hUnion (compl '' S) (lt_of_le_of_lt mk_image_le hSc)
199+
intro s hs
200+
rw [mem_image] at hs
201+
rcases hs with ⟨t, ht, rfl⟩
202+
apply hSp ht
203+
· rw [mem_setOf_eq]
204+
rw [← compl_subset_compl] at hsub
205+
exact hmono sᶜ ht tᶜ hsub
206+
207+
instance cardinalInter_ofCardinalUnion (l : Set (Set α)) (hc : 2 < c) (h₁ h₂) :
208+
CardinalInterFilter (Filter.ofCardinalUnion l hc h₁ h₂) c :=
209+
cardinalInter_ofCardinalInter ..
210+
211+
@[simp]
212+
theorem mem_ofCardinalUnion {l : Set (Set α)} (hc : 2 < c) {hunion hmono s} :
213+
s ∈ ofCardinalUnion l hc hunion hmono ↔ l sᶜ :=
214+
Iff.rfl
215+
216+
instance cardinalInterFilter_principal (s : Set α) : CardinalInterFilter (𝓟 s) c :=
217+
fun _ _ hS => subset_sInter hS⟩
218+
219+
instance cardinalInterFilter_bot : CardinalInterFilter (⊥ : Filter α) c := by
220+
rw [← principal_empty]
221+
apply cardinalInterFilter_principal
222+
223+
instance cardinalInterFilter_top : CardinalInterFilter (⊤ : Filter α) c := by
224+
rw [← principal_univ]
225+
apply cardinalInterFilter_principal
226+
227+
instance (l : Filter β) [CardinalInterFilter l c] (f : α → β) :
228+
CardinalInterFilter (comap f l) c := by
229+
refine ⟨fun S hSc hS => ?_⟩
230+
choose! t htl ht using hS
231+
refine ⟨_, (cardinal_bInter_mem hSc).2 htl, ?_⟩
232+
simpa [preimage_iInter] using iInter₂_mono ht
233+
234+
instance (l : Filter α) [CardinalInterFilter l c] (f : α → β) :
235+
CardinalInterFilter (map f l) c := by
236+
refine ⟨fun S hSc hS => ?_⟩
237+
simp only [mem_map, sInter_eq_biInter, preimage_iInter₂] at hS ⊢
238+
exact (cardinal_bInter_mem hSc).2 hS
239+
240+
/-- Infimum of two `CardinalInterFilter`s is a `CardinalInterFilter`. This is useful, e.g.,
241+
to automatically get an instance for `residual α ⊓ 𝓟 s`. -/
242+
instance cardinalInterFilter_inf_eq (l₁ l₂ : Filter α) [CardinalInterFilter l₁ c]
243+
[CardinalInterFilter l₂ c] : CardinalInterFilter (l₁ ⊓ l₂) c := by
244+
refine ⟨fun S hSc hS => ?_⟩
245+
choose s hs t ht hst using hS
246+
replace hs : (⋂ i ∈ S, s i ‹_›) ∈ l₁ := (cardinal_bInter_mem hSc).2 hs
247+
replace ht : (⋂ i ∈ S, t i ‹_›) ∈ l₂ := (cardinal_bInter_mem hSc).2 ht
248+
refine mem_of_superset (inter_mem_inf hs ht) (subset_sInter fun i hi => ?_)
249+
rw [hst i hi]
250+
apply inter_subset_inter <;> exact iInter_subset_of_subset i (iInter_subset _ _)
251+
252+
instance cardinalInterFilter_inf (l₁ l₂ : Filter α) {c₁ c₂ : Cardinal.{u}}
253+
[CardinalInterFilter l₁ c₁] [CardinalInterFilter l₂ c₂] : CardinalInterFilter (l₁ ⊓ l₂)
254+
(c₁ ⊓ c₂) := by
255+
have : CardinalInterFilter l₁ (c₁ ⊓ c₂) :=
256+
CardinalInterFilter.of_cardinalInterFilter_of_le l₁ inf_le_left
257+
have : CardinalInterFilter l₂ (c₁ ⊓ c₂) :=
258+
CardinalInterFilter.of_cardinalInterFilter_of_le l₂ inf_le_right
259+
exact cardinalInterFilter_inf_eq _ _
260+
261+
/-- Supremum of two `CardinalInterFilter`s is a `CardinalInterFilter`. -/
262+
instance cardinalInterFilter_sup_eq (l₁ l₂ : Filter α) [CardinalInterFilter l₁ c]
263+
[CardinalInterFilter l₂ c] : CardinalInterFilter (l₁ ⊔ l₂) c := by
264+
refine ⟨fun S hSc hS => ⟨?_, ?_⟩⟩ <;> refine (cardinal_sInter_mem hSc).2 fun s hs => ?_
265+
exacts [(hS s hs).1, (hS s hs).2]
266+
267+
instance cardinalInterFilter_sup (l₁ l₂ : Filter α) {c₁ c₂ : Cardinal.{u}}
268+
[CardinalInterFilter l₁ c₁] [CardinalInterFilter l₂ c₂] :
269+
CardinalInterFilter (l₁ ⊔ l₂) (c₁ ⊓ c₂) := by
270+
have : CardinalInterFilter l₁ (c₁ ⊓ c₂) :=
271+
CardinalInterFilter.of_cardinalInterFilter_of_le l₁ inf_le_left
272+
have : CardinalInterFilter l₂ (c₁ ⊓ c₂) :=
273+
CardinalInterFilter.of_cardinalInterFilter_of_le l₂ inf_le_right
274+
exact cardinalInterFilter_sup_eq _ _
275+
276+
variable (g : Set (Set α))
277+
278+
/-- `Filter.CardinalGenerateSets c g` is the (sets of the)
279+
greatest `cardinalInterFilter c` containing `g`.-/
280+
inductive CardinalGenerateSets : Set α → Prop
281+
| basic {s : Set α} : s ∈ g → CardinalGenerateSets s
282+
| univ : CardinalGenerateSets univ
283+
| superset {s t : Set α} : CardinalGenerateSets s → s ⊆ t → CardinalGenerateSets t
284+
| sInter {S : Set (Set α)} :
285+
(#S < c) → (∀ s ∈ S, CardinalGenerateSets s) → CardinalGenerateSets (⋂₀ S)
286+
287+
/-- `Filter.cardinalGenerate c g` is the greatest `cardinalInterFilter c` containing `g`.-/
288+
def cardinalGenerate (hc : 2 < c) : Filter α :=
289+
ofCardinalInter (CardinalGenerateSets g) hc (fun _ => CardinalGenerateSets.sInter) fun _ _ =>
290+
CardinalGenerateSets.superset
291+
292+
lemma cardinalInter_ofCardinalGenerate (hc : 2 < c) :
293+
CardinalInterFilter (cardinalGenerate g hc) c := by
294+
delta cardinalGenerate;
295+
apply cardinalInter_ofCardinalInter _ _ _
296+
297+
variable {g}
298+
299+
/-- A set is in the `cardinalInterFilter` generated by `g` if and only if
300+
it contains an intersection of `c` elements of `g`. -/
301+
theorem mem_cardinaleGenerate_iff {s : Set α} {hreg : c.IsRegular} :
302+
s ∈ cardinalGenerate g (IsRegular.nat_lt hreg 2) ↔
303+
∃ S : Set (Set α), S ⊆ g ∧ (#S < c) ∧ ⋂₀ S ⊆ s := by
304+
constructor <;> intro h
305+
· induction' h with s hs s t _ st ih S Sct _ ih
306+
· refine ⟨{s}, singleton_subset_iff.mpr hs, ?_⟩
307+
norm_num; exact ⟨IsRegular.nat_lt hreg 1, subset_rfl⟩
308+
· exact ⟨∅, ⟨empty_subset g, mk_eq_zero (∅ : Set <| Set α) ▸ IsRegular.nat_lt hreg 0, by simp⟩⟩
309+
· exact Exists.imp (by tauto) ih
310+
choose T Tg Tct hT using ih
311+
refine ⟨⋃ (s) (H : s ∈ S), T s H, by simpa,
312+
(Cardinal.card_biUnion_lt_iff_forall_of_isRegular hreg Sct).2 Tct, ?_⟩
313+
apply subset_sInter
314+
apply fun s H => subset_trans (sInter_subset_sInter (subset_iUnion₂ s H)) (hT s H)
315+
rcases h with ⟨S, Sg, Sct, hS⟩
316+
have : CardinalInterFilter (cardinalGenerate g (IsRegular.nat_lt hreg 2)) c :=
317+
cardinalInter_ofCardinalGenerate _ _
318+
exact mem_of_superset ((cardinal_sInter_mem Sct).mpr
319+
(fun s H => CardinalGenerateSets.basic (Sg H))) hS
320+
321+
theorem le_cardinalGenerate_iff_of_cardinalInterFilter {f : Filter α} [CardinalInterFilter f c]
322+
(hc : 2 < c) : f ≤ cardinalGenerate g hc ↔ g ⊆ f.sets := by
323+
constructor <;> intro h
324+
· exact subset_trans (fun s => CardinalGenerateSets.basic) h
325+
intro s hs
326+
induction' hs with s hs s t _ st ih S Sct _ ih
327+
· exact h hs
328+
· exact univ_mem
329+
· exact mem_of_superset ih st
330+
exact (cardinal_sInter_mem Sct).mpr ih
331+
332+
/-- `cardinalGenerate g hc` is the greatest `cardinalInterFilter c` containing `g`.-/
333+
theorem cardinalGenerate_isGreatest (hc : 2 < c) :
334+
IsGreatest { f : Filter α | CardinalInterFilter f c ∧ g ⊆ f.sets } (cardinalGenerate g hc) := by
335+
refine ⟨⟨cardinalInter_ofCardinalGenerate _ _, fun s => CardinalGenerateSets.basic⟩, ?_⟩
336+
rintro f ⟨fct, hf⟩
337+
rwa [le_cardinalGenerate_iff_of_cardinalInterFilter]
338+
155339
end Filter

Mathlib/Order/Filter/CountableInter.lean

Lines changed: 26 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -131,52 +131,55 @@ theorem EventuallyEq.countable_bInter {ι : Type*} {S : Set ι} (hS : S.Countabl
131131
/-- Construct a filter with countable intersection property. This constructor deduces
132132
`Filter.univ_sets` and `Filter.inter_sets` from the countable intersection property. -/
133133
def Filter.ofCountableInter (l : Set (Set α))
134-
(hp : ∀ S : Set (Set α), S.Countable → S ⊆ l → ⋂₀ S ∈ l)
134+
(hl : ∀ S : Set (Set α), S.Countable → S ⊆ l → ⋂₀ S ∈ l)
135135
(h_mono : ∀ s t, s ∈ l → s ⊆ t → t ∈ l) : Filter α where
136136
sets := l
137-
univ_sets := @sInter_empty α ▸ hp _ countable_empty (empty_subset _)
137+
univ_sets := @sInter_empty α ▸ hl _ countable_empty (empty_subset _)
138138
sets_of_superset := h_mono _ _
139139
inter_sets {s t} hs ht := sInter_pair s t ▸
140-
hp _ ((countable_singleton _).insert _) (insert_subset_iff.2 ⟨hs, singleton_subset_iff.2 ht⟩)
140+
hl _ ((countable_singleton _).insert _) (insert_subset_iff.2 ⟨hs, singleton_subset_iff.2 ht⟩)
141141
#align filter.of_countable_Inter Filter.ofCountableInter
142142

143143
instance Filter.countableInter_ofCountableInter (l : Set (Set α))
144-
(hp : ∀ S : Set (Set α), S.Countable → S ⊆ l → ⋂₀ S ∈ l)
144+
(hl : ∀ S : Set (Set α), S.Countable → S ⊆ l → ⋂₀ S ∈ l)
145145
(h_mono : ∀ s t, s ∈ l → s ⊆ t → t ∈ l) :
146-
CountableInterFilter (Filter.ofCountableInter l hp h_mono) :=
147-
hp
146+
CountableInterFilter (Filter.ofCountableInter l hl h_mono) :=
147+
hl
148148
#align filter.countable_Inter_of_countable_Inter Filter.countableInter_ofCountableInter
149149

150150
@[simp]
151151
theorem Filter.mem_ofCountableInter {l : Set (Set α)}
152-
(hp : ∀ S : Set (Set α), S.Countable → S ⊆ l → ⋂₀ S ∈ l) (h_mono : ∀ s t, s ∈ l → s ⊆ t → t ∈ l)
153-
{s : Set α} : s ∈ Filter.ofCountableInter l hp h_mono ↔ s ∈ l :=
152+
(hl : ∀ S : Set (Set α), S.Countable → S ⊆ l → ⋂₀ S ∈ l) (h_mono : ∀ s t, s ∈ l → s ⊆ t → t ∈ l)
153+
{s : Set α} : s ∈ Filter.ofCountableInter l hl h_mono ↔ s ∈ l :=
154154
Iff.rfl
155155
#align filter.mem_of_countable_Inter Filter.mem_ofCountableInter
156156

157157
/-- Construct a filter with countable intersection property.
158158
Similarly to `Filter.comk`, a set belongs to this filter if its complement satisfies the property.
159159
Similarly to `Filter.ofCountableInter`,
160160
this constructor deduces some properties from the countable intersection property
161-
which becomes the countable union property because we take complements of all sets.
162-
163-
Another small difference from `Filter.ofCountableInter`
164-
is that this definition takes `p : Set α → Prop` instead of `Set (Set α)`. -/
165-
def Filter.ofCountableUnion (p : Set α → Prop)
166-
(hUnion : ∀ S : Set (Set α), S.Countable → (∀ s ∈ S, p s) → p (⋃₀ S))
167-
(hmono : ∀ t, p t → ∀ s ⊆ t, p s) : Filter α := by
168-
refine .ofCountableInter {s | p sᶜ} (fun S hSc hSp ↦ ?_) fun s t ht hsub ↦ ?_
161+
which becomes the countable union property because we take complements of all sets. -/
162+
def Filter.ofCountableUnion (l : Set (Set α))
163+
(hUnion : ∀ S : Set (Set α), S.Countable → (∀ s ∈ S, s ∈ l) → ⋃₀ S ∈ l)
164+
(hmono : ∀ t ∈ l, ∀ s ⊆ t, s ∈ l) : Filter α := by
165+
refine .ofCountableInter {s | sᶜ ∈ l} (fun S hSc hSp ↦ ?_) fun s t ht hsub ↦ ?_
169166
· rw [mem_setOf_eq, compl_sInter]
170-
exact hUnion _ (hSc.image _) (forall_mem_image.2 hSp)
171-
· exact hmono _ ht _ (compl_subset_compl.2 hsub)
172-
173-
instance Filter.countableInter_ofCountableUnion (p : Set α → Prop) (h₁ h₂) :
174-
CountableInterFilter (Filter.ofCountableUnion p h₁ h₂) :=
167+
apply hUnion (compl '' S) (hSc.image _)
168+
intro s hs
169+
rw [mem_image] at hs
170+
rcases hs with ⟨t, ht, rfl⟩
171+
apply hSp ht
172+
· rw [mem_setOf_eq]
173+
rw [← compl_subset_compl] at hsub
174+
exact hmono sᶜ ht tᶜ hsub
175+
176+
instance Filter.countableInter_ofCountableUnion (l : Set (Set α)) (h₁ h₂) :
177+
CountableInterFilter (Filter.ofCountableUnion l h₁ h₂) :=
175178
countableInter_ofCountableInter ..
176179

177180
@[simp]
178-
theorem Filter.mem_ofCountableUnion {p : Set α → Prop} {hunion hmono s} :
179-
s ∈ ofCountableUnion p hunion hmono ↔ p sᶜ :=
181+
theorem Filter.mem_ofCountableUnion {l : Set (Set α)} {hunion hmono s} :
182+
s ∈ ofCountableUnion l hunion hmono ↔ l sᶜ :=
180183
Iff.rfl
181184

182185
instance countableInterFilter_principal (s : Set α) : CountableInterFilter (𝓟 s) :=

Mathlib/SetTheory/Cardinal/Cofinality.lean

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -957,6 +957,9 @@ theorem IsRegular.pos {c : Cardinal} (H : c.IsRegular) : 0 < c :=
957957
aleph0_pos.trans_le H.1
958958
#align cardinal.is_regular.pos Cardinal.IsRegular.pos
959959

960+
theorem IsRegular.nat_lt {c : Cardinal} (H : c.IsRegular) (n : ℕ) : n < c :=
961+
lt_of_lt_of_le (nat_lt_aleph0 n) H.aleph0_le
962+
960963
theorem IsRegular.ord_pos {c : Cardinal} (H : c.IsRegular) : 0 < c.ord := by
961964
rw [Cardinal.lt_ord, card_zero]
962965
exact H.pos
@@ -1114,6 +1117,33 @@ theorem sum_lt_of_isRegular {ι : Type u} {f : ι → Cardinal} {c : Cardinal} (
11141117
sum_lt_lift_of_isRegular.{u, u} hc (by rwa [lift_id])
11151118
#align cardinal.sum_lt_of_is_regular Cardinal.sum_lt_of_isRegular
11161119

1120+
@[simp]
1121+
theorem card_lt_of_card_iUnion_lt {ι : Type u} {α : Type u} {t : ι → Set α} {c : Cardinal}
1122+
(h : #(⋃ i, t i) < c) (i : ι) : #(t i) < c :=
1123+
lt_of_le_of_lt (Cardinal.mk_le_mk_of_subset <| subset_iUnion _ _) h
1124+
1125+
@[simp]
1126+
theorem card_iUnion_lt_iff_forall_of_isRegular {ι : Type u} {α : Type u} {t : ι → Set α}
1127+
{c : Cardinal} (hc : c.IsRegular) (hι : #ι < c) : #(⋃ i, t i) < c ↔ ∀ i, #(t i) < c := by
1128+
refine ⟨card_lt_of_card_iUnion_lt, fun h ↦ ?_⟩
1129+
apply lt_of_le_of_lt (Cardinal.mk_sUnion_le _)
1130+
apply Cardinal.mul_lt_of_lt hc.aleph0_le
1131+
(lt_of_le_of_lt Cardinal.mk_range_le hι)
1132+
apply Cardinal.iSup_lt_of_isRegular hc (lt_of_le_of_lt Cardinal.mk_range_le hι)
1133+
simpa
1134+
1135+
theorem card_lt_of_card_biUnion_lt {α β : Type u} {s : Set α} {t : ∀ a ∈ s, Set β} {c : Cardinal}
1136+
(h : #(⋃ a ∈ s, t a ‹_›) < c) (a : α) (ha : a ∈ s) : # (t a ha) < c := by
1137+
rw [biUnion_eq_iUnion] at h
1138+
have := card_lt_of_card_iUnion_lt h
1139+
simp_all only [iUnion_coe_set,
1140+
Subtype.forall]
1141+
1142+
theorem card_biUnion_lt_iff_forall_of_isRegular {α β : Type u} {s : Set α} {t : ∀ a ∈ s, Set β}
1143+
{c : Cardinal} (hc : c.IsRegular) (hs : #s < c) :
1144+
#(⋃ a ∈ s, t a ‹_›) < c ↔ ∀ a (ha : a ∈ s), # (t a ha) < c := by
1145+
rw [biUnion_eq_iUnion, card_iUnion_lt_iff_forall_of_isRegular hc hs, SetCoe.forall']
1146+
11171147
theorem nfpFamily_lt_ord_lift_of_isRegular {ι} {f : ι → Ordinal → Ordinal} {c} (hc : IsRegular c)
11181148
(hι : Cardinal.lift.{v, u} #ι < c) (hc' : c ≠ ℵ₀) (hf : ∀ (i), ∀ b < c.ord, f i b < c.ord) {a}
11191149
(ha : a < c.ord) : nfpFamily.{u, v} f a < c.ord := by

0 commit comments

Comments
 (0)