Documentation

CompPoly.Multivariate.FinSuccEquiv

finSuccEquiv for CMvPolynomial #

This file defines the computable multivariate polynomial equivalence for splitting off one variable, mirroring MvPolynomial.finSuccEquiv from Mathlib.

In Mathlib, MvPolynomial accepts a general type σ for the index set of the variables. Then, optionEquivLeft provides the algebra isomorphism MvPolynomial (Option σ) R ≃ₐ[R] Polynomial (MvPolynomial σ R). Finally, finSuccEquiv is defined as the composition of the rename step (Fin (n+1) ≃ Option (Fin n)) with optionEquivLeft. There is no such distinction in CMvPolynomial because the variables are of type Fin n by definition. Therefore, only CMvPolynomial.finSuccEquiv applies.

Main definitions #

Implementation notes #

finSuccEquiv is noncomputable because it goes through the polyRingEquiv bridge between CMvPolynomial and MvPolynomial; its forward/inverse correctness is obtained structurally from the underlying Mathlib AlgEquiv via RingEquiv.trans.

finSuccEquivNth avoids that bridge in its definition (staying inside the computable CMvPolynomial / CPolynomial world), and only crosses to Mathlib in the proof of map_polyRingEquiv_toPoly_finSuccEquivNth, which identifies it with MvPolynomial.finSuccEquivNth after transport.

Polynomial-level ring equivalence #

Polynomial.mapEquiv through the CMvPolynomial ↔ MvPolynomial bridge.

Instances For

    finSuccEquiv #

    Ring equivalence splitting off the first variable: CMvPolynomial (n+1) R ≃+* Polynomial (CMvPolynomial n R).

    This mirrors MvPolynomial.finSuccEquiv R n. The 0-th variable becomes the univariate indeterminate Polynomial.X, and variables 1, …, n become the multivariate variables of the coefficient ring CMvPolynomial n R.

    Instances For
      @[simp]

      The equivalence is a left inverse: applying the inverse then forward is the identity.

      @[simp]

      The equivalence is a right inverse: applying forward then the inverse is the identity.

      finSuccEquiv preserves addition.

      finSuccEquiv preserves multiplication.

      @[simp]

      finSuccEquiv maps zero to zero.

      @[simp]

      finSuccEquiv maps one to one.

      The computable finSuccEquivNth (arbitrary pivot) #

      Unlike finSuccEquiv above, this stays inside the computable CMvPolynomial / CPolynomial world and works for an arbitrary pivot p.

      def CPoly.CMvPolynomial.fseVars {n : } {R : Type u_1} [CommSemiring R] [BEq R] [LawfulBEq R] [Nontrivial R] (p : Fin (n + 1)) :

      Assignment used by the forward direction: variable p goes to the univariate X, every other variable p.succAbove j goes to the constant C (X j).

      Instances For
        @[simp]
        @[simp]
        theorem CPoly.CMvPolynomial.fseVars_succAbove {n : } {R : Type u_1} [CommSemiring R] [BEq R] [LawfulBEq R] [Nontrivial R] (p : Fin (n + 1)) (j : Fin n) :

        Forward direction of finSuccEquivNth, as a RingHom. Splits variable p off as the univariate indeterminate over the other n variables. Computable.

        Instances For
          def CPoly.CMvPolynomial.insertVarHom {n : } {R : Type u_1} [CommSemiring R] [BEq R] [LawfulBEq R] (p : Fin (n + 1)) :

          "Insert a dummy variable at position p": the embedding CMvPolynomial n R →+* CMvPolynomial (n+1) R sending X j to X (p.succAbove j). Computable.

          Instances For

            Inverse direction of finSuccEquivNth, as a RingHom. Computable.

            Instances For
              @[simp]
              theorem CPoly.CMvPolynomial.finSuccEquivNthHom_C {n : } {R : Type u_1} [CommSemiring R] [BEq R] [LawfulBEq R] [Nontrivial R] (p : Fin (n + 1)) (c : R) :
              @[simp]
              theorem CPoly.CMvPolynomial.insertVarHom_C {n : } {R : Type u_1} [CommSemiring R] [BEq R] [LawfulBEq R] (p : Fin (n + 1)) (c : R) :
              (insertVarHom p) (C c) = C c
              @[simp]
              theorem CPoly.CMvPolynomial.insertVarHom_X {n : } {R : Type u_1} [CommSemiring R] [BEq R] [LawfulBEq R] (p : Fin (n + 1)) (j : Fin n) :
              (insertVarHom p) (X j) = X (p.succAbove j)

              finSuccEquivNthHom composed with insertVarHom is the constant embedding CMvPolynomial n R →+* CPolynomial (CMvPolynomial n R).

              The computable finSuccEquivNth: a ring equivalence CMvPolynomial (n+1) R ≃+* CompPoly.CPolynomial (CMvPolynomial n R) for an arbitrary pivot p. Both directions compute.

              Instances For
                @[simp]
                theorem CPoly.CMvPolynomial.finSuccEquivNth_apply {n : } {R : Type u_1} [CommSemiring R] [BEq R] [LawfulBEq R] [Nontrivial R] (p : Fin (n + 1)) (P : CMvPolynomial (n + 1) R) :

                Compatibility with Mathlib's MvPolynomial.finSuccEquivNth #

                The computable finSuccEquivNth, transported to Mathlib's MvPolynomial/Polynomial world along polyRingEquiv and CPolynomial.toPoly, is Mathlib's MvPolynomial.finSuccEquivNth.

                The univariate degree of finSuccEquivNth p P is the degree of variable p in P.

                theorem CPoly.CMvPolynomial.natDegree_finSuccEquivNthHom_le {n : } {R : Type u_1} [CommSemiring R] [BEq R] [LawfulBEq R] [Nontrivial R] {d : } (p : Fin (n + 1)) (P : CMvPolynomial (n + 1) R) (hP : ∀ (k : Fin (n + 1)), degreeOf k P d) :

                finSuccEquivNth p P has univariate degree at most d whenever P has per-variable degree at most d.