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

Proof steps:
state_before: α : Type u_1
inst✝² : Fintype α
inst✝¹ : DecidableEq α
𝒜 ℬ : Finset (Finset α)
s : Finset α
inst✝ : Nonempty α
hs : s ≠ univ
⊢ supSum {s} = ↑(card α) * ∑ k ∈ range (card α), (↑k)⁻¹
state_after: α : Type u_1
inst✝² : Fintype α
inst✝¹ : DecidableEq α
𝒜 ℬ : Finset (Finset α)
s : Finset α
inst✝ : Nonempty α
hs : s ≠ univ
this :
  ∀ (t : Finset α),
    (↑(card α) - ↑({s}.truncatedSup t).card) / ((↑(card α) - ↑t.card) * ↑((card α).choose t.card)) =
      if t ⊆ s then (↑(card α) - ↑s.card) / ((↑(card α) - ↑t.card) * ↑((card α).choose t.card)) else 0
⊢ supSum {s} = ↑(card α) * ∑ k ∈ range (card α), (↑k)⁻¹
tactic: have : ∀ t : Finset α,
    (card α - (truncatedSup {s} t).card : ℚ) / ((card α - t.card) * (card α).choose t.card) =
    if t ⊆ s then (card α - s.card : ℚ) / ((card α - t.card) * (card α).choose t.card) else 0 := by
    rintro t
    simp_rw [truncatedSup_singleton, le_iff_subset]
    split_ifs <;> simp [card_univ]
state_before: α : Type u_1
inst✝² : Fintype α
inst✝¹ : DecidableEq α
𝒜 ℬ : Finset (Finset α)
s : Finset α
inst✝ : Nonempty α
hs : s ≠ univ
this :
  ∀ (t : Finset α),
    (↑(card α) - ↑({s}.truncatedSup t).card) / ((↑(card α) - ↑t.card) * ↑((card α).choose t.card)) =
      if t ⊆ s then (↑(card α) - ↑s.card) / ((↑(card α) - ↑t.card) * ↑((card α).choose t.card)) else 0
⊢ supSum {s} = ↑(card α) * ∑ k ∈ range (card α), (↑k)⁻¹
state_after: α : Type u_1
inst✝² : Fintype α
inst✝¹ : DecidableEq α
𝒜 ℬ : Finset (Finset α)
s : Finset α
inst✝ : Nonempty α
hs : s ≠ univ
this :
  ∀ (t : Finset α),
    (↑(card α) - ↑({s}.truncatedSup t).card) / ((↑(card α) - ↑t.card) * ↑((card α).choose t.card)) =
      if t ⊆ s then (↑(card α) - ↑s.card) / ((↑(card α) - ↑t.card) * ↑((card α).choose t.card)) else 0
