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 #
CMvPolynomial.finSuccEquiv—noncomputablering equivalenceCMvPolynomial (n+1) R ≃+* Polynomial (CMvPolynomial n R), viewing a polynomial inn+1variables as a univariate polynomial overnvariables.CMvPolynomial.finSuccEquivNth p— computable ring equivalenceCMvPolynomial (n+1) R ≃+* CompPoly.CPolynomial (CMvPolynomial n R)for an arbitrary pivotp, splitting off variablep. Both directions areeval₂folds, so they compute; the ring-equivalence laws are proved by extensionality on theC/Xgenerators.CMvPolynomial.finSuccEquivNthHom p/finSuccEquivNthInvHom p— its two directions asRingHoms.
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
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
The equivalence is a left inverse: applying the inverse then forward is the identity.
The equivalence is a right inverse: applying forward then the inverse is the identity.
finSuccEquiv preserves addition.
finSuccEquiv preserves multiplication.
finSuccEquiv maps zero to zero.
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.
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
Forward direction of finSuccEquivNth, as a RingHom. Splits variable p off as the
univariate indeterminate over the other n variables. Computable.
Instances For
"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
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
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.
finSuccEquivNth p P has univariate degree at most d whenever P has per-variable
degree at most d.