File: Mathlib/RingTheory/MvPolynomial/Symmetric.lean

full_name: Multiset.esymm
code: /-- The `n`th elementary symmetric function evaluated at the elements of `s` -/
def esymm (s : Multiset R) (n : ℕ) : R 
goal: R

full_name: Finset.esymm_map_val
code: theorem _root_.Finset.esymm_map_val {σ} (f : σ → R) (s : Finset σ) (n : ℕ) :
    (s.val.map f).esymm n = (s.powersetCard n).sum fun t => t.prod f 
goal: (Multiset.map f s.val).esymm n = ∑ t ∈ Finset.powersetCard n s, t.prod f

full_name: MvPolynomial.IsSymmetric
code: /-- A `MvPolynomial φ` is symmetric if it is invariant under
permutations of its variables by the `rename` operation -/
def IsSymmetric [CommSemiring R] (φ : MvPolynomial σ R) : Prop 
goal: Prop

full_name: MvPolynomial.symmetricSubalgebra
code: /-- The subalgebra of symmetric `MvPolynomial`s. -/
def symmetricSubalgebra [CommSemiring R] : Subalgebra R (MvPolynomial σ R) 
goal: Subalgebra R (MvPolynomial σ R)

full_name: MvPolynomial.mem_symmetricSubalgebra
code: @[simp]
theorem mem_symmetricSubalgebra [CommSemiring R] (p : MvPolynomial σ R) :
    p ∈ symmetricSubalgebra σ R ↔ p.IsSymmetric 
goal: p ∈ MvPolynomial.symmetricSubalgebra σ R ↔ p.IsSymmetric

full_name: MvPolynomial.IsSymmetric.C
code: @[simp]
theorem C (r : R) : IsSymmetric (C r : MvPolynomial σ R) 
goal: (MvPolynomial.C r).IsSymmetric

full_name: MvPolynomial.IsSymmetric.zero
code: @[simp]
theorem zero : IsSymmetric (0 : MvPolynomial σ R) 
goal: MvPolynomial.IsSymmetric 0

full_name: MvPolynomial.IsSymmetric.one
code: @[simp]
theorem one : IsSymmetric (1 : MvPolynomial σ R) 
goal: MvPolynomial.IsSymmetric 1

full_name: MvPolynomial.IsSymmetric.add
code: theorem add (hφ : IsSymmetric φ) (hψ : IsSymmetric ψ) : IsSymmetric (φ + ψ) 
goal: (φ + ψ).IsSymmetric

full_name: MvPolynomial.IsSymmetric.mul
code: theorem mul (hφ : IsSymmetric φ) (hψ : IsSymmetric ψ) : IsSymmetric (φ * ψ) 
goal: (φ * ψ).IsSymmetric

full_name: MvPolynomial.IsSymmetric.smul
code: theorem smul (r : R) (hφ : IsSymmetric φ) : IsSymmetric (r • φ) 
goal: (r • φ).IsSymmetric

full_name: MvPolynomial.IsSymmetric.map
code: @[simp]
theorem map (hφ : IsSymmetric φ) (f : R →+* S) : IsSymmetric (map f φ) 
goal: ((MvPolynomial.map f) φ).IsSymmetric

full_name: MvPolynomial.IsSymmetric.rename
code: protected theorem rename (hφ : φ.IsSymmetric) (e : σ ≃ τ) : (rename e φ).IsSymmetric 
goal: ((MvPolynomial.rename ⇑e) φ).IsSymmetric

full_name: MvPolynomial.isSymmetric_rename
code: @[simp]
theorem _root_.MvPolynomial.isSymmetric_rename {e : σ ≃ τ} :
    (MvPolynomial.rename e φ).IsSymmetric ↔ φ.IsSymmetric 
goal: ((MvPolynomial.rename ⇑e) φ).IsSymmetric ↔ φ.IsSymmetric

full_name: MvPolynomial.IsSymmetric.neg
code: theorem neg (hφ : IsSymmetric φ) : IsSymmetric (-φ) 
goal: (-φ).IsSymmetric