⊢ 1 = ∑ x : Finset α, (↑(card α) - ↑({s}.truncatedSup x).card) / ((↑(card α) - ↑x.card) * ↑((card α).choose x.card))
tactic: simp_rw [← sub_eq_of_eq_add (Fintype.sum_div_mul_card_choose_card α), eq_sub_iff_add_eq,
    ← eq_sub_iff_add_eq', supSum, ← sum_sub_distrib, ← sub_div]
state_before: α : Type u_1
inst✝² : Fintype α
inst✝¹ : DecidableEq α
𝒜 ℬ : Finset (Finset α)
s : Finset α
inst✝ : Nonempty α
hs : s ≠ univ
this :
  ∀ (t : Finset α),
    (↑(card α) - ↑({s}.truncatedSup t).card) / ((↑(card α) - ↑t.card) * ↑((card α).choose t.card)) =
      if t ⊆ s then (↑(card α) - ↑s.card) / ((↑(card α) - ↑t.card) * ↑((card α).choose t.card)) else 0
⊢ 1 = ∑ x : Finset α, (↑(card α) - ↑({s}.truncatedSup x).card) / ((↑(card α) - ↑x.card) * ↑((card α).choose x.card))
state_after: α : Type u_1
inst✝² : Fintype α
inst✝¹ : DecidableEq α
𝒜 ℬ : Finset (Finset α)
s : Finset α
inst✝ : Nonempty α
hs : s ≠ univ
this :
  ∀ (t : Finset α),
    (↑(card α) - ↑({s}.truncatedSup t).card) / ((↑(card α) - ↑t.card) * ↑((card α).choose t.card)) =
      if t ⊆ s then (↑(card α) - ↑s.card) / ((↑(card α) - ↑t.card) * ↑((card α).choose t.card)) else 0
⊢ ∑ j ∈ range (s.card + 1),
      ∑ t ∈ powersetCard j s, (↑(card α) - ↑s.card) / ((↑(card α) - ↑t.card) * ↑((card α).choose t.card)) =
    ∑ i ∈ range (s.card + 1), ↑(s.card.choose i) * (↑(card α) - ↑s.card) / ((↑(card α) - ↑i) * ↑((card α).choose i))
tactic: rw [sum_congr rfl fun t _ ↦ this t, sum_ite, sum_const_zero, add_zero, filter_subset_univ,
    sum_powerset, ← binomial_sum_eq ((card_lt_iff_ne_univ _).2 hs), eq_comm]
state_before: α : Type u_1
inst✝² : Fintype α
inst✝¹ : DecidableEq α
𝒜 ℬ : Finset (Finset α)
s : Finset α
inst✝ : Nonempty α
hs : s ≠ univ
this :
  ∀ (t : Finset α),
    (↑(card α) - ↑({s}.truncatedSup t).card) / ((↑(card α) - ↑t.card) * ↑((card α).choose t.card)) =
      if t ⊆ s then (↑(card α) - ↑s.card) / ((↑(card α) - ↑t.card) * ↑((card α).choose t.card)) else 0
⊢ ∑ j ∈ range (s.card + 1),
      ∑ t ∈ powersetCard j s, (↑(card α) - ↑s.card) / ((↑(card α) - ↑t.card) * ↑((card α).choose t.card)) =
    ∑ i ∈ range (s.card + 1), ↑(s.card.choose i) * (↑(card α) - ↑s.card) / ((↑(card α) - ↑i) * ↑((card α).choose i))
state_after: α : Type u_1
inst✝² : Fintype α
inst✝¹ : DecidableEq α
𝒜 ℬ : Finset (Finset α)
s : Finset α
inst✝ : Nonempty α
hs : s ≠ univ
this :
  ∀ (t : Finset α),
    (↑(card α) - ↑({s}.truncatedSup t).card) / ((↑(card α) - ↑t.card) * ↑((card α).choose t.card)) =
      if t ⊆ s then (↑(card α) - ↑s.card) / ((↑(card α) - ↑t.card) * ↑((card α).choose t.card)) else 0
n : ℕ
x✝ : n ∈ range (s.card + 1)
⊢ ∑ t ∈ powersetCard n s, (↑(card α) - ↑s.card) / ((↑(card α) - ↑t.card) * ↑((card α).choose t.card)) =
    ↑(s.card.choose n) * (↑(card α) - ↑s.card) / ((↑(card α) - ↑n) * ↑((card α).choose n))
tactic: refine sum_congr rfl fun n _ ↦ ?_
state_before: α : Type u_1
inst✝² : Fintype α
inst✝¹ : DecidableEq α
𝒜 ℬ : Finset (Finset α)
s : Finset α
inst✝ : Nonempty α
hs : s ≠ univ
this :
  ∀ (t : Finset α),
    (↑(card α) - ↑({s}.truncatedSup t).card) / ((↑(card α) - ↑t.card) * ↑((card α).choose t.card)) =
      if t ⊆ s then (↑(card α) - ↑s.card) / ((↑(card α) - ↑t.card) * ↑((card α).choose t.card)) else 0
n : ℕ
x✝ : n ∈ range (s.card + 1)
⊢ ∑ t ∈ powersetCard n s, (↑(card α) - ↑s.card) / ((↑(card α) - ↑t.card) * ↑((card α).choose t.card)) =
    ↑(s.card.choose n) * (↑(card α) - ↑s.card) / ((↑(card α) - ↑n) * ↑((card α).choose n))
state_after: α : Type u_1
inst✝² : Fintype α
inst✝¹ : DecidableEq α
𝒜 ℬ : Finset (Finset α)
s : Finset α
inst✝ : Nonempty α
hs : s ≠ univ
this :
  ∀ (t : Finset α),
    (↑(card α) - ↑({s}.truncatedSup t).card) / ((↑(card α) - ↑t.card) * ↑((card α).choose t.card)) =
      if t ⊆ s then (↑(card α) - ↑s.card) / ((↑(card α) - ↑t.card) * ↑((card α).choose t.card)) else 0
n : ℕ
x✝ : n ∈ range (s.card + 1)
⊢ ∑ t ∈ powersetCard n s, (↑(card α) - ↑s.card) / ((↑(card α) - ↑t.card) * ↑((card α).choose t.card)) =
    s.card.choose n • ((↑(card α) - ↑s.card) / ((↑(card α) - ↑n) * ↑((card α).choose n)))
tactic: rw [mul_div_assoc, ← nsmul_eq_mul]
state_before: α : Type u_1
inst✝² : Fintype α
inst✝¹ : DecidableEq α
𝒜 ℬ : Finset (Finset α)
s : Finset α
inst✝ : Nonempty α
hs : s ≠ univ
this :
  ∀ (t : Finset α),
    (↑(card α) - ↑({s}.truncatedSup t).card) / ((↑(card α) - ↑t.card) * ↑((card α).choose t.card)) =
      if t ⊆ s then (↑(card α) - ↑s.card) / ((↑(card α) - ↑t.card) * ↑((card α).choose t.card)) else 0
n : ℕ
x✝ : n ∈ range (s.card + 1)
⊢ ∑ t ∈ powersetCard n s, (↑(card α) - ↑s.card) / ((↑(card α) - ↑t.card) * ↑((card α).choose t.card)) =
    s.card.choose n • ((↑(card α) - ↑s.card) / ((↑(card α) - ↑n) * ↑((card α).choose n)))
state_after: no goals
tactic: exact sum_powersetCard n s fun m ↦ (card α - s.card : ℚ) / ((card α - m) * (card α).choose m)