Theorem: AhlswedeZhang.supSum_of_not_univ_mem
File: Mathlib/Combinatorics/SetFamily/AhlswedeZhang.lean

Proof steps:
state_before: α : Type u_1
inst✝² : Fintype α
inst✝¹ : DecidableEq α
𝒜 ℬ : Finset (Finset α)
s : Finset α
inst✝ : Nonempty α
h𝒜₁ : 𝒜.Nonempty
h𝒜₂ : univ ∉ 𝒜
⊢ supSum 𝒜 = ↑(card α) * ∑ k ∈ range (card α), (↑k)⁻¹
state_after: α : Type u_1
inst✝² : Fintype α
inst✝¹ : DecidableEq α
𝒜 ℬ : Finset (Finset α)
s : Finset α
inst✝ : Nonempty α
h𝒜₁ : 𝒜.Nonempty
h𝒜₂ : univ ∉ 𝒜
m : ℕ := 𝒜.card
hm : m = 𝒜.card
⊢ supSum 𝒜 = ↑(card α) * ∑ k ∈ range (card α), (↑k)⁻¹
tactic: set m := 𝒜.card with hm
state_before: α : Type u_1
inst✝² : Fintype α
inst✝¹ : DecidableEq α
𝒜 ℬ : Finset (Finset α)
s : Finset α
inst✝ : Nonempty α
h𝒜₁ : 𝒜.Nonempty
h𝒜₂ : univ ∉ 𝒜
m : ℕ := 𝒜.card
hm : m = 𝒜.card
⊢ supSum 𝒜 = ↑(card α) * ∑ k ∈ range (card α), (↑k)⁻¹
state_after: α : Type u_1
inst✝² : Fintype α
inst✝¹ : DecidableEq α
𝒜 ℬ : Finset (Finset α)
s : Finset α
inst✝ : Nonempty α
h𝒜₁ : 𝒜.Nonempty
h𝒜₂ : univ ∉ 𝒜
m : ℕ
hm : m = 𝒜.card
⊢ supSum 𝒜 = ↑(card α) * ∑ k ∈ range (card α), (↑k)⁻¹
tactic: clear_value m
state_before: α : Type u_1
inst✝² : Fintype α
inst✝¹ : DecidableEq α
𝒜 ℬ : Finset (Finset α)
s : Finset α
inst✝ : Nonempty α
h𝒜₁ : 𝒜.Nonempty
h𝒜₂ : univ ∉ 𝒜
m : ℕ
hm : m = 𝒜.card
⊢ supSum 𝒜 = ↑(card α) * ∑ k ∈ range (card α), (↑k)⁻¹
state_after: case h
α : Type u_1
inst✝² : Fintype α
inst✝¹ : DecidableEq α
ℬ : Finset (Finset α)
s : Finset α
inst✝ : Nonempty α
m : ℕ
ih :
  ∀ m_1 < m,
    ∀ {𝒜 : Finset (Finset α)},
      𝒜.Nonempty → univ ∉ 𝒜 → m_1 = 𝒜.card → supSum 𝒜 = ↑(card α) * ∑ k ∈ range (card α), (↑k)⁻¹
𝒜 : Finset (Finset α)
h𝒜₁ : 𝒜.Nonempty
h𝒜₂ : univ ∉ 𝒜
hm : m = 𝒜.card
⊢ supSum 𝒜 = ↑(card α) * ∑ k ∈ range (card α), (↑k)⁻¹
tactic: induction' m using Nat.strong_induction_on with m ih generalizing 𝒜
state_before: case h
α : Type u_1
inst✝² : Fintype α
inst✝¹ : DecidableEq α
ℬ : Finset (Finset α)
s : Finset α
inst✝ : Nonempty α
m : ℕ
ih :
  ∀ m_1 < m,
    ∀ {𝒜 : Finset (Finset α)},
      𝒜.Nonempty → univ ∉ 𝒜 → m_1 = 𝒜.card → supSum 𝒜 = ↑(card α) * ∑ k ∈ range (card α), (↑k)⁻¹