full_name: MvPolynomial.IsSymmetric.sub
code: theorem sub (hφ : IsSymmetric φ) (hψ : IsSymmetric ψ) : IsSymmetric (φ - ψ) 
goal: (φ - ψ).IsSymmetric

full_name: MvPolynomial.renameSymmetricSubalgebra_apply_coe
code: /-- `MvPolynomial.rename` induces an isomorphism between the symmetric subalgebras. -/
@[simps!]
def renameSymmetricSubalgebra [CommSemiring R] (e : σ ≃ τ) :
    symmetricSubalgebra σ R ≃ₐ[R] symmetricSubalgebra τ R 
goal: ↑((MvPolynomial.renameSymmetricSubalgebra e) a) = (MvPolynomial.rename ⇑e) ↑a

full_name: MvPolynomial.renameSymmetricSubalgebra
code: /-- `MvPolynomial.rename` induces an isomorphism between the symmetric subalgebras. -/
@[simps!]
def renameSymmetricSubalgebra [CommSemiring R] (e : σ ≃ τ) :
    symmetricSubalgebra σ R ≃ₐ[R] symmetricSubalgebra τ R 
goal: ↥(MvPolynomial.symmetricSubalgebra σ R) ≃ₐ[R] ↥(MvPolynomial.symmetricSubalgebra τ R)

full_name: MvPolynomial.renameSymmetricSubalgebra_symm_apply_coe
code: /-- `MvPolynomial.rename` induces an isomorphism between the symmetric subalgebras. -/
@[simps!]
def renameSymmetricSubalgebra [CommSemiring R] (e : σ ≃ τ) :
    symmetricSubalgebra σ R ≃ₐ[R] symmetricSubalgebra τ R 
goal: ↑((MvPolynomial.renameSymmetricSubalgebra e).symm a) = (MvPolynomial.rename ⇑e.symm) ↑a

full_name: MvPolynomial.esymm
code: /-- The `n`th elementary symmetric `MvPolynomial σ R`. -/
def esymm (n : ℕ) : MvPolynomial σ R 
goal: MvPolynomial σ R

full_name: MvPolynomial.esymm_eq_multiset_esymm
code: /-- The `n`th elementary symmetric `MvPolynomial σ R` is obtained by evaluating the
`n`th elementary symmetric at the `Multiset` of the monomials -/
theorem esymm_eq_multiset_esymm : esymm σ R = (univ.val.map X).esymm 
goal: MvPolynomial.esymm σ R = (Multiset.map MvPolynomial.X Finset.univ.val).esymm

full_name: MvPolynomial.aeval_esymm_eq_multiset_esymm
code: theorem aeval_esymm_eq_multiset_esymm [Algebra R S] (f : σ → S) (n : ℕ) :
    aeval f (esymm σ R n) = (univ.val.map f).esymm n 
goal: (MvPolynomial.aeval f) (MvPolynomial.esymm σ R n) = (Multiset.map f Finset.univ.val).esymm n

