Equal Power Sums Imply Equal Symmetric Functions

StatusFully Proven
TypeTheorem
ModuleChebyshevCircles.Proofs.NewtonIdentities

Statement

Theorem Equal Power Sums Imply Equal Symmetric Functions

If $|s| = |t|$ and $p_j(s) = p_j(t)$ for $1 \le j < |s|$, then $e_m(s) = e_m(t)$ for all $m < |s|$.

theorem esymm_eq_of_psum_eq (s t : Multiset ) (h_card : s.card = t.card)
    (h_psum :  j, 0 < j  j < s.card  (s.map (· ^ j)).sum = (t.map (· ^ j)).sum) :
     m, m < s.card  s.esymm m = t.esymm m := by
Proof

Strong induction on $m$. The base case $m = 0$ gives $e_0 = 1$. For $m > 0$, Newton's identity expresses $m \cdot e_m$ in terms of smaller $e_i$ (equal by induction) and power sums (equal by hypothesis), then cancel $m \ne 0$.


  intro m hm
  -- We prove by strong induction on m
  induction m using Nat.strong_induction_on with
  | h m IH =>
    by_cases hm_zero : m = 0
    · -- Base case: esymm 0 = 1 for any multiset
      rw [hm_zero]
      simp [Multiset.esymm]
    · -- Inductive case: m > 0, use Newton's identity
      have hm_pos : 0 < m := Nat.pos_of_ne_zero hm_zero
      -- Apply Newton's identity to both s and t
      have h_newton_s := multiset_newton_identity s m hm_pos
      have h_newton_t := multiset_newton_identity t m hm_pos
      -- The RHS of Newton's identity should be equal for s and t
      have h_rhs_eq : (Finset.antidiagonal m).sum (fun a =>
            if a.1 < m then (-1)^a.1 * s.esymm a.1 * (s.map (fun x => x ^ a.2)).sum
            else 0) =
          (Finset.antidiagonal m).sum (fun a =>
            if a.1 < m then (-1)^a.1 * t.esymm a.1 * (t.map (fun x => x ^ a.2)).sum
            else 0) := by
        apply Finset.sum_congr rfl
        intro a ha
        -- a ∈ antidiagonal m means a.1 + a.2 = m
        have h_sum : a.1 + a.2 = m := Finset.mem_antidiagonal.mp ha
        split_ifs with ha_lt
        · -- When a.1 < m, show the terms are equal
          congr 1
          · congr 1  -- esymm a.1 equal by IH
            have ha1_bound : a.1 < s.card := by omega
            exact IH a.1 ha_lt ha1_bound
          · -- Power sums equal by hypothesis
            by_cases ha2_zero : a.2 = 0
            · -- When a.2 = 0, both power sums are cardinalities
              simp only [ha2_zero, pow_zero]
              -- Simplify x^0 = 1, then sum of 1s equals card
              convert_to (s.card : ) = (t.card : ) using 1 <;>
                simp
              exact_mod_cast h_card
            · have ha2_pos : 0 < a.2 := Nat.pos_of_ne_zero ha2_zero
              have ha2_bound : a.2 < s.card := by omega
              exact h_psum a.2 ha2_pos ha2_bound
        · rfl
      -- Now use Newton's identity to extract esymm m
      have h_eq : (m : ) * s.esymm m = (m : ) * t.esymm m := by
        rw [h_newton_s, h_newton_t, h_rhs_eq]
      -- Cancel the factor of m
      have hm_ne_zero : (m : )  0 := by
        exact_mod_cast hm_zero
      exact mul_left_cancel₀ hm_ne_zero h_eq

Dependencies (uses)

Dependents (used by)

Neighborhood

Legend
Not Ready
Work in Progress
Sorry (theorems only)
Proven/Defined
Fully Proven (theorems only)
Axiom
Mathlib Ready
Theorems/Lemmas
Definitions
Axioms