𝒜 : Finset (Finset α)
h𝒜₁ : 𝒜.Nonempty
h𝒜₂ : univ ∉ 𝒜
hm : m = 𝒜.card
⊢ supSum 𝒜 = ↑(card α) * ∑ k ∈ range (card α), (↑k)⁻¹
state_after: case h
α : Type u_1
inst✝² : Fintype α
inst✝¹ : DecidableEq α
ℬ : Finset (Finset α)
s : Finset α
inst✝ : Nonempty α
m : ℕ
𝒜 : Finset (Finset α)
h𝒜₁ : 𝒜.Nonempty
h𝒜₂ : univ ∉ 𝒜
hm : m = 𝒜.card
ih : ∀ (𝒜 : Finset (Finset α)), 𝒜.card < m → 𝒜.Nonempty → univ ∉ 𝒜 → supSum 𝒜 = ↑(card α) * ∑ k ∈ range (card α), (↑k)⁻¹
⊢ supSum 𝒜 = ↑(card α) * ∑ k ∈ range (card α), (↑k)⁻¹
tactic: replace ih := fun 𝒜 h𝒜 h𝒜₁ h𝒜₂ ↦ @ih _ h𝒜 𝒜 h𝒜₁ h𝒜₂ rfl
state_before: case h
α : Type u_1
inst✝² : Fintype α
inst✝¹ : DecidableEq α
ℬ : Finset (Finset α)
s : Finset α
inst✝ : Nonempty α
m : ℕ
𝒜 : Finset (Finset α)
h𝒜₁ : 𝒜.Nonempty
h𝒜₂ : univ ∉ 𝒜
hm : m = 𝒜.card
ih : ∀ (𝒜 : Finset (Finset α)), 𝒜.card < m → 𝒜.Nonempty → univ ∉ 𝒜 → supSum 𝒜 = ↑(card α) * ∑ k ∈ range (card α), (↑k)⁻¹
⊢ supSum 𝒜 = ↑(card α) * ∑ k ∈ range (card α), (↑k)⁻¹
state_after: case h.inl.intro
α : Type u_1
inst✝² : Fintype α
inst✝¹ : DecidableEq α
ℬ : Finset (Finset α)
s : Finset α
inst✝ : Nonempty α
m : ℕ
ih : ∀ (𝒜 : Finset (Finset α)), 𝒜.card < m → 𝒜.Nonempty → univ ∉ 𝒜 → supSum 𝒜 = ↑(card α) * ∑ k ∈ range (card α), (↑k)⁻¹
a : Finset α
h𝒜₁ : {a}.Nonempty
h𝒜₂ : univ ∉ {a}
hm : m = {a}.card
⊢ supSum {a} = ↑(card α) * ∑ k ∈ range (card α), (↑k)⁻¹

case h.inr
α : Type u_1
inst✝² : Fintype α
inst✝¹ : DecidableEq α
ℬ : Finset (Finset α)
s : Finset α
inst✝ : Nonempty α
m : ℕ
𝒜 : Finset (Finset α)
h𝒜₁ : 𝒜.Nonempty
h𝒜₂ : univ ∉ 𝒜
hm : m = 𝒜.card
ih : ∀ (𝒜 : Finset (Finset α)), 𝒜.card < m → 𝒜.Nonempty → univ ∉ 𝒜 → supSum 𝒜 = ↑(card α) * ∑ k ∈ range (card α), (↑k)⁻¹
h𝒜₃ : 𝒜.Nontrivial
⊢ supSum 𝒜 = ↑(card α) * ∑ k ∈ range (card α), (↑k)⁻¹
tactic: obtain ⟨a, rfl⟩ | h𝒜₃ := h𝒜₁.exists_eq_singleton_or_nontrivial
state_before: case h.inr
α : Type u_1
inst✝² : Fintype α
inst✝¹ : DecidableEq α
ℬ : Finset (Finset α)
s : Finset α
inst✝ : Nonempty α
m : ℕ
𝒜 : Finset (Finset α)
h𝒜₁ : 𝒜.Nonempty
h𝒜₂ : univ ∉ 𝒜
hm : m = 𝒜.card
ih : ∀ (𝒜 : Finset (Finset α)), 𝒜.card < m → 𝒜.Nonempty → univ ∉ 𝒜 → supSum 𝒜 = ↑(card α) * ∑ k ∈ range (card α), (↑k)⁻¹
h𝒜₃ : 𝒜.Nontrivial
⊢ supSum 𝒜 = ↑(card α) * ∑ k ∈ range (card α), (↑k)⁻¹
state_after: case h.inr.zero
α : Type u_1
inst✝² : Fintype α
inst✝¹ : DecidableEq α
ℬ : Finset (Finset α)
s : Finset α
inst✝ : Nonempty α
𝒜 : Finset (Finset α)
h𝒜₁ : 𝒜.Nonempty
h𝒜₂ : univ ∉ 𝒜
h𝒜₃ : 𝒜.Nontrivial
hm : 0 = 𝒜.card
ih : ∀ (𝒜 : Finset (Finset α)), 𝒜.card < 0 → 𝒜.Nonempty → univ ∉ 𝒜 → supSum 𝒜 = ↑(card α) * ∑ k ∈ range (card α), (↑k)⁻¹
⊢ supSum 𝒜 = ↑(card α) * ∑ k ∈ range (card α), (↑k)⁻¹