full_name: MvPolynomial.esymm_eq_sum_subtype
code: /-- We can define `esymm σ R n` by summing over a subtype instead of over `powerset_len`. -/
theorem esymm_eq_sum_subtype (n : ℕ) :
    esymm σ R n = ∑ t : { s : Finset σ // s.card = n }, ∏ i ∈ (t : Finset σ), X i 
goal: MvPolynomial.esymm σ R n = ∑ t : { s // s.card = n }, ∏ i ∈ ↑t, MvPolynomial.X i

full_name: MvPolynomial.esymm_eq_sum_monomial
code: /-- We can define `esymm σ R n` as a sum over explicit monomials -/
theorem esymm_eq_sum_monomial (n : ℕ) :
    esymm σ R n = ∑ t ∈ powersetCard n univ, monomial (∑ i ∈ t, Finsupp.single i 1) 1 
goal: MvPolynomial.esymm σ R n =
  ∑ t ∈ Finset.powersetCard n Finset.univ, (MvPolynomial.monomial (∑ i ∈ t, Finsupp.single i 1)) 1

full_name: MvPolynomial.esymm_zero
code: @[simp]
theorem esymm_zero : esymm σ R 0 = 1 
goal: MvPolynomial.esymm σ R 0 = 1

full_name: MvPolynomial.map_esymm
code: theorem map_esymm (n : ℕ) (f : R →+* S) : map f (esymm σ R n) = esymm σ S n 
goal: (MvPolynomial.map f) (MvPolynomial.esymm σ R n) = MvPolynomial.esymm σ S n

full_name: MvPolynomial.rename_esymm
code: theorem rename_esymm (n : ℕ) (e : σ ≃ τ) : rename e (esymm σ R n) = esymm τ R n 
goal: (MvPolynomial.rename ⇑e) (MvPolynomial.esymm σ R n) = MvPolynomial.esymm τ R n

full_name: MvPolynomial.esymm_isSymmetric
code: theorem esymm_isSymmetric (n : ℕ) : IsSymmetric (esymm σ R n) 
goal: (MvPolynomial.esymm σ R n).IsSymmetric

full_name: MvPolynomial.support_esymm''
code: theorem support_esymm'' (n : ℕ) [DecidableEq σ] [Nontrivial R] :
    (esymm σ R n).support =
      (powersetCard n (univ : Finset σ)).biUnion fun t =>
        (Finsupp.single (∑ i ∈ t, Finsupp.single i 1) (1 : R)).support 
goal: (MvPolynomial.esymm σ R n).support =
  (Finset.powersetCard n Finset.univ).biUnion fun t => (Finsupp.single (∑ i ∈ t, Finsupp.single i 1) 1).support

full_name: MvPolynomial.support_esymm'
code: theorem support_esymm' (n : ℕ) [DecidableEq σ] [Nontrivial R] :
    (esymm σ R n).support =
      (powersetCard n (univ : Finset σ)).biUnion fun t => {∑ i ∈ t, Finsupp.single i 1} 
goal: (MvPolynomial.esymm σ R n).support = (Finset.powersetCard n Finset.univ).biUnion fun t => {∑ i ∈ t, Finsupp.single i 1}

full_name: MvPolynomial.support_esymm
code: theorem support_esymm (n : ℕ) [DecidableEq σ] [Nontrivial R] :
    (esymm σ R n).support =
      (powersetCard n (univ : Finset σ)).image fun t => ∑ i ∈ t, Finsupp.single i 1 
goal: (MvPolynomial.esymm σ R n).support =
  Finset.image (fun t => ∑ i ∈ t, Finsupp.single i 1) (Finset.powersetCard n Finset.univ)

full_name: MvPolynomial.degrees_esymm
code: theorem degrees_esymm [Nontrivial R] (n : ℕ) (hpos : 0 < n) (hn : n ≤ Fintype.card σ) :
    (esymm σ R n).degrees = (univ : Finset σ).val 
goal: (MvPolynomial.esymm σ R n).degrees = Finset.univ.val

full_name: MvPolynomial.psum
code: /-- The degree-`n` power sum -/
def psum (n : ℕ) : MvPolynomial σ R 
goal: MvPolynomial σ R

full_name: MvPolynomial.psum_def
code: lemma psum_def (n : ℕ) : psum σ R n = ∑ i, X i ^ n 
goal: MvPolynomial.psum σ R n = ∑ i : σ, MvPolynomial.X i ^ n

full_name: MvPolynomial.psum_zero
code: @[simp]
theorem psum_zero : psum σ R 0 = Fintype.card σ 
goal: MvPolynomial.psum σ R 0 = ↑(Fintype.card σ)

full_name: MvPolynomial.psum_one
code: @[simp]
theorem psum_one : psum σ R 1 = ∑ i, X i 
goal: MvPolynomial.psum σ R 1 = ∑ i : σ, MvPolynomial.X i

full_name: MvPolynomial.rename_psum
code: @[simp]
theorem rename_psum (n : ℕ) (e : σ ≃ τ) : rename e (psum σ R n) = psum τ R n 
goal: (MvPolynomial.rename ⇑e) (MvPolynomial.psum σ R n) = MvPolynomial.psum τ R n

full_name: MvPolynomial.psum_isSymmetric
code: theorem psum_isSymmetric (n : ℕ) : IsSymmetric (psum σ R n) 
goal: (MvPolynomial.psum σ R n).IsSymmetric