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

tactic: classical
rw [NewtonIdentities.esymm_to_weight σ R k, NewtonIdentities.esymm_mul_psum_to_weight σ R k,
  eq_comm, ← sub_eq_zero, sub_eq_add_neg, neg_mul_eq_neg_mul,
  neg_eq_neg_one_mul ((-1 : MvPolynomial σ R) ^ k)]
nth_rw 2 [← pow_one (-1 : MvPolynomial σ R)]
rw [← pow_add, add_comm 1 k, ← left_distrib,
  ← sum_disjUnion (NewtonIdentities.disjoint_filter_pairs_lt_filter_pairs_eq σ k),
  NewtonIdentities.disjUnion_filter_pairs_eq_pairs σ k, NewtonIdentities.weight_sum σ R k,
  neg_one_pow_mul_eq_zero_iff.mpr rfl]
state_before: σ : Type u_1
inst✝¹ : Fintype σ
R : Type u_2
inst✝ : CommRing R
k : ℕ
⊢ ↑k * esymm σ R k =
    (-1) ^ (k + 1) * ∑ a ∈ filter (fun a => a.1 < k) (antidiagonal k), (-1) ^ a.1 * esymm σ R a.1 * psum σ R a.2
state_after: no goals

tactic: rw [NewtonIdentities.esymm_to_weight σ R k, NewtonIdentities.esymm_mul_psum_to_weight σ R k,
  eq_comm, ← sub_eq_zero, sub_eq_add_neg, neg_mul_eq_neg_mul,
  neg_eq_neg_one_mul ((-1 : MvPolynomial σ R) ^ k)]
state_before: σ : Type u_1
inst✝¹ : Fintype σ
R : Type u_2
inst✝ : CommRing R
k : ℕ
⊢ ↑k * esymm σ R k =
    (-1) ^ (k + 1) * ∑ a ∈ filter (fun a => a.1 < k) (antidiagonal k), (-1) ^ a.1 * esymm σ R a.1 * psum σ R a.2
state_after: σ : Type u_1
inst✝¹ : Fintype σ
R : Type u_2
inst✝ : CommRing R
k : ℕ
⊢ (-1) ^ (k + 1) *
        ∑ t ∈ filter (fun t => t.1.card < k) (MvPolynomial.NewtonIdentities.pairs σ k),
          MvPolynomial.NewtonIdentities.weight σ R k t +
      -1 * (-1) ^ k *
        ∑ t ∈ filter (fun t => t.1.card = k) (MvPolynomial.NewtonIdentities.pairs σ k),
          MvPolynomial.NewtonIdentities.weight σ R k t =
    0

tactic: nth_rw 2 [← pow_one (-1 : MvPolynomial σ R)]
state_before: σ : Type u_1
inst✝¹ : Fintype σ
R : Type u_2
inst✝ : CommRing R
k : ℕ
⊢ (-1) ^ (k + 1) *
        ∑ t ∈ filter (fun t => t.1.card < k) (MvPolynomial.NewtonIdentities.pairs σ k),
          MvPolynomial.NewtonIdentities.weight σ R k t +
      -1 * (-1) ^ k *
        ∑ t ∈ filter (fun t => t.1.card = k) (MvPolynomial.NewtonIdentities.pairs σ k),
          MvPolynomial.NewtonIdentities.weight σ R k t =
    0
state_after: σ : Type u_1
inst✝¹ : Fintype σ
R : Type u_2
inst✝ : CommRing R
k : ℕ
⊢ (-1) ^ (k + 1) *
        ∑ t ∈ filter (fun t => t.1.card < k) (MvPolynomial.NewtonIdentities.pairs σ k),
          MvPolynomial.NewtonIdentities.weight σ R k t +
      (-1) ^ 1 * (-1) ^ k *
        ∑ t ∈ filter (fun t => t.1.card = k) (MvPolynomial.NewtonIdentities.pairs σ k),
          MvPolynomial.NewtonIdentities.weight σ R k t =
    0

tactic: rw [← pow_add, add_comm 1 k, ← left_distrib,
  ← sum_disjUnion (NewtonIdentities.disjoint_filter_pairs_lt_filter_pairs_eq σ k),
  NewtonIdentities.disjUnion_filter_pairs_eq_pairs σ k, NewtonIdentities.weight_sum σ R k,
  neg_one_pow_mul_eq_zero_iff.mpr rfl]
state_before: σ : Type u_1
inst✝¹ : Fintype σ
R : Type u_2
inst✝ : CommRing R
k : ℕ
⊢ (-1) ^ (k + 1) *
        ∑ t ∈ filter (fun t => t.1.card < k) (MvPolynomial.NewtonIdentities.pairs σ k),
          MvPolynomial.NewtonIdentities.weight σ R k t +
      (-1) ^ 1 * (-1) ^ k *
        ∑ t ∈ filter (fun t => t.1.card = k) (MvPolynomial.NewtonIdentities.pairs σ k),
          MvPolynomial.NewtonIdentities.weight σ R k t =
    0
state_after: no goals