case h.inr.succ
α : Type u_1
inst✝² : Fintype α
inst✝¹ : DecidableEq α
ℬ : Finset (Finset α)
s : Finset α
inst✝ : Nonempty α
𝒜 : Finset (Finset α)
h𝒜₁ : 𝒜.Nonempty
h𝒜₂ : univ ∉ 𝒜
h𝒜₃ : 𝒜.Nontrivial
n✝ : ℕ
hm : n✝ + 1 = 𝒜.card
ih :
  ∀ (𝒜 : Finset (Finset α)),
    𝒜.card < n✝ + 1 → 𝒜.Nonempty → univ ∉ 𝒜 → supSum 𝒜 = ↑(card α) * ∑ k ∈ range (card α), (↑k)⁻¹
⊢ supSum 𝒜 = ↑(card α) * ∑ k ∈ range (card α), (↑k)⁻¹
tactic: cases m
state_before: case h.inr.succ
α : Type u_1
inst✝² : Fintype α
inst✝¹ : DecidableEq α
ℬ : Finset (Finset α)
s : Finset α
inst✝ : Nonempty α
𝒜 : Finset (Finset α)
h𝒜₁ : 𝒜.Nonempty
h𝒜₂ : univ ∉ 𝒜
h𝒜₃ : 𝒜.Nontrivial
n✝ : ℕ
hm : n✝ + 1 = 𝒜.card
ih :
  ∀ (𝒜 : Finset (Finset α)),
    𝒜.card < n✝ + 1 → 𝒜.Nonempty → univ ∉ 𝒜 → supSum 𝒜 = ↑(card α) * ∑ k ∈ range (card α), (↑k)⁻¹
⊢ supSum 𝒜 = ↑(card α) * ∑ k ∈ range (card α), (↑k)⁻¹
state_after: case h.inr.succ.intro.intro.intro.intro
α : Type u_1
inst✝² : Fintype α
inst✝¹ : DecidableEq α
ℬ : Finset (Finset α)
s✝ : Finset α
inst✝ : Nonempty α
s : Finset α
𝒜 : Finset (Finset α)
hs : s ∉ 𝒜
h𝒜₁ : (insert s 𝒜).Nonempty
h𝒜₂ : univ ∉ insert s 𝒜
h𝒜₃ : (insert s 𝒜).Nontrivial
ih :
  ∀ (𝒜_1 : Finset (Finset α)),
    𝒜_1.card < 𝒜.card + 1 → 𝒜_1.Nonempty → univ ∉ 𝒜_1 → supSum 𝒜_1 = ↑(card α) * ∑ k ∈ range (card α), (↑k)⁻¹
hm : 𝒜.card + 1 = (insert s 𝒜).card
⊢ supSum (insert s 𝒜) = ↑(card α) * ∑ k ∈ range (card α), (↑k)⁻¹
tactic: obtain ⟨s, 𝒜, hs, rfl, rfl⟩ := card_eq_succ.1 hm.symm
state_before: case h.inr.succ.intro.intro.intro.intro
α : Type u_1
inst✝² : Fintype α
inst✝¹ : DecidableEq α
ℬ : Finset (Finset α)
s✝ : Finset α
inst✝ : Nonempty α
s : Finset α
𝒜 : Finset (Finset α)
hs : s ∉ 𝒜
h𝒜₁ : (insert s 𝒜).Nonempty
h𝒜₂ : univ ∉ insert s 𝒜
h𝒜₃ : (insert s 𝒜).Nontrivial
ih :
  ∀ (𝒜_1 : Finset (Finset α)),
    𝒜_1.card < 𝒜.card + 1 → 𝒜_1.Nonempty → univ ∉ 𝒜_1 → supSum 𝒜_1 = ↑(card α) * ∑ k ∈ range (card α), (↑k)⁻¹
