Adjoining roots of polynomials #
This file defines the commutative ring adjoin_root f, the ring R[X]/(f) obtained from a
commutative ring R and a polynomial f : R[X]. If furthermore R is a field and f is
irreducible, the field structure on adjoin_root f is constructed.
Main definitions and results #
The main definitions are in the adjoin_root namespace.
-
mk f : R[X] →+* adjoin_root f, the natural ring homomorphism. -
of f : R →+* adjoin_root f, the natural ring homomorphism. -
root f : adjoin_root f, the image of X in R[X]/(f). -
lift (i : R →+* S) (x : S) (h : f.eval₂ i x = 0) : (adjoin_root f) →+* S, the ring homomorphism from R[X]/(f) to S extendingi : R →+* Sand sendingXtox. -
lift_hom (x : S) (hfx : aeval x f = 0) : adjoin_root f →ₐ[R] S, the algebra homomorphism from R[X]/(f) to S extendingalgebra_map R Sand sendingXtox -
equiv : (adjoin_root f →ₐ[F] E) ≃ {x // x ∈ (f.map (algebra_map F E)).roots}a bijection between algebra homomorphisms fromadjoin_rootand roots offinS
Adjoin a root of a polynomial f to a commutative ring R. We define the new ring
as the quotient of polynomial R by the principal ideal generated by f.
Equations
- adjoin_root f = (R[X] ⧸ ideal.span {f})
Equations
Equations
- adjoin_root.inhabited f = {default := 0}
Equations
Ring homomorphism from R[x] to adjoin_root f sending X to the root.
Equations
- adjoin_root.mk f = ideal.quotient.mk (ideal.span {f})
Embedding of the original ring R into adjoin_root f.
Equations
Equations
The adjoined root.
Equations
Equations
Lift a ring homomorphism i : R →+* S to adjoin_root f →+* S.
Equations
- adjoin_root.lift i x h = ideal.quotient.lift (ideal.span {f}) (polynomial.eval₂_ring_hom i x) _
Produce an algebra homomorphism adjoin_root f →ₐ[R] S sending root f to
a root of f in S.
Equations
- adjoin_root.lift_hom f x hfx = {to_fun := (adjoin_root.lift (algebra_map R S) x hfx).to_fun, map_one' := _, map_mul' := _, map_zero' := _, map_add' := _, commutes' := _}
Equations
- adjoin_root.field = {add := comm_ring.add (adjoin_root.comm_ring f), add_assoc := _, zero := comm_ring.zero (adjoin_root.comm_ring f), zero_add := _, add_zero := _, nsmul := comm_ring.nsmul (adjoin_root.comm_ring f), nsmul_zero' := _, nsmul_succ' := _, neg := comm_ring.neg (adjoin_root.comm_ring f), sub := comm_ring.sub (adjoin_root.comm_ring f), sub_eq_add_neg := _, zsmul := comm_ring.zsmul (adjoin_root.comm_ring f), zsmul_zero' := _, zsmul_succ' := _, zsmul_neg' := _, add_left_neg := _, add_comm := _, mul := comm_ring.mul (adjoin_root.comm_ring f), mul_assoc := _, one := comm_ring.one (adjoin_root.comm_ring f), one_mul := _, mul_one := _, npow := comm_ring.npow (adjoin_root.comm_ring f), npow_zero' := _, npow_succ' := _, left_distrib := _, right_distrib := _, mul_comm := _, inv := field.inv (ideal.quotient.field (ideal.span {f})), div := field.div (ideal.quotient.field (ideal.span {f})), div_eq_mul_inv := _, zpow := field.zpow (ideal.quotient.field (ideal.span {f})), zpow_zero' := _, zpow_succ' := _, zpow_neg' := _, exists_pair_ne := _, mul_inv_cancel := _, inv_zero := _}
adjoin_root.mod_by_monic_hom sends the equivalence class of f mod g to f %ₘ g.
This is a well-defined right inverse to adjoin_root.mk, see adjoin_root.mk_left_inverse.
Equations
The elements 1, root g, ..., root g ^ (d - 1) form a basis for adjoin_root g,
where g is a monic polynomial of degree d.
Equations
- adjoin_root.power_basis_aux' hg = basis.of_equiv_fun {to_fun := λ (f : adjoin_root g) (i : fin g.nat_degree), (⇑(adjoin_root.mod_by_monic_hom hg) f).coeff ↑i, map_add' := _, map_smul' := _, inv_fun := λ (c : fin g.nat_degree → R), ⇑(adjoin_root.mk g) (∑ (i : fin g.nat_degree), ⇑(polynomial.monomial ↑i) (c i)), left_inv := _, right_inv := _}
The power basis 1, root g, ..., root g ^ (d - 1) for adjoin_root g,
where g is a monic polynomial of degree d.
Equations
- adjoin_root.power_basis' hg = {gen := adjoin_root.root g, dim := g.nat_degree, basis := adjoin_root.power_basis_aux' hg, basis_eq_pow := _}
The elements 1, root f, ..., root f ^ (d - 1) form a basis for adjoin_root f,
where f is an irreducible polynomial over a field of degree d.
Equations
- adjoin_root.power_basis_aux hf = let f' : K[X] := f * ⇑polynomial.C (f.leading_coeff)⁻¹ in basis.mk _ _
The power basis 1, root f, ..., root f ^ (d - 1) for adjoin_root f,
where f is an irreducible polynomial over a field of degree d.
Equations
- adjoin_root.power_basis hf = {gen := adjoin_root.root f, dim := f.nat_degree, basis := adjoin_root.power_basis_aux hf, basis_eq_pow := _}
If S is an extension of R with power basis pb and g is a monic polynomial over R
such that pb.gen has a minimal polynomial g, then S is isomorphic to adjoin_root g.
Compare power_basis.equiv_of_root, which would require
h₂ : aeval pb.gen (minpoly R (root g)) = 0; that minimal polynomial is not
guaranteed to be identical to g.
If L is a field extension of F and f is a polynomial over F then the set
of maps from F[x]/(f) into L is in bijection with the set of roots of f in L.
Equations
- adjoin_root.equiv L F f hf = (adjoin_root.power_basis hf).lift_equiv'.trans ((equiv.refl L).subtype_equiv _)
The natural isomorphism R[α]/(I[α]) ≅ R[α]/((I[x] ⊔ (f)) / (f)) for α a root of
f : polynomial R and I : ideal R.
See adjoin_root.quot_map_of_equiv for the isomorphism with (R/I)[X] / (f mod I).
The natural isomorphism R[α]/((I[x] ⊔ (f)) / (f)) ≅ (R[x]/I[x])/((f) ⊔ I[x] / I[x])
for α a root of f : polynomial R and I : ideal R
The natural isomorphism (R/I)[x]/(f mod I) ≅ (R[x]/I*R[x])/(f mod I[x]) where
f : polynomial R and I : ideal R
Equations
The natural isomorphism R[α]/I[α] ≅ (R/I)[X]/(f mod I) for α a root of f : polynomial R
and I : ideal R