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
:S
is generated by adjoining a specified root off : R[X]
toR
IsAdjoinRootMonic S f
:S
is generated by adjoining a root of the monic polynomialf : R[X]
toR
Using IsAdjoinRoot
to map into S
:
IsAdjoinRoot.map
: inclusion fromR[X]
toS
IsAdjoinRoot.root
: the specific root adjoined toR
to giveS
Using IsAdjoinRoot
to map out of S
:
IsAdjoinRoot.repr
: choose a non-unique representative inR[X]
IsAdjoinRoot.lift
,IsAdjoinRoot.liftHom
: lift a morphismR →+* T
toS →+* T
IsAdjoinRootMonic.modByMonicHom
: a unique representative inR[X]
iff
is monic
Main results #
AdjoinRoot.isAdjoinRoot
andAdjoinRoot.isAdjoinRootMonic
:AdjoinRoot
satisfies the conditions onIsAdjoinRoot
(_monic
)IsAdjoinRootMonic.powerBasis
: theroot
generates a power basis onS
overR
IsAdjoinRoot.aequiv
: algebra isomorphism showing adjoining a root gives a unique ring up to isomorphismIsAdjoinRoot.ofEquiv
: transferIsAdjoinRoot
across an algebra isomorphismIsAdjoinRootMonic.minpoly_eq
: the minimal polynomial of the adjoined root off
is equal tof
, iff
is irreducible and monic, andR
is 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 : Polynomial R →+* S
- map_surjective : Function.Surjective ⇑self.map
- ker_map : RingHom.ker self.map = Ideal.span {f}
- algebraMap_eq : algebraMap R S = self.map.comp Polynomial.C
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 f
s such as
X^2 - C a * X - C b
since it saves you carrying around the proofs of monicity.
- map : Polynomial R →+* S
- map_surjective : Function.Surjective ⇑self.map
- ker_map : RingHom.ker self.map = Ideal.span {f}
- algebraMap_eq : algebraMap R S = self.map.comp Polynomial.C
- 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.
Equations
- h.repr x = ⋯.choose
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.
Equations
- h.powerBasis = { gen := h.root, dim := f.natDegree, basis := h.basis, basis_eq_pow := ⋯ }
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 i
th coefficient of the representative of x : S
.
Equations
- h.coeff = h.liftPolyₗ { toFun := Polynomial.coeff, map_add' := ⋯, map_smul' := ⋯ }
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
.
Equations
- h.ofEquiv e = { map := (↑↑e).comp h.map, map_surjective := ⋯, ker_map := ⋯, algebraMap_eq := ⋯ }