hm : 𝒜.card + 1 = (insert s 𝒜).card
⊢ supSum (insert s 𝒜) = ↑(card α) * ∑ k ∈ range (card α), (↑k)⁻¹
state_after: case h.inr.succ.intro.intro.intro.intro
α : Type u_1
inst✝² : Fintype α
inst✝¹ : DecidableEq α
ℬ : Finset (Finset α)
s✝ : Finset α
inst✝ : Nonempty α
s : Finset α
𝒜 : Finset (Finset α)
hs : s ∉ 𝒜
h𝒜₁ : (insert s 𝒜).Nonempty
h𝒜₂ : univ ∉ insert s 𝒜
h𝒜₃ : (insert s 𝒜).Nontrivial
ih :
  ∀ (𝒜_1 : Finset (Finset α)),
    𝒜_1.card < 𝒜.card + 1 → 𝒜_1.Nonempty → univ ∉ 𝒜_1 → supSum 𝒜_1 = ↑(card α) * ∑ k ∈ range (card α), (↑k)⁻¹
hm : 𝒜.card + 1 = (insert s 𝒜).card
h𝒜 : 𝒜.Nonempty
⊢ supSum (insert s 𝒜) = ↑(card α) * ∑ k ∈ range (card α), (↑k)⁻¹
tactic: have h𝒜 : 𝒜.Nonempty := nonempty_iff_ne_empty.2 (by rintro rfl; simp at h𝒜₃)
state_before: case h.inr.succ.intro.intro.intro.intro
α : Type u_1
inst✝² : Fintype α
inst✝¹ : DecidableEq α
ℬ : Finset (Finset α)
s✝ : Finset α
inst✝ : Nonempty α
s : Finset α
𝒜 : Finset (Finset α)
hs : s ∉ 𝒜
h𝒜₁ : (insert s 𝒜).Nonempty
h𝒜₂ : univ ∉ insert s 𝒜
h𝒜₃ : (insert s 𝒜).Nontrivial
ih :
  ∀ (𝒜_1 : Finset (Finset α)),
    𝒜_1.card < 𝒜.card + 1 → 𝒜_1.Nonempty → univ ∉ 𝒜_1 → supSum 𝒜_1 = ↑(card α) * ∑ k ∈ range (card α), (↑k)⁻¹
hm : 𝒜.card + 1 = (insert s 𝒜).card
h𝒜 : 𝒜.Nonempty
⊢ supSum (insert s 𝒜) = ↑(card α) * ∑ k ∈ range (card α), (↑k)⁻¹
state_after: case h.inr.succ.intro.intro.intro.intro.h𝒜
α : Type u_1
inst✝² : Fintype α
inst✝¹ : DecidableEq α
ℬ : Finset (Finset α)
s✝ : Finset α
inst✝ : Nonempty α
s : Finset α
𝒜 : Finset (Finset α)
hs : s ∉ 𝒜
h𝒜₁ : (insert s 𝒜).Nonempty
h𝒜₂ : univ ∉ insert s 𝒜
h𝒜₃ : (insert s 𝒜).Nontrivial
ih :
  ∀ (𝒜_1 : Finset (Finset α)),
    𝒜_1.card < 𝒜.card + 1 → 𝒜_1.Nonempty → univ ∉ 𝒜_1 → supSum 𝒜_1 = ↑(card α) * ∑ k ∈ range (card α), (↑k)⁻¹
hm : 𝒜.card + 1 = (insert s 𝒜).card
h𝒜 : 𝒜.Nonempty
⊢ (image (fun x => s ⊓ x) 𝒜).card < 𝒜.card + 1

case h.inr.succ.intro.intro.intro.intro.h𝒜₁
α : Type u_1
inst✝² : Fintype α
inst✝¹ : DecidableEq α
ℬ : Finset (Finset α)
s✝ : Finset α
inst✝ : Nonempty α
s : Finset α
𝒜 : Finset (Finset α)
hs : s ∉ 𝒜
h𝒜₁ : (insert s 𝒜).Nonempty
h𝒜₂ : univ ∉ insert s 𝒜
h𝒜₃ : (insert s 𝒜).Nontrivial
ih :
  ∀ (𝒜_1 : Finset (Finset α)),
    𝒜_1.card < 𝒜.card + 1 → 𝒜_1.Nonempty → univ ∉ 𝒜_1 → supSum 𝒜_1 = ↑(card α) * ∑ k ∈ range (card α), (↑k)⁻¹
hm : 𝒜.card + 1 = (insert s 𝒜).card
h𝒜 : 𝒜.Nonempty
⊢ (image (fun x => s ⊓ x) 𝒜).Nonempty

