A predicate on adjoining roots of polynomial #
This file defines a predicate IsAdjoinRoot S f, which states that the ring S can be
constructed by adjoining a specified root of the polynomial f : R[X] to R.
This predicate is useful when the same ring can be generated by adjoining the root of different
polynomials, and you want to vary which polynomial you're considering.
The results in this file are intended to mirror those in RingTheory.AdjoinRoot,
in order to provide an easier way to translate results from one to the other.
Motivation #
AdjoinRoot presents one construction of a ring R[α]. However, it is possible to obtain
rings of this form in many ways, such as NumberField.ringOfIntegers ℚ(√-5),
or Algebra.adjoin R {α, α^2}, or IntermediateField.adjoin R {α, 2 - α},
or even if we want to view ℂ as adjoining a root of X^2 + 1 to ℝ.
Main definitions #
The two main predicates in this file are:
IsAdjoinRoot S f:Sis generated by adjoining a specified root off : R[X]toRIsAdjoinRootMonic S f:Sis generated by adjoining a root of the monic polynomialf : R[X]toR
Using IsAdjoinRoot to map into S:
IsAdjoinRoot.map: inclusion fromR[X]toSIsAdjoinRoot.root: the specific root adjoined toRto giveS
Using IsAdjoinRoot to map out of S:
IsAdjoinRoot.repr: choose a non-unique representative inR[X]IsAdjoinRoot.lift,IsAdjoinRoot.liftHom: lift a morphismR →+* TtoS →+* TIsAdjoinRootMonic.modByMonicHom: a unique representative inR[X]iffis monic
Main results #
AdjoinRoot.isAdjoinRootandAdjoinRoot.isAdjoinRootMonic:AdjoinRootsatisfies the conditions onIsAdjoinRoot(_monic)IsAdjoinRootMonic.powerBasis: therootgenerates a power basis onSoverRIsAdjoinRoot.aequiv: algebra isomorphism showing adjoining a root gives a unique ring up to isomorphismIsAdjoinRoot.ofEquiv: transferIsAdjoinRootacross an algebra isomorphismIsAdjoinRootMonic.minpoly_eq: the minimal polynomial of the adjoined root offis equal tof, iffis irreducible and monic, andRis a GCD domain
IsAdjoinRoot S f states that the ring S can be constructed by adjoining a specified root
of the polynomial f : R[X] to R.
Compare PowerBasis R S, which does not explicitly specify which polynomial we adjoin a root of
(in particular f does not need to be the minimal polynomial of the root we adjoin),
and AdjoinRoot which constructs a new type.
This is not a typeclass because the choice of root given S and f is not unique.
- map_surjective : Function.Surjective ⇑self.map
Instances For
IsAdjoinRootMonic S f states that the ring S can be constructed by adjoining a specified
root of the monic polynomial f : R[X] to R.
As long as f is monic, there is a well-defined representation of elements of S as polynomials
in R[X] of degree lower than deg f (see modByMonicHom and coeff). In particular,
we have IsAdjoinRootMonic.powerBasis.
Bundling Monic into this structure is very useful when working with explicit fs such as
X^2 - C a * X - C b since it saves you carrying around the proofs of monicity.
- map_surjective : Function.Surjective ⇑self.map
- Monic : f.Monic
Instances For
(h : IsAdjoinRoot S f).root is the root of f that can be adjoined to generate S.
Equations
- h.root = h.map Polynomial.X
Instances For
Choose an arbitrary representative so that h.map (h.repr x) = x.
If f is monic, use IsAdjoinRootMonic.modByMonicHom for a unique choice of representative.
Instances For
repr preserves zero, up to multiples of f
repr preserves addition, up to multiples of f
Extensionality of the IsAdjoinRoot structure itself. See IsAdjoinRootMonic.ext_elem
for extensionality of the ring elements.
Extensionality of the IsAdjoinRoot structure itself. See IsAdjoinRootMonic.ext_elem
for extensionality of the ring elements.
Auxiliary lemma for IsAdjoinRoot.lift
Lift a ring homomorphism R →+* T to S →+* T by specifying a root x of f in T,
where S is given by adjoining a root of f to R.
Equations
- IsAdjoinRoot.lift i x h hx = { toFun := fun (z : S) => Polynomial.eval₂ i x (h.repr z), map_one' := ⋯, map_mul' := ⋯, map_zero' := ⋯, map_add' := ⋯ }
Instances For
Auxiliary lemma for apply_eq_lift
Unicity of lift: a map that agrees on R and h.root agrees with lift everywhere.
Lift the algebra map R → T to S →ₐ[R] T by specifying a root x of f in T,
where S is given by adjoining a root of f to R.
Equations
- IsAdjoinRoot.liftHom x hx' h = { toRingHom := IsAdjoinRoot.lift (algebraMap R T) x h hx', commutes' := ⋯ }
Instances For
Unicity of liftHom: a map that agrees on h.root agrees with liftHom everywhere.
AdjoinRoot f is indeed given by adjoining a root of f.
Equations
- AdjoinRoot.isAdjoinRoot f = { map := AdjoinRoot.mk f, map_surjective := ⋯, ker_map := ⋯, algebraMap_eq := ⋯ }
Instances For
AdjoinRoot f is indeed given by adjoining a root of f. If f is monic this is more
powerful than AdjoinRoot.isAdjoinRoot.
Equations
- AdjoinRoot.isAdjoinRootMonic f hf = { toIsAdjoinRoot := AdjoinRoot.isAdjoinRoot f, Monic := hf }
Instances For
IsAdjoinRoot.modByMonicHom sends the equivalence class of f mod g to f %ₘ g.
Instances For
The basis on S generated by powers of h.root.
Auxiliary definition for IsAdjoinRootMonic.powerBasis.
Equations
- One or more equations did not get rendered due to their size.
Instances For
If f is monic, the powers of h.root form a basis.
Instances For
IsAdjoinRootMonic.liftPolyₗ lifts a linear map on polynomials to a linear map on S.
Equations
- h.liftPolyₗ g = g ∘ₗ h.modByMonicHom
Instances For
IsAdjoinRootMonic.coeff h x i is the ith coefficient of the representative of x : S.
Instances For
Adjoining a root gives a unique ring up to algebra isomorphism.
This is the converse of IsAdjoinRoot.ofEquiv: this turns an IsAdjoinRoot into an
AlgEquiv, and IsAdjoinRoot.ofEquiv turns an AlgEquiv into an IsAdjoinRoot.
Equations
- h.aequiv h' = { toFun := ⇑(IsAdjoinRoot.liftHom h'.root ⋯ h), invFun := ⇑(IsAdjoinRoot.liftHom h.root ⋯ h'), left_inv := ⋯, right_inv := ⋯, map_mul' := ⋯, map_add' := ⋯, commutes' := ⋯ }
Instances For
Transfer IsAdjoinRoot across an algebra isomorphism.
This is the converse of IsAdjoinRoot.aequiv: this turns an AlgEquiv into an IsAdjoinRoot,
and IsAdjoinRoot.aequiv turns an IsAdjoinRoot into an AlgEquiv.