Documentation

Mathlib.Algebra.MvPolynomial.Rename

Renaming variables of polynomials #

This file establishes the rename operation on multivariate polynomials, which modifies the set of variables.

Main declarations #

Notation #

As in other polynomial files, we typically use the notation:

noncomputable def MvPolynomial.rename {σ : Type u_1} {τ : Type u_2} {R : Type u_4} [CommSemiring R] (f : σ → τ) :

Rename all the variables in a multivariable polynomial.

Equations
Instances For
    theorem MvPolynomial.rename_C {σ : Type u_1} {τ : Type u_2} {R : Type u_4} [CommSemiring R] (f : σ → τ) (r : R) :
    (rename f) (C r) = C r
    @[simp]
    theorem MvPolynomial.rename_X {σ : Type u_1} {τ : Type u_2} {R : Type u_4} [CommSemiring R] (f : σ → τ) (i : σ) :
    (rename f) (X i) = X (f i)
    @[simp]
    theorem MvPolynomial.rename_zero {σ : Type u_1} {τ : Type u_2} {R : Type u_4} [CommSemiring R] (f : σ → τ) :
    (rename f) 0 = 0
    theorem MvPolynomial.map_rename {σ : Type u_1} {τ : Type u_2} {R : Type u_4} {S : Type u_5} [CommSemiring R] [CommSemiring S] (f : R →+* S) (g : σ → τ) (p : MvPolynomial σ R) :
    (map f) ((rename g) p) = (rename g) ((map f) p)
    theorem MvPolynomial.map_comp_rename {σ : Type u_1} {τ : Type u_2} {R : Type u_4} {S : Type u_5} [CommSemiring R] [CommSemiring S] (f : R →+* S) (g : σ → τ) :
    @[simp]
    theorem MvPolynomial.rename_rename {σ : Type u_1} {τ : Type u_2} {α : Type u_3} {R : Type u_4} [CommSemiring R] (f : σ → τ) (g : τ → α) (p : MvPolynomial σ R) :
    (rename g) ((rename f) p) = (rename (g ∘ f)) p
    theorem MvPolynomial.rename_comp_rename {σ : Type u_1} {τ : Type u_2} {α : Type u_3} {R : Type u_4} [CommSemiring R] (f : σ → τ) (g : τ → α) :
    (rename g).comp (rename f) = rename (g ∘ f)
    @[simp]
    theorem MvPolynomial.rename_id {σ : Type u_1} {R : Type u_4} [CommSemiring R] :
    theorem MvPolynomial.rename_id_apply {σ : Type u_1} {R : Type u_4} [CommSemiring R] (p : MvPolynomial σ R) :
    (rename id) p = p
    theorem MvPolynomial.rename_monomial {σ : Type u_1} {τ : Type u_2} {R : Type u_4} [CommSemiring R] (f : σ → τ) (d : σ →₀ ℕ) (r : R) :
    theorem MvPolynomial.rename_eq_aeval {σ : Type u_1} {τ : Type u_2} {R : Type u_4} [CommSemiring R] (f : σ → τ) :
    @[deprecated MvPolynomial.rename_eq_aeval (since := "2026-06-18")]
    theorem MvPolynomial.rename_eq {σ : Type u_1} {τ : Type u_2} {R : Type u_4} [CommSemiring R] (f : σ → τ) :

    Alias of MvPolynomial.rename_eq_aeval.

    theorem MvPolynomial.rename_injective {σ : Type u_1} {τ : Type u_2} {R : Type u_4} [CommSemiring R] (f : σ → τ) (hf : Function.Injective f) :
    @[simp]
    theorem MvPolynomial.rename_eq_zero_iff_of_injective {σ : Type u_1} {τ : Type u_2} {R : Type u_4} [CommSemiring R] (p : MvPolynomial σ R) {f : σ → τ} (hf : Function.Injective f) :
    (rename f) p = 0 ↔ p = 0
    theorem MvPolynomial.rename_leftInverse {σ : Type u_1} {τ : Type u_2} {R : Type u_4} [CommSemiring R] {f : σ → τ} {g : τ → σ} (hf : Function.LeftInverse f g) :
    theorem MvPolynomial.rename_rightInverse {σ : Type u_1} {τ : Type u_2} {R : Type u_4} [CommSemiring R] {f : σ → τ} {g : τ → σ} (hf : Function.RightInverse f g) :
    theorem MvPolynomial.rename_surjective {σ : Type u_1} {τ : Type u_2} {R : Type u_4} [CommSemiring R] (f : σ → τ) (hf : Function.Surjective f) :
    noncomputable def MvPolynomial.killCompl {σ : Type u_1} {τ : Type u_2} {R : Type u_4} [CommSemiring R] {f : σ → τ} (hf : Function.Injective f) :

    Given a function between sets of variables f : σ → τ that is injective with proof hf, MvPolynomial.killCompl hf is the AlgHom from R[τ] to R[σ] that is left inverse to rename f : R[σ] → R[τ] and sends the variables in the complement of the range of f to 0.

    Equations
    Instances For
      theorem MvPolynomial.killCompl_C {σ : Type u_1} {τ : Type u_2} {R : Type u_4} [CommSemiring R] {f : σ → τ} (hf : Function.Injective f) (r : R) :
      (killCompl hf) (C r) = C r
      theorem MvPolynomial.killCompl_comp_rename {σ : Type u_1} {τ : Type u_2} {R : Type u_4} [CommSemiring R] {f : σ → τ} (hf : Function.Injective f) :
      @[simp]
      theorem MvPolynomial.killCompl_rename_app {σ : Type u_1} {τ : Type u_2} {R : Type u_4} [CommSemiring R] {f : σ → τ} (hf : Function.Injective f) (p : MvPolynomial σ R) :
      (killCompl hf) ((rename f) p) = p
      theorem MvPolynomial.killCompl_map {σ : Type u_1} {τ : Type u_2} {R : Type u_4} {S : Type u_5} [CommSemiring R] [CommSemiring S] {f : σ → τ} (hf : Function.Injective f) (φ : R →+* S) (p : MvPolynomial τ R) :
      (killCompl hf) ((map φ) p) = (map φ) ((killCompl hf) p)
      @[simp]
      theorem MvPolynomial.killCompl_monomial_mapDomain {σ : Type u_1} {τ : Type u_2} {R : Type u_4} [CommSemiring R] {f : σ → τ} (hf : Function.Injective f) {s : σ →₀ ℕ} {c : R} :
      theorem MvPolynomial.killCompl_monomial_eq_zero_of_notMem_range {σ : Type u_1} {τ : Type u_2} {R : Type u_4} [CommSemiring R] {f : σ → τ} (hf : Function.Injective f) {s : τ →₀ ℕ} (c : R) {a : τ} (ha : a ∈ s.support) (hs : a ∉ Set.range f) :
      (killCompl hf) ((monomial s) c) = 0
      theorem MvPolynomial.killCompl_monomial_eq_zero_of_not_subset {σ : Type u_1} {τ : Type u_2} {R : Type u_4} [CommSemiring R] {f : σ → τ} (hf : Function.Injective f) {s : τ →₀ ℕ} (c : R) (hs : ¬↑s.support ⊆ Set.range f) :
      (killCompl hf) ((monomial s) c) = 0
      theorem MvPolynomial.killCompl_monomial_eq_monomial_comapDomain_of_subset {σ : Type u_1} {τ : Type u_2} {R : Type u_4} [CommSemiring R] {f : σ → τ} (hf : Function.Injective f) {s : τ →₀ ℕ} (c : R) (hs : ↑s.support ⊆ Set.range f) :
      (killCompl hf) ((monomial s) c) = (monomial (Finsupp.comapDomain f s ⋯)) c
      theorem MvPolynomial.killCompl_monomial {σ : Type u_1} {τ : Type u_2} {R : Type u_4} [CommSemiring R] {f : σ → τ} (hf : Function.Injective f) {s : τ →₀ ℕ} {c : R} [Decidable (↑s.support ⊆ Set.range f)] :
      (killCompl hf) ((monomial s) c) = if ↑s.support ⊆ Set.range f then (monomial (Finsupp.comapDomain f s ⋯)) c else 0
      theorem MvPolynomial.coeff_killCompl {σ : Type u_1} {τ : Type u_2} {R : Type u_4} [CommSemiring R] {f : σ → τ} (hf : Function.Injective f) {p : MvPolynomial τ R} {s : σ →₀ ℕ} :
      theorem MvPolynomial.support_killCompl {σ : Type u_1} {τ : Type u_2} {R : Type u_4} [CommSemiring R] {f : σ → τ} (hf : Function.Injective f) {p : MvPolynomial τ R} :
      noncomputable def MvPolynomial.renameEquiv {σ : Type u_1} {τ : Type u_2} (R : Type u_4) [CommSemiring R] (f : σ ≃ τ) :

      MvPolynomial.rename e is an equivalence when e is.

      Equations
      Instances For
        @[simp]
        theorem MvPolynomial.renameEquiv_apply {σ : Type u_1} {τ : Type u_2} (R : Type u_4) [CommSemiring R] (f : σ ≃ τ) (a : MvPolynomial σ R) :
        (renameEquiv R f) a = (rename ⇑f) a
        @[simp]
        theorem MvPolynomial.renameEquiv_symm {σ : Type u_1} {τ : Type u_2} (R : Type u_4) [CommSemiring R] (f : σ ≃ τ) :
        @[simp]
        theorem MvPolynomial.renameEquiv_trans {σ : Type u_1} {τ : Type u_2} {α : Type u_3} (R : Type u_4) [CommSemiring R] (e : σ ≃ τ) (f : τ ≃ α) :
        theorem MvPolynomial.eval₂_rename {σ : Type u_1} {τ : Type u_2} {R : Type u_4} {S : Type u_5} [CommSemiring R] [CommSemiring S] (f : R →+* S) (k : σ → τ) (g : τ → S) (p : MvPolynomial σ R) :
        eval₂ f g ((rename k) p) = eval₂ f (g ∘ k) p
        theorem MvPolynomial.eval_rename {σ : Type u_1} {τ : Type u_2} {R : Type u_4} [CommSemiring R] (k : σ → τ) (g : τ → R) (p : MvPolynomial σ R) :
        (eval g) ((rename k) p) = (eval (g ∘ k)) p
        theorem MvPolynomial.eval₂Hom_rename {σ : Type u_1} {τ : Type u_2} {R : Type u_4} {S : Type u_5} [CommSemiring R] [CommSemiring S] (f : R →+* S) (k : σ → τ) (g : τ → S) (p : MvPolynomial σ R) :
        (eval₂Hom f g) ((rename k) p) = (eval₂Hom f (g ∘ k)) p
        theorem MvPolynomial.aeval_rename {σ : Type u_1} {τ : Type u_2} {R : Type u_4} {S : Type u_5} [CommSemiring R] [CommSemiring S] (k : σ → τ) (g : τ → S) (p : MvPolynomial σ R) [Algebra R S] :
        (aeval g) ((rename k) p) = (aeval (g ∘ k)) p
        theorem MvPolynomial.aeval_comp_rename {σ : Type u_1} {τ : Type u_2} {R : Type u_4} {S : Type u_5} [CommSemiring R] [CommSemiring S] (k : σ → τ) (g : τ → S) [Algebra R S] :
        (aeval g).comp (rename k) = aeval (g ∘ k)
        theorem MvPolynomial.rename_eval₂ {σ : Type u_1} {τ : Type u_2} {R : Type u_4} [CommSemiring R] (k : σ → τ) (p : MvPolynomial σ R) (g : τ → MvPolynomial σ R) :
        (rename k) (eval₂ C (g ∘ k) p) = eval₂ C (⇑(rename k) ∘ g) ((rename k) p)
        theorem MvPolynomial.rename_prod_mk_eval₂ {σ : Type u_1} {τ : Type u_2} {R : Type u_4} [CommSemiring R] (p : MvPolynomial σ R) (j : τ) (g : σ → MvPolynomial σ R) :
        (rename (Prod.mk j)) (eval₂ C g p) = eval₂ C (fun (x : σ) => (rename (Prod.mk j)) (g x)) p
        theorem MvPolynomial.eval₂_rename_prod_mk {σ : Type u_1} {τ : Type u_2} {R : Type u_4} {S : Type u_5} [CommSemiring R] [CommSemiring S] (f : R →+* S) (g : σ × τ → S) (i : σ) (p : MvPolynomial τ R) :
        eval₂ f g ((rename (Prod.mk i)) p) = eval₂ f (fun (j : τ) => g (i, j)) p
        theorem MvPolynomial.eval_rename_prod_mk {σ : Type u_1} {τ : Type u_2} {R : Type u_4} [CommSemiring R] (g : σ × τ → R) (i : σ) (p : MvPolynomial τ R) :
        (eval g) ((rename (Prod.mk i)) p) = (eval fun (j : τ) => g (i, j)) p
        theorem MvPolynomial.exists_finset_rename {σ : Type u_1} {R : Type u_4} [CommSemiring R] (p : MvPolynomial σ R) :
        ∃ (s : Finset σ) (q : MvPolynomial (↥s) R), p = (rename Subtype.val) q

        Every polynomial is a polynomial in finitely many variables.

        theorem MvPolynomial.exists_finset_rename₂ {σ : Type u_1} {R : Type u_4} [CommSemiring R] (p₁ p₂ : MvPolynomial σ R) :
        ∃ (s : Finset σ) (q₁ : MvPolynomial (↥s) R) (q₂ : MvPolynomial (↥s) R), p₁ = (rename Subtype.val) q₁ ∧ p₂ = (rename Subtype.val) q₂

        exists_finset_rename for two polynomials at once: for any two polynomials p₁, p₂ in a polynomial semiring R[σ] of possibly infinitely many variables, exists_finset_rename₂ yields a finite subset s of σ such that both p₁ and p₂ are contained in the polynomial semiring R[s] of finitely many variables.

        theorem MvPolynomial.exists_fin_rename {σ : Type u_1} {R : Type u_4} [CommSemiring R] (p : MvPolynomial σ R) :
        ∃ (n : ℕ) (f : Fin n → σ) (_ : Function.Injective f) (q : MvPolynomial (Fin n) R), p = (rename f) q

        Every polynomial is a polynomial in finitely many variables.

        theorem MvPolynomial.eval₂_cast_comp {σ : Type u_1} {τ : Type u_2} {R : Type u_4} [CommSemiring R] (f : σ → τ) (c : ℤ →+* R) (g : τ → R) (p : MvPolynomial σ ℤ) :
        eval₂ c (g ∘ f) p = eval₂ c g ((rename f) p)
        @[simp]
        theorem MvPolynomial.coeff_rename_mapDomain {σ : Type u_1} {τ : Type u_2} {R : Type u_4} [CommSemiring R] (f : σ → τ) (hf : Function.Injective f) (φ : MvPolynomial σ R) (d : σ →₀ ℕ) :
        coeff (Finsupp.mapDomain f d) ((rename f) φ) = coeff d φ
        @[simp]
        theorem MvPolynomial.coeff_rename_embDomain {σ : Type u_1} {τ : Type u_2} {R : Type u_4} [CommSemiring R] (f : σ ↪ τ) (φ : MvPolynomial σ R) (d : σ →₀ ℕ) :
        coeff (Finsupp.embDomain f d) ((rename ⇑f) φ) = coeff d φ
        theorem MvPolynomial.coeff_rename_eq_zero {σ : Type u_1} {τ : Type u_2} {R : Type u_4} [CommSemiring R] (f : σ → τ) (φ : MvPolynomial σ R) (d : τ →₀ ℕ) (h : ∀ (u : σ →₀ ℕ), Finsupp.mapDomain f u = d → coeff u φ = 0) :
        coeff d ((rename f) φ) = 0
        theorem MvPolynomial.coeff_rename_ne_zero {σ : Type u_1} {τ : Type u_2} {R : Type u_4} [CommSemiring R] (f : σ → τ) (φ : MvPolynomial σ R) (d : τ →₀ ℕ) (h : coeff d ((rename f) φ) ≠ 0) :
        ∃ (u : σ →₀ ℕ), Finsupp.mapDomain f u = d ∧ coeff u φ ≠ 0
        @[simp]
        theorem MvPolynomial.constantCoeff_rename {σ : Type u_1} {R : Type u_4} [CommSemiring R] {τ : Type u_6} (f : σ → τ) (φ : MvPolynomial σ R) :
        theorem MvPolynomial.support_rename_of_injective {σ : Type u_1} {τ : Type u_2} {R : Type u_4} [CommSemiring R] {p : MvPolynomial σ R} {f : σ → τ} [DecidableEq τ] (h : Function.Injective f) :
        theorem MvPolynomial.support_rename_killCompl_subset {σ : Type u_1} {τ : Type u_2} {R : Type u_4} [CommSemiring R] {p : MvPolynomial τ R} {f : σ → τ} (hf : Function.Injective f) :
        ((rename f) ((killCompl hf) p)).support ⊆ p.support