Theorem: encard_iUnion_le (Matroid/ForMathlib/Card.lean)

State before:
α : Type u_1
β : Type u_2
s✝ t : Set α
n : ℕ
ι : Type u_3
inst✝ : Fintype ι
s : ι → Set α
⊢ (⋃ i, s i).encard ≤ ∑ i : ι, (s i).encard
Tactic:
obtain (⟨i, hi⟩ | h) := em <| ∃ i, (s i).Infinite
State after:
case inl.intro
α : Type u_1
β : Type u_2
s✝ t : Set α
n : ℕ
ι : Type u_3
inst✝ : Fintype ι
s : ι → Set α
i : ι
hi : (s i).Infinite
⊢ (⋃ i, s i).encard ≤ ∑ i : ι, (s i).encard

case inr
α : Type u_1
β : Type u_2
s✝ t : Set α
n : ℕ
ι : Type u_3
inst✝ : Fintype ι
s : ι → Set α
h : ¬∃ i, (s i).Infinite
⊢ (⋃ i, s i).encard ≤ ∑ i : ι, (s i).encard

State before:
case inr
α : Type u_1
β : Type u_2
s✝ t : Set α
n : ℕ
ι : Type u_3
inst✝ : Fintype ι
s : ι → Set α
h : ¬∃ i, (s i).Infinite
⊢ (⋃ i, s i).encard ≤ ∑ i : ι, (s i).encard
Tactic:
simp_rw [not_exists, not_infinite] at h
State after:
case inr
α : Type u_1
β : Type u_2
s✝ t : Set α
n : ℕ
ι : Type u_3
inst✝ : Fintype ι
s : ι → Set α
h : ∀ (x : ι), (s x).Finite
⊢ (⋃ i, s i).encard ≤ ∑ i : ι, (s i).encard

State before:
case inr
α : Type u_1
β : Type u_2
s✝ t : Set α
n : ℕ
ι : Type u_3
inst✝ : Fintype ι
s : ι → Set α
h : ∀ (x : ι), (s x).Finite
⊢ (⋃ i, s i).encard ≤ ∑ i : ι, (s i).encard
Tactic:
convert (Nat.cast_le (α := ℕ∞)).2
  (Finset.card_biUnion_le (s := Finset.univ) (t := fun i ↦ (h i).toFinset))
State after:
case h.e'_3
α : Type u_1
β : Type u_2
s✝ t : Set α
n : ℕ
ι : Type u_3
inst✝ : Fintype ι
s : ι → Set α
h : ∀ (x : ι), (s x).Finite
⊢ (⋃ i, s i).encard = ↑(Finset.univ.biUnion fun i => ⋯.toFinset).card

case h.e'_4
α : Type u_1
β : Type u_2
s✝ t : Set α
n : ℕ
ι : Type u_3
inst✝ : Fintype ι
s : ι → Set α
h : ∀ (x : ι), (s x).Finite
⊢ ∑ i : ι, (s i).encard = ↑(∑ a : ι, ⋯.toFinset.card)

State before:
case h.e'_4
α : Type u_1
β : Type u_2
s✝ t : Set α
n : ℕ
ι : Type u_3
inst✝ : Fintype ι
s : ι → Set α
h : ∀ (x : ι), (s x).Finite
⊢ ∑ i : ι, (s i).encard = ↑(∑ a : ι, ⋯.toFinset.card)
Tactic:
rw [Nat.cast_sum]
State after:
case h.e'_4
α : Type u_1
β : Type u_2
s✝ t : Set α
n : ℕ
ι : Type u_3
inst✝ : Fintype ι
s : ι → Set α
h : ∀ (x : ι), (s x).Finite
⊢ ∑ i : ι, (s i).encard = ∑ x : ι, ↑⋯.toFinset.card

State before:
case h.e'_4
α : Type u_1
β : Type u_2
s✝ t : Set α
n : ℕ
ι : Type u_3
inst✝ : Fintype ι
s : ι → Set α
h : ∀ (x : ι), (s x).Finite
⊢ ∑ i : ι, (s i).encard = ∑ x : ι, ↑⋯.toFinset.card
Tactic:
exact Finset.sum_congr rfl (fun x _ ↦ (h x).encard_eq_coe_toFinset_card)
State after:
no goals

