Theorem: MvPolynomial.NewtonIdentities.sum_filter_pairs_eq_sum_powersetCard_mem_filter_antidiagonal_sum
File: Mathlib/RingTheory/MvPolynomial/NewtonIdentities.lean

tactic: apply sum_finset_product
state_before: σ : Type u_1
inst✝² : Fintype σ
inst✝¹ : DecidableEq σ
R : Type u_2
inst✝ : CommRing R
k : ℕ
a : ℕ × ℕ
ha : a ∈ filter (fun a => a.1 < k) (antidiagonal k)
f : Finset σ × σ → MvPolynomial σ R
⊢ ∑ t ∈ filter (fun t => t.1.card = a.1) (MvPolynomial.NewtonIdentities.pairs σ k), f t =
    ∑ A ∈ powersetCard a.1 univ, ∑ j : σ, f (A, j)
state_after: case h
σ : Type u_1
inst✝² : Fintype σ
inst✝¹ : DecidableEq σ
R : Type u_2
inst✝ : CommRing R
k : ℕ
a : ℕ × ℕ
ha : a ∈ filter (fun a => a.1 < k) (antidiagonal k)
f : Finset σ × σ → MvPolynomial σ R
⊢ ∀ (p : Finset σ × σ),
    p ∈ filter (fun t => t.1.card = a.1) (MvPolynomial.NewtonIdentities.pairs σ k) ↔
      p.1 ∈ powersetCard a.1 univ ∧ p.2 ∈ univ

tactic: simp only [mem_filter, mem_powersetCard_univ, mem_univ, and_true, and_iff_right_iff_imp]
state_before: case h
σ : Type u_1
inst✝² : Fintype σ
inst✝¹ : DecidableEq σ
R : Type u_2
inst✝ : CommRing R
k : ℕ
a : ℕ × ℕ
ha : a ∈ filter (fun a => a.1 < k) (antidiagonal k)
f : Finset σ × σ → MvPolynomial σ R
⊢ ∀ (p : Finset σ × σ),
    p ∈ filter (fun t => t.1.card = a.1) (MvPolynomial.NewtonIdentities.pairs σ k) ↔
      p.1 ∈ powersetCard a.1 univ ∧ p.2 ∈ univ
state_after: case h
σ : Type u_1
inst✝² : Fintype σ
inst✝¹ : DecidableEq σ
R : Type u_2
inst✝ : CommRing R
k : ℕ
a : ℕ × ℕ
ha : a ∈ filter (fun a => a.1 < k) (antidiagonal k)
f : Finset σ × σ → MvPolynomial σ R
⊢ ∀ (p : Finset σ × σ), p.1.card = a.1 → p ∈ MvPolynomial.NewtonIdentities.pairs σ k

tactic: rintro p hp
state_before: case h
σ : Type u_1
inst✝² : Fintype σ
inst✝¹ : DecidableEq σ
R : Type u_2
inst✝ : CommRing R
k : ℕ
a : ℕ × ℕ
ha : a ∈ filter (fun a => a.1 < k) (antidiagonal k)
f : Finset σ × σ → MvPolynomial σ R
⊢ ∀ (p : Finset σ × σ), p.1.card = a.1 → p ∈ MvPolynomial.NewtonIdentities.pairs σ k
state_after: case h
σ : Type u_1
inst✝² : Fintype σ
inst✝¹ : DecidableEq σ
R : Type u_2
inst✝ : CommRing R
k : ℕ
a : ℕ × ℕ
ha : a ∈ filter (fun a => a.1 < k) (antidiagonal k)
f : Finset σ × σ → MvPolynomial σ R
p : Finset σ × σ
hp : p.1.card = a.1
⊢ p ∈ MvPolynomial.NewtonIdentities.pairs σ k

tactic: have : card p.fst ≤ k := by apply le_of_lt; aesop
state_before: case h
σ : Type u_1
inst✝² : Fintype σ
inst✝¹ : DecidableEq σ
R : Type u_2
inst✝ : CommRing R
k : ℕ
a : ℕ × ℕ
ha : a ∈ filter (fun a => a.1 < k) (antidiagonal k)
f : Finset σ × σ → MvPolynomial σ R
p : Finset σ × σ
hp : p.1.card = a.1
⊢ p ∈ MvPolynomial.NewtonIdentities.pairs σ k
state_after: case h
σ : Type u_1
inst✝² : Fintype σ
inst✝¹ : DecidableEq σ
R : Type u_2
inst✝ : CommRing R
k : ℕ
a : ℕ × ℕ
ha : a ∈ filter (fun a => a.1 < k) (antidiagonal k)
f : Finset σ × σ → MvPolynomial σ R
p : Finset σ × σ
hp : p.1.card = a.1
this : p.1.card ≤ k
⊢ p ∈ MvPolynomial.NewtonIdentities.pairs σ k

tactic: aesop
state_before: case h
σ : Type u_1
inst✝² : Fintype σ
inst✝¹ : DecidableEq σ
R : Type u_2
inst✝ : CommRing R
k : ℕ
a : ℕ × ℕ
ha : a ∈ filter (fun a => a.1 < k) (antidiagonal k)
f : Finset σ × σ → MvPolynomial σ R
p : Finset σ × σ
hp : p.1.card = a.1
this : p.1.card ≤ k
⊢ p ∈ MvPolynomial.NewtonIdentities.pairs σ k
state_after: no goals

tactic: apply le_of_lt
state_before: σ : Type u_1
inst✝² : Fintype σ
inst✝¹ : DecidableEq σ
R : Type u_2
inst✝ : CommRing R
k : ℕ
a : ℕ × ℕ
ha : a ∈ filter (fun a => a.1 < k) (antidiagonal k)
f : Finset σ × σ → MvPolynomial σ R
p : Finset σ × σ
hp : p.1.card = a.1
⊢ p.1.card ≤ k
state_after: case a
σ : Type u_1
inst✝² : Fintype σ
inst✝¹ : DecidableEq σ
R : Type u_2
inst✝ : CommRing R
k : ℕ
a : ℕ × ℕ
ha : a ∈ filter (fun a => a.1 < k) (antidiagonal k)
f : Finset σ × σ → MvPolynomial σ R
p : Finset σ × σ
hp : p.1.card = a.1
⊢ p.1.card < k

tactic: aesop
state_before: case a
σ : Type u_1
inst✝² : Fintype σ
inst✝¹ : DecidableEq σ
R : Type u_2
inst✝ : CommRing R
k : ℕ
a : ℕ × ℕ
ha : a ∈ filter (fun a => a.1 < k) (antidiagonal k)
f : Finset σ × σ → MvPolynomial σ R
p : Finset σ × σ
hp : p.1.card = a.1
⊢ p.1.card < k
state_after: no goals