Theorem: Finset.le_card_falling_div_choose
File: Mathlib/Combinatorics/SetFamily/LYM.lean

Proof steps:
state_before: 𝕜 : Type u_1
α : Type u_2
inst✝² : LinearOrderedField 𝕜
inst✝¹ : DecidableEq α
k : ℕ
𝒜 : Finset (Finset α)
s : Finset α
inst✝ : Fintype α
hk : k ≤ Fintype.card α
h𝒜 : IsAntichain (fun x x_1 => x ⊆ x_1) ↑𝒜
⊢ ∑ r ∈ range (k + 1), ↑(𝒜 # (Fintype.card α - r)).card / ↑((Fintype.card α).choose (Fintype.card α - r)) ≤
    ↑(falling (Fintype.card α - k) 𝒜).card / ↑((Fintype.card α).choose (Fintype.card α - k))
state_after: case zero
𝕜 : Type u_1
α : Type u_2
inst✝² : LinearOrderedField 𝕜
inst✝¹ : DecidableEq α
k : ℕ
𝒜 : Finset (Finset α)
s : Finset α
inst✝ : Fintype α
h𝒜 : IsAntichain (fun x x_1 => x ⊆ x_1) ↑𝒜
hk : 0 ≤ Fintype.card α
⊢ ∑ r ∈ range (0 + 1), ↑(𝒜 # (Fintype.card α - r)).card / ↑((Fintype.card α).choose (Fintype.card α - r)) ≤
    ↑(falling (Fintype.card α - 0) 𝒜).card / ↑((Fintype.card α).choose (Fintype.card α - 0))

case succ
𝕜 : Type u_1
α : Type u_2
inst✝² : LinearOrderedField 𝕜
inst✝¹ : DecidableEq α
k✝ : ℕ
𝒜 : Finset (Finset α)
s : Finset α
inst✝ : Fintype α
h𝒜 : IsAntichain (fun x x_1 => x ⊆ x_1) ↑𝒜
k : ℕ
ih :
  k ≤ Fintype.card α →
    ∑ r ∈ range (k + 1), ↑(𝒜 # (Fintype.card α - r)).card / ↑((Fintype.card α).choose (Fintype.card α - r)) ≤
      ↑(falling (Fintype.card α - k) 𝒜).card / ↑((Fintype.card α).choose (Fintype.card α - k))
hk : k + 1 ≤ Fintype.card α
⊢ ∑ r ∈ range (k + 1 + 1), ↑(𝒜 # (Fintype.card α - r)).card / ↑((Fintype.card α).choose (Fintype.card α - r)) ≤
    ↑(falling (Fintype.card α - (k + 1)) 𝒜).card / ↑((Fintype.card α).choose (Fintype.card α - (k + 1)))
tactic: induction' k with k ih
state_before: case succ
𝕜 : Type u_1
α : Type u_2
inst✝² : LinearOrderedField 𝕜
inst✝¹ : DecidableEq α
k✝ : ℕ
𝒜 : Finset (Finset α)
s : Finset α
inst✝ : Fintype α
h𝒜 : IsAntichain (fun x x_1 => x ⊆ x_1) ↑𝒜
k : ℕ
ih :
  k ≤ Fintype.card α →
    ∑ r ∈ range (k + 1), ↑(𝒜 # (Fintype.card α - r)).card / ↑((Fintype.card α).choose (Fintype.card α - r)) ≤
      ↑(falling (Fintype.card α - k) 𝒜).card / ↑((Fintype.card α).choose (Fintype.card α - k))
hk : k + 1 ≤ Fintype.card α
⊢ ∑ r ∈ range (k + 1 + 1), ↑(𝒜 # (Fintype.card α - r)).card / ↑((Fintype.card α).choose (Fintype.card α - r)) ≤
    ↑(falling (Fintype.card α - (k + 1)) 𝒜).card / ↑((Fintype.card α).choose (Fintype.card α - (k + 1)))
state_after: case succ
𝕜 : Type u_1
α : Type u_2
inst✝² : LinearOrderedField 𝕜
inst✝¹ : DecidableEq α
k✝ : ℕ
𝒜 : Finset (Finset α)
s : Finset α
inst✝ : Fintype α
h𝒜 : IsAntichain (fun x x_1 => x ⊆ x_1) ↑𝒜
k : ℕ
ih :
  k ≤ Fintype.card α →
    ∑ r ∈ range (k + 1), ↑(𝒜 # (Fintype.card α - r)).card / ↑((Fintype.card α).choose (Fintype.card α - r)) ≤
      ↑(falling (Fintype.card α - k) 𝒜).card / ↑((Fintype.card α).choose (Fintype.card α - k))
hk : k + 1 ≤ Fintype.card α
⊢ ↑(𝒜 # (Fintype.card α - (k + 1))).card / ↑((Fintype.card α).choose (Fintype.card α - (k + 1))) +
      ∑ x ∈ range (k + 1), ↑(𝒜 # (Fintype.card α - x)).card / ↑((Fintype.card α).choose (Fintype.card α - x)) ≤
    ↑(𝒜 # (Fintype.card α - (k + 1))).card / ↑((Fintype.card α).choose (Fintype.card α - (k + 1))) +
      ↑(∂ (falling (Fintype.card α - (k + 1) + 1) 𝒜)).card / ↑((Fintype.card α).choose (Fintype.card α - (k + 1)))
tactic: rw [sum_range_succ, ← slice_union_shadow_falling_succ,
    card_union_of_disjoint (IsAntichain.disjoint_slice_shadow_falling h𝒜), cast_add, _root_.add_div,
    add_comm]
state_before: case succ
𝕜 : Type u_1
α : Type u_2
inst✝² : LinearOrderedField 𝕜
inst✝¹ : DecidableEq α
k✝ : ℕ
𝒜 : Finset (Finset α)
s : Finset α
inst✝ : Fintype α
h𝒜 : IsAntichain (fun x x_1 => x ⊆ x_1) ↑𝒜
k : ℕ
ih :
  k ≤ Fintype.card α →
    ∑ r ∈ range (k + 1), ↑(𝒜 # (Fintype.card α - r)).card / ↑((Fintype.card α).choose (Fintype.card α - r)) ≤
      ↑(falling (Fintype.card α - k) 𝒜).card / ↑((Fintype.card α).choose (Fintype.card α - k))
hk : k + 1 ≤ Fintype.card α
⊢ ↑(𝒜 # (Fintype.card α - (k + 1))).card / ↑((Fintype.card α).choose (Fintype.card α - (k + 1))) +
      ∑ x ∈ range (k + 1), ↑(𝒜 # (Fintype.card α - x)).card / ↑((Fintype.card α).choose (Fintype.card α - x)) ≤
    ↑(𝒜 # (Fintype.card α - (k + 1))).card / ↑((Fintype.card α).choose (Fintype.card α - (k + 1))) +
      ↑(∂ (falling (Fintype.card α - (k + 1) + 1) 𝒜)).card / ↑((Fintype.card α).choose (Fintype.card α - (k + 1)))
state_after: case succ
𝕜 : Type u_1
α : Type u_2
inst✝² : LinearOrderedField 𝕜
inst✝¹ : DecidableEq α
k✝ : ℕ
𝒜 : Finset (Finset α)
s : Finset α
inst✝ : Fintype α
h𝒜 : IsAntichain (fun x x_1 => x ⊆ x_1) ↑𝒜
k : ℕ
ih :
  k ≤ Fintype.card α →
    ∑ r ∈ range (k + 1), ↑(𝒜 # (Fintype.card α - r)).card / ↑((Fintype.card α).choose (Fintype.card α - r)) ≤
      ↑(falling (Fintype.card α - k) 𝒜).card / ↑((Fintype.card α).choose (Fintype.card α - k))
hk : k + 1 ≤ Fintype.card α
⊢ ↑(𝒜 # (Fintype.card α - k - 1)).card / ↑((Fintype.card α).choose (Fintype.card α - k - 1)) +
      ∑ x ∈ range (k + 1), ↑(𝒜 # (Fintype.card α - x)).card / ↑((Fintype.card α).choose (Fintype.card α - x)) ≤
    ↑(𝒜 # (Fintype.card α - k - 1)).card / ↑((Fintype.card α).choose (Fintype.card α - k - 1)) +
      ↑(∂ (falling (Fintype.card α - k) 𝒜)).card / ↑((Fintype.card α).choose (Fintype.card α - k - 1))
tactic: rw [← tsub_tsub, tsub_add_cancel_of_le (le_tsub_of_add_le_left hk)]
state_before: case succ
𝕜 : Type u_1
α : Type u_2
inst✝² : LinearOrderedField 𝕜
inst✝¹ : DecidableEq α
k✝ : ℕ
𝒜 : Finset (Finset α)
s : Finset α
inst✝ : Fintype α
h𝒜 : IsAntichain (fun x x_1 => x ⊆ x_1) ↑𝒜
k : ℕ
ih :
  k ≤ Fintype.card α →
    ∑ r ∈ range (k + 1), ↑(𝒜 # (Fintype.card α - r)).card / ↑((Fintype.card α).choose (Fintype.card α - r)) ≤
      ↑(falling (Fintype.card α - k) 𝒜).card / ↑((Fintype.card α).choose (Fintype.card α - k))
hk : k + 1 ≤ Fintype.card α
⊢ ↑(𝒜 # (Fintype.card α - k - 1)).card / ↑((Fintype.card α).choose (Fintype.card α - k - 1)) +
      ∑ x ∈ range (k + 1), ↑(𝒜 # (Fintype.card α - x)).card / ↑((Fintype.card α).choose (Fintype.card α - x)) ≤
    ↑(𝒜 # (Fintype.card α - k - 1)).card / ↑((Fintype.card α).choose (Fintype.card α - k - 1)) +
      ↑(∂ (falling (Fintype.card α - k) 𝒜)).card / ↑((Fintype.card α).choose (Fintype.card α - k - 1))
state_after: no goals
tactic: exact
    add_le_add_left
      ((ih <| le_of_succ_le hk).trans <|
        card_div_choose_le_card_shadow_div_choose (tsub_pos_iff_lt.2 <| Nat.succ_le_iff.1 hk).ne' <|
          sized_falling _ _) _