State before:
case inl.intro
α : Type u_1
β : Type u_2
s✝ t : Set α
n : ℕ
ι : Type u_3
inst✝ : Fintype ι
s : ι → Set α
i : ι
hi : (s i).Infinite
⊢ (⋃ i, s i).encard ≤ ∑ i : ι, (s i).encard
Tactic:
have hle := Finset.sum_le_sum_of_subset (f := fun i ↦ encard (s i)) (Finset.subset_univ {i})
State after:
case inl.intro
α : Type u_1
β : Type u_2
s✝ t : Set α
n : ℕ
ι : Type u_3
inst✝ : Fintype ι
s : ι → Set α
i : ι
hi : (s i).Infinite
hle : ∑ x ∈ {i}, (fun i => (s i).encard) x ≤ ∑ x : ι, (fun i => (s i).encard) x
⊢ (⋃ i, s i).encard ≤ ∑ i : ι, (s i).encard

State before:
case inl.intro
α : Type u_1
β : Type u_2
s✝ t : Set α
n : ℕ
ι : Type u_3
inst✝ : Fintype ι
s : ι → Set α
i : ι
hi : (s i).Infinite
hle : ∑ x ∈ {i}, (fun i => (s i).encard) x ≤ ∑ x : ι, (fun i => (s i).encard) x
⊢ (⋃ i, s i).encard ≤ ∑ i : ι, (s i).encard
Tactic:
simp_rw [Finset.sum_singleton, hi.encard_eq] at hle
State after:
case inl.intro
α : Type u_1
β : Type u_2
s✝ t : Set α
n : ℕ
ι : Type u_3
inst✝ : Fintype ι
s : ι → Set α
i : ι
hi : (s i).Infinite
hle : ⊤ ≤ ∑ x : ι, (s x).encard
⊢ (⋃ i, s i).encard ≤ ∑ i : ι, (s i).encard

State before:
case inl.intro
α : Type u_1
β : Type u_2
s✝ t : Set α
n : ℕ
ι : Type u_3
inst✝ : Fintype ι
s : ι → Set α
i : ι
hi : (s i).Infinite
hle : ⊤ ≤ ∑ x : ι, (s x).encard
⊢ (⋃ i, s i).encard ≤ ∑ i : ι, (s i).encard
Tactic:
exact le_top.trans hle
State after:
no goals

State before:
case h.e'_3
α : Type u_1
β : Type u_2
s✝ t : Set α
n : ℕ
ι : Type u_3
inst✝ : Fintype ι
s : ι → Set α
h : ∀ (x : ι), (s x).Finite
⊢ (⋃ i, s i).encard = ↑(Finset.univ.biUnion fun i => ⋯.toFinset).card
Tactic:
rw [(finite_iUnion h).encard_eq_coe_toFinset_card]
State after:
case h.e'_3
α : Type u_1
β : Type u_2
s✝ t : Set α
n : ℕ
ι : Type u_3
inst✝ : Fintype ι
s : ι → Set α
h : ∀ (x : ι), (s x).Finite
⊢ ↑⋯.toFinset.card = ↑(Finset.univ.biUnion fun i => ⋯.toFinset).card

State before:
case h.e'_3
α : Type u_1
β : Type u_2
s✝ t : Set α
n : ℕ
ι : Type u_3
inst✝ : Fintype ι
s : ι → Set α
h : ∀ (x : ι), (s x).Finite
⊢ ↑⋯.toFinset.card = ↑(Finset.univ.biUnion fun i => ⋯.toFinset).card
Tactic:
congr
State after:
case h.e'_3.e_a.e_s
α : Type u_1
β : Type u_2
s✝ t : Set α
n : ℕ
ι : Type u_3
inst✝ : Fintype ι
s : ι → Set α
h : ∀ (x : ι), (s x).Finite
⊢ ⋯.toFinset = Finset.univ.biUnion fun i => ⋯.toFinset

State before:
case h.e'_3.e_a.e_s
α : Type u_1
β : Type u_2
s✝ t : Set α
n : ℕ
ι : Type u_3
inst✝ : Fintype ι
s : ι → Set α
h : ∀ (x : ι), (s x).Finite
⊢ ⋯.toFinset = Finset.univ.biUnion fun i => ⋯.toFinset
Tactic:
ext x
State after:
case h.e'_3.e_a.e_s.a
α : Type u_1
β : Type u_2
s✝ t : Set α
n : ℕ
ι : Type u_3
inst✝ : Fintype ι
s : ι → Set α
h : ∀ (x : ι), (s x).Finite
x : α
⊢ x ∈ ⋯.toFinset ↔ x ∈ Finset.univ.biUnion fun i => ⋯.toFinset

State before:
case h.e'_3.e_a.e_s.a
α : Type u_1
β : Type u_2
s✝ t : Set α
n : ℕ
ι : Type u_3
inst✝ : Fintype ι
s : ι → Set α
h : ∀ (x : ι), (s x).Finite
x : α
⊢ x ∈ ⋯.toFinset ↔ x ∈ Finset.univ.biUnion fun i => ⋯.toFinset
Tactic:
simp
State after:
no goals