case h.inr.succ.intro.intro.intro.intro.h𝒜₂
α : Type u_1
inst✝² : Fintype α
inst✝¹ : DecidableEq α
ℬ : Finset (Finset α)
s✝ : Finset α
inst✝ : Nonempty α
s : Finset α
𝒜 : Finset (Finset α)
hs : s ∉ 𝒜
h𝒜₁ : (insert s 𝒜).Nonempty
h𝒜₂ : univ ∉ insert s 𝒜
h𝒜₃ : (insert s 𝒜).Nontrivial
ih :
  ∀ (𝒜_1 : Finset (Finset α)),
    𝒜_1.card < 𝒜.card + 1 → 𝒜_1.Nonempty → univ ∉ 𝒜_1 → supSum 𝒜_1 = ↑(card α) * ∑ k ∈ range (card α), (↑k)⁻¹
hm : 𝒜.card + 1 = (insert s 𝒜).card
h𝒜 : 𝒜.Nonempty
⊢ univ ∉ image (fun x => s ⊓ x) 𝒜

case h.inr.succ.intro.intro.intro.intro.h𝒜
α : Type u_1
inst✝² : Fintype α
inst✝¹ : DecidableEq α
ℬ : Finset (Finset α)
s✝ : Finset α
inst✝ : Nonempty α
s : Finset α
𝒜 : Finset (Finset α)
hs : s ∉ 𝒜
h𝒜₁ : (insert s 𝒜).Nonempty
h𝒜₂ : univ ∉ insert s 𝒜
h𝒜₃ : (insert s 𝒜).Nontrivial
ih :
  ∀ (𝒜_1 : Finset (Finset α)),
    𝒜_1.card < 𝒜.card + 1 → 𝒜_1.Nonempty → univ ∉ 𝒜_1 → supSum 𝒜_1 = ↑(card α) * ∑ k ∈ range (card α), (↑k)⁻¹
hm : 𝒜.card + 1 = (insert s 𝒜).card
h𝒜 : 𝒜.Nonempty
⊢ 𝒜.card < 𝒜.card + 1

case h.inr.succ.intro.intro.intro.intro.h𝒜₁
α : Type u_1
inst✝² : Fintype α
inst✝¹ : DecidableEq α
ℬ : Finset (Finset α)
s✝ : Finset α
inst✝ : Nonempty α
s : Finset α
𝒜 : Finset (Finset α)
hs : s ∉ 𝒜
h𝒜₁ : (insert s 𝒜).Nonempty
h𝒜₂ : univ ∉ insert s 𝒜
h𝒜₃ : (insert s 𝒜).Nontrivial
ih :
  ∀ (𝒜_1 : Finset (Finset α)),
    𝒜_1.card < 𝒜.card + 1 → 𝒜_1.Nonempty → univ ∉ 𝒜_1 → supSum 𝒜_1 = ↑(card α) * ∑ k ∈ range (card α), (↑k)⁻¹
hm : 𝒜.card + 1 = (insert s 𝒜).card
h𝒜 : 𝒜.Nonempty
⊢ 𝒜.Nonempty

case h.inr.succ.intro.intro.intro.intro.h𝒜₂
α : Type u_1
inst✝² : Fintype α
inst✝¹ : DecidableEq α
ℬ : Finset (Finset α)
s✝ : Finset α
inst✝ : Nonempty α
s : Finset α
𝒜 : Finset (Finset α)
hs : s ∉ 𝒜
h𝒜₁ : (insert s 𝒜).Nonempty
h𝒜₂ : univ ∉ insert s 𝒜
h𝒜₃ : (insert s 𝒜).Nontrivial
ih :
  ∀ (𝒜_1 : Finset (Finset α)),
    𝒜_1.card < 𝒜.card + 1 → 𝒜_1.Nonempty → univ ∉ 𝒜_1 → supSum 𝒜_1 = ↑(card α) * ∑ k ∈ range (card α), (↑k)⁻¹
hm : 𝒜.card + 1 = (insert s 𝒜).card
h𝒜 : 𝒜.Nonempty
⊢ univ ∉ 𝒜
tactic: rw [insert_eq, eq_sub_of_add_eq (supSum_union_add_supSum_infs _ _), singleton_infs,
    supSum_singleton (ne_of_mem_of_not_mem (mem_insert_self _ _) h𝒜₂), ih, ih, add_sub_cancel_right]