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 of f : R[X] to R
• IsAdjoinRootMonic S f: S is generated by adjoining a root of the monic polynomial f : R[X] to R

Using IsAdjoinRoot to map into S:

• IsAdjoinRoot.map: inclusion from R[X] to S
• IsAdjoinRoot.root: the specific root adjoined to R to give S

Using IsAdjoinRoot to map out of S:

• IsAdjoinRoot.repr: choose a non-unique representative in R[X]
• IsAdjoinRoot.lift, IsAdjoinRoot.liftHom: lift a morphism R →+* T to S →+* T
• IsAdjoinRootMonic.modByMonicHom: a unique representative in R[X] if f is monic

Main results #

• AdjoinRoot.isAdjoinRoot and AdjoinRoot.isAdjoinRootMonic: AdjoinRoot satisfies the conditions on IsAdjoinRoot(_monic)
• IsAdjoinRootMonic.powerBasis: the root generates a power basis on S over R
• IsAdjoinRoot.aequiv: algebra isomorphism showing adjoining a root gives a unique ring up to isomorphism
• IsAdjoinRoot.ofEquiv: transfer IsAdjoinRoot across an algebra isomorphism
• IsAdjoinRootMonic.minpoly_eq: the minimal polynomial of the adjoined root of f is equal to f, if f is irreducible and monic, and R is a GCD domain
structure IsAdjoinRoot {R : Type u} (S : Type v) [] [] [Algebra R S] (f : ) :
Type (max u v)

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.

Instances For
theorem IsAdjoinRoot.map_surjective {R : Type u} {S : Type v} [] [] [Algebra R S] {f : } (self : ) :
theorem IsAdjoinRoot.ker_map {R : Type u} {S : Type v} [] [] [Algebra R S] {f : } (self : ) :
RingHom.ker self.map = Ideal.span {f}
theorem IsAdjoinRoot.algebraMap_eq {R : Type u} {S : Type v} [] [] [Algebra R S] {f : } (self : ) :
= self.map.comp Polynomial.C
structure IsAdjoinRootMonic {R : Type u} (S : Type v) [] [] [Algebra R S] (f : ) extends :
Type (max u v)

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.

Instances For
theorem IsAdjoinRootMonic.Monic {R : Type u} {S : Type v} [] [] [Algebra R S] {f : } (self : ) :
f.Monic
def IsAdjoinRoot.root {R : Type u} {S : Type v} [] [Ring S] {f : } [Algebra R S] (h : ) :
S

(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
theorem IsAdjoinRoot.subsingleton {R : Type u} {S : Type v} [] [Ring S] {f : } [Algebra R S] (h : ) [] :
theorem IsAdjoinRoot.algebraMap_apply {R : Type u} {S : Type v} [] [Ring S] {f : } [Algebra R S] (h : ) (x : R) :
() x = h.map (Polynomial.C x)
@[simp]
theorem IsAdjoinRoot.mem_ker_map {R : Type u} {S : Type v} [] [Ring S] {f : } [Algebra R S] (h : ) {p : } :
p RingHom.ker h.map f p
theorem IsAdjoinRoot.map_eq_zero_iff {R : Type u} {S : Type v} [] [Ring S] {f : } [Algebra R S] (h : ) {p : } :
h.map p = 0 f p
@[simp]
theorem IsAdjoinRoot.map_X {R : Type u} {S : Type v} [] [Ring S] {f : } [Algebra R S] (h : ) :
h.map Polynomial.X = h.root
@[simp]
theorem IsAdjoinRoot.map_self {R : Type u} {S : Type v} [] [Ring S] {f : } [Algebra R S] (h : ) :
h.map f = 0
@[simp]
theorem IsAdjoinRoot.aeval_eq {R : Type u} {S : Type v} [] [Ring S] {f : } [Algebra R S] (h : ) (p : ) :
(Polynomial.aeval h.root) p = h.map p
theorem IsAdjoinRoot.aeval_root {R : Type u} {S : Type v} [] [Ring S] {f : } [Algebra R S] (h : ) :
(Polynomial.aeval h.root) f = 0
def IsAdjoinRoot.repr {R : Type u} {S : Type v} [] [Ring S] {f : } [Algebra R S] (h : ) (x : S) :

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
theorem IsAdjoinRoot.map_repr {R : Type u} {S : Type v} [] [Ring S] {f : } [Algebra R S] (h : ) (x : S) :
h.map (h.repr x) = x
theorem IsAdjoinRoot.repr_zero_mem_span {R : Type u} {S : Type v} [] [Ring S] {f : } [Algebra R S] (h : ) :
h.repr 0 Ideal.span {f}

repr preserves zero, up to multiples of f

theorem IsAdjoinRoot.repr_add_sub_repr_add_repr_mem_span {R : Type u} {S : Type v} [] [Ring S] {f : } [Algebra R S] (h : ) (x : S) (y : S) :
h.repr (x + y) - (h.repr x + h.repr y) Ideal.span {f}

repr preserves addition, up to multiples of f

theorem IsAdjoinRoot.ext_map {R : Type u} {S : Type v} [] [Ring S] {f : } [Algebra R S] (h : ) (h' : ) (eq : ∀ (x : ), h.map x = h'.map x) :
h = h'

Extensionality of the IsAdjoinRoot structure itself. See IsAdjoinRootMonic.ext_elem for extensionality of the ring elements.

theorem IsAdjoinRoot.ext {R : Type u} {S : Type v} [] [Ring S] {f : } [Algebra R S] (h : ) (h' : ) (eq : h.root = h'.root) :
h = h'

Extensionality of the IsAdjoinRoot structure itself. See IsAdjoinRootMonic.ext_elem for extensionality of the ring elements.

theorem IsAdjoinRoot.eval₂_repr_eq_eval₂_of_map_eq {R : Type u} {S : Type v} [] [Ring S] {f : } [Algebra R S] {T : Type u_1} [] {i : R →+* T} {x : T} (hx : = 0) (h : ) (z : S) (w : ) (hzw : h.map w = z) :
Polynomial.eval₂ i x (h.repr z) =

Auxiliary lemma for IsAdjoinRoot.lift

def IsAdjoinRoot.lift {R : Type u} {S : Type v} [] [Ring S] {f : } [Algebra R S] {T : Type u_1} [] (i : R →+* T) (x : T) (hx : = 0) (h : ) :
S →+* T

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
Instances For
@[simp]
theorem IsAdjoinRoot.lift_map {R : Type u} {S : Type v} [] [Ring S] {f : } [Algebra R S] {T : Type u_1} [] {i : R →+* T} {x : T} (hx : = 0) (h : ) (z : ) :
(IsAdjoinRoot.lift i x hx h) (h.map z) =
@[simp]
theorem IsAdjoinRoot.lift_root {R : Type u} {S : Type v} [] [Ring S] {f : } [Algebra R S] {T : Type u_1} [] {i : R →+* T} {x : T} (hx : = 0) (h : ) :
(IsAdjoinRoot.lift i x hx h) h.root = x
@[simp]
theorem IsAdjoinRoot.lift_algebraMap {R : Type u} {S : Type v} [] [Ring S] {f : } [Algebra R S] {T : Type u_1} [] {i : R →+* T} {x : T} (hx : = 0) (h : ) (a : R) :
(IsAdjoinRoot.lift i x hx h) (() a) = i a
theorem IsAdjoinRoot.apply_eq_lift {R : Type u} {S : Type v} [] [Ring S] {f : } [Algebra R S] {T : Type u_1} [] {i : R →+* T} {x : T} (hx : = 0) (h : ) (g : S →+* T) (hmap : ∀ (a : R), g (() a) = i a) (hroot : g h.root = x) (a : S) :
g a = (IsAdjoinRoot.lift i x hx h) a

Auxiliary lemma for apply_eq_lift

theorem IsAdjoinRoot.eq_lift {R : Type u} {S : Type v} [] [Ring S] {f : } [Algebra R S] {T : Type u_1} [] {i : R →+* T} {x : T} (hx : = 0) (h : ) (g : S →+* T) (hmap : ∀ (a : R), g (() a) = i a) (hroot : g h.root = x) :
g = IsAdjoinRoot.lift i x hx h

Unicity of lift: a map that agrees on R and h.root agrees with lift everywhere.

def IsAdjoinRoot.liftHom {R : Type u} {S : Type v} [] [Ring S] {f : } [Algebra R S] {T : Type u_1} [] (x : T) [Algebra R T] (hx' : () f = 0) (h : ) :

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
Instances For
@[simp]
theorem IsAdjoinRoot.coe_liftHom {R : Type u} {S : Type v} [] [Ring S] {f : } [Algebra R S] {T : Type u_1} [] {x : T} [Algebra R T] (hx' : () f = 0) (h : ) :
theorem IsAdjoinRoot.lift_algebraMap_apply {R : Type u} {S : Type v} [] [Ring S] {f : } [Algebra R S] {T : Type u_1} [] {x : T} [Algebra R T] (hx' : () f = 0) (h : ) (z : S) :
(IsAdjoinRoot.lift () x hx' h) z = (IsAdjoinRoot.liftHom x hx' h) z
@[simp]
theorem IsAdjoinRoot.liftHom_map {R : Type u} {S : Type v} [] [Ring S] {f : } [Algebra R S] {T : Type u_1} [] {x : T} [Algebra R T] (hx' : () f = 0) (h : ) (z : ) :
(IsAdjoinRoot.liftHom x hx' h) (h.map z) = () z
@[simp]
theorem IsAdjoinRoot.liftHom_root {R : Type u} {S : Type v} [] [Ring S] {f : } [Algebra R S] {T : Type u_1} [] {x : T} [Algebra R T] (hx' : () f = 0) (h : ) :
(IsAdjoinRoot.liftHom x hx' h) h.root = x
theorem IsAdjoinRoot.eq_liftHom {R : Type u} {S : Type v} [] [Ring S] {f : } [Algebra R S] {T : Type u_1} [] {x : T} [Algebra R T] (hx' : () f = 0) (h : ) (g : S →ₐ[R] T) (hroot : g h.root = x) :

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
• = { map := , map_surjective := , ker_map := , algebraMap_eq := }
Instances For
def AdjoinRoot.isAdjoinRootMonic {R : Type u} [] (f : ) (hf : f.Monic) :

AdjoinRoot f is indeed given by adjoining a root of f. If f is monic this is more powerful than AdjoinRoot.isAdjoinRoot.

Equations
• = let __src := ; { toIsAdjoinRoot := __src, Monic := hf }
Instances For
@[simp]
.map =
@[simp]
theorem AdjoinRoot.isAdjoinRootMonic_map_eq_mk {R : Type u} [] (f : ) (hf : f.Monic) :
().map =
@[simp]
.root =
@[simp]
theorem AdjoinRoot.isAdjoinRootMonic_root_eq_root {R : Type u} [] (f : ) (hf : f.Monic) :
().root =
theorem IsAdjoinRootMonic.map_modByMonic {R : Type u} {S : Type v} [] [Ring S] {f : } [Algebra R S] (h : ) (g : ) :
h.map (g %ₘ f) = h.map g
theorem IsAdjoinRootMonic.modByMonic_repr_map {R : Type u} {S : Type v} [] [Ring S] {f : } [Algebra R S] (h : ) (g : ) :
h.repr (h.map g) %ₘ f = g %ₘ f
def IsAdjoinRootMonic.modByMonicHom {R : Type u} {S : Type v} [] [Ring S] {f : } [Algebra R S] (h : ) :

IsAdjoinRoot.modByMonicHom sends the equivalence class of f mod g to f %ₘ g.

Equations
• h.modByMonicHom = { toFun := fun (x : S) => h.repr x %ₘ f, map_add' := , map_smul' := }
Instances For
@[simp]
theorem IsAdjoinRootMonic.modByMonicHom_map {R : Type u} {S : Type v} [] [Ring S] {f : } [Algebra R S] (h : ) (g : ) :
h.modByMonicHom (h.map g) = g %ₘ f
@[simp]
theorem IsAdjoinRootMonic.map_modByMonicHom {R : Type u} {S : Type v} [] [Ring S] {f : } [Algebra R S] (h : ) (x : S) :
h.map (h.modByMonicHom x) = x
@[simp]
theorem IsAdjoinRootMonic.modByMonicHom_root_pow {R : Type u} {S : Type v} [] [Ring S] {f : } [Algebra R S] (h : ) {n : } (hdeg : n < f.natDegree) :
h.modByMonicHom (h.root ^ n) = Polynomial.X ^ n
@[simp]
theorem IsAdjoinRootMonic.modByMonicHom_root {R : Type u} {S : Type v} [] [Ring S] {f : } [Algebra R S] (h : ) (hdeg : 1 < f.natDegree) :
h.modByMonicHom h.root = Polynomial.X
def IsAdjoinRootMonic.basis {R : Type u} {S : Type v} [] [Ring S] {f : } [Algebra R S] (h : ) :
Basis (Fin f.natDegree) R S

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
@[simp]
theorem IsAdjoinRootMonic.basis_apply {R : Type u} {S : Type v} [] [Ring S] {f : } [Algebra R S] (h : ) (i : Fin f.natDegree) :
h.basis i = h.root ^ i
theorem IsAdjoinRootMonic.deg_pos {R : Type u} {S : Type v} [] [Ring S] {f : } [Algebra R S] [] (h : ) :
0 < f.natDegree
theorem IsAdjoinRootMonic.deg_ne_zero {R : Type u} {S : Type v} [] [Ring S] {f : } [Algebra R S] [] (h : ) :
f.natDegree 0
@[simp]
theorem IsAdjoinRootMonic.powerBasis_dim {R : Type u} {S : Type v} [] [Ring S] {f : } [Algebra R S] (h : ) :
h.powerBasis.dim = f.natDegree
@[simp]
theorem IsAdjoinRootMonic.powerBasis_gen {R : Type u} {S : Type v} [] [Ring S] {f : } [Algebra R S] (h : ) :
h.powerBasis.gen = h.root
@[simp]
theorem IsAdjoinRootMonic.powerBasis_basis {R : Type u} {S : Type v} [] [Ring S] {f : } [Algebra R S] (h : ) :
h.powerBasis.basis = h.basis
def IsAdjoinRootMonic.powerBasis {R : Type u} {S : Type v} [] [Ring S] {f : } [Algebra R S] (h : ) :

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
@[simp]
theorem IsAdjoinRootMonic.basis_repr {R : Type u} {S : Type v} [] [Ring S] {f : } [Algebra R S] (h : ) (x : S) (i : Fin f.natDegree) :
(h.basis.repr x) i = (h.modByMonicHom x).coeff i
theorem IsAdjoinRootMonic.basis_one {R : Type u} {S : Type v} [] [Ring S] {f : } [Algebra R S] (h : ) (hdeg : 1 < f.natDegree) :
h.basis 1, hdeg = h.root
@[simp]
theorem IsAdjoinRootMonic.liftPolyₗ_apply {R : Type u} {S : Type v} [] [Ring S] {f : } [Algebra R S] {T : Type u_1} [] [Module R T] (h : ) (g : →ₗ[R] T) :
∀ (a : S), (h.liftPolyₗ g) a = g (h.modByMonicHom a)
def IsAdjoinRootMonic.liftPolyₗ {R : Type u} {S : Type v} [] [Ring S] {f : } [Algebra R S] {T : Type u_1} [] [Module R T] (h : ) (g : →ₗ[R] T) :

IsAdjoinRootMonic.liftPolyₗ lifts a linear map on polynomials to a linear map on S.

Equations
• h.liftPolyₗ g = g ∘ₗ h.modByMonicHom
Instances For
def IsAdjoinRootMonic.coeff {R : Type u} {S : Type v} [] [Ring S] {f : } [Algebra R S] (h : ) :
S →ₗ[R] R

IsAdjoinRootMonic.coeff h x i is the ith coefficient of the representative of x : S.

Equations
• h.coeff = h.liftPolyₗ { toFun := Polynomial.coeff, map_add' := , map_smul' := }
Instances For
theorem IsAdjoinRootMonic.coeff_apply_lt {R : Type u} {S : Type v} [] [Ring S] {f : } [Algebra R S] (h : ) (z : S) (i : ) (hi : i < f.natDegree) :
h.coeff z i = (h.basis.repr z) i, hi
theorem IsAdjoinRootMonic.coeff_apply_coe {R : Type u} {S : Type v} [] [Ring S] {f : } [Algebra R S] (h : ) (z : S) (i : Fin f.natDegree) :
h.coeff z i = (h.basis.repr z) i
theorem IsAdjoinRootMonic.coeff_apply_le {R : Type u} {S : Type v} [] [Ring S] {f : } [Algebra R S] (h : ) (z : S) (i : ) (hi : f.natDegree i) :
h.coeff z i = 0
theorem IsAdjoinRootMonic.coeff_apply {R : Type u} {S : Type v} [] [Ring S] {f : } [Algebra R S] (h : ) (z : S) (i : ) :
h.coeff z i = if hi : i < f.natDegree then (h.basis.repr z) i, hi else 0
theorem IsAdjoinRootMonic.coeff_root_pow {R : Type u} {S : Type v} [] [Ring S] {f : } [Algebra R S] (h : ) {n : } (hn : n < f.natDegree) :
h.coeff (h.root ^ n) =
theorem IsAdjoinRootMonic.coeff_one {R : Type u} {S : Type v} [] [Ring S] {f : } [Algebra R S] [] (h : ) :
h.coeff 1 =
theorem IsAdjoinRootMonic.coeff_root {R : Type u} {S : Type v} [] [Ring S] {f : } [Algebra R S] (h : ) (hdeg : 1 < f.natDegree) :
h.coeff h.root =
theorem IsAdjoinRootMonic.coeff_algebraMap {R : Type u} {S : Type v} [] [Ring S] {f : } [Algebra R S] [] (h : ) (x : R) :
h.coeff (() x) =
theorem IsAdjoinRootMonic.ext_elem {R : Type u} {S : Type v} [] [Ring S] {f : } [Algebra R S] (h : ) ⦃x : S ⦃y : S (hxy : i < f.natDegree, h.coeff x i = h.coeff y i) :
x = y
theorem IsAdjoinRootMonic.ext_elem_iff {R : Type u} {S : Type v} [] [Ring S] {f : } [Algebra R S] (h : ) {x : S} {y : S} :
x = y i < f.natDegree, h.coeff x i = h.coeff y i
theorem IsAdjoinRootMonic.coeff_injective {R : Type u} {S : Type v} [] [Ring S] {f : } [Algebra R S] (h : ) :
theorem IsAdjoinRootMonic.isIntegral_root {R : Type u} {S : Type v} [] [Ring S] {f : } [Algebra R S] (h : ) :
IsIntegral R h.root
@[simp]
theorem IsAdjoinRoot.lift_self_apply {R : Type u} {S : Type v} [] [] [Algebra R S] {f : } (h : ) (x : S) :
(IsAdjoinRoot.lift () h.root h) x = x
theorem IsAdjoinRoot.lift_self {R : Type u} {S : Type v} [] [] [Algebra R S] {f : } (h : ) :
def IsAdjoinRoot.aequiv {R : Type u} {S : Type v} [] [] [Algebra R S] {f : } {T : Type u_1} [] [Algebra R T] (h : ) (h' : ) :

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
• One or more equations did not get rendered due to their size.
Instances For
@[simp]
theorem IsAdjoinRoot.aequiv_map {R : Type u} {S : Type v} [] [] [Algebra R S] {f : } {T : Type u_1} [] [Algebra R T] (h : ) (h' : ) (z : ) :
(h.aequiv h') (h.map z) = h'.map z
@[simp]
theorem IsAdjoinRoot.aequiv_root {R : Type u} {S : Type v} [] [] [Algebra R S] {f : } {T : Type u_1} [] [Algebra R T] (h : ) (h' : ) :
(h.aequiv h') h.root = h'.root
@[simp]
theorem IsAdjoinRoot.aequiv_self {R : Type u} {S : Type v} [] [] [Algebra R S] {f : } (h : ) :
h.aequiv h = AlgEquiv.refl
@[simp]
theorem IsAdjoinRoot.aequiv_symm {R : Type u} {S : Type v} [] [] [Algebra R S] {f : } {T : Type u_1} [] [Algebra R T] (h : ) (h' : ) :
(h.aequiv h').symm = h'.aequiv h
@[simp]
theorem IsAdjoinRoot.lift_aequiv {R : Type u} {S : Type v} [] [] [Algebra R S] {f : } {T : Type u_1} [] [Algebra R T] {U : Type u_2} [] (h : ) (h' : ) (i : R →+* U) (x : U) (hx : = 0) (z : S) :
(IsAdjoinRoot.lift i x hx h') ((h.aequiv h') z) = (IsAdjoinRoot.lift i x hx h) z
@[simp]
theorem IsAdjoinRoot.liftHom_aequiv {R : Type u} {S : Type v} [] [] [Algebra R S] {f : } {T : Type u_1} [] [Algebra R T] {U : Type u_2} [] [Algebra R U] (h : ) (h' : ) (x : U) (hx : () f = 0) (z : S) :
(IsAdjoinRoot.liftHom x hx h') ((h.aequiv h') z) = () z
@[simp]
theorem IsAdjoinRoot.aequiv_aequiv {R : Type u} {S : Type v} [] [] [Algebra R S] {f : } {T : Type u_1} [] [Algebra R T] {U : Type u_2} [] [Algebra R U] (h : ) (h' : ) (h'' : ) (x : S) :
(h'.aequiv h'') ((h.aequiv h') x) = (h.aequiv h'') x
@[simp]
theorem IsAdjoinRoot.aequiv_trans {R : Type u} {S : Type v} [] [] [Algebra R S] {f : } {T : Type u_1} [] [Algebra R T] {U : Type u_2} [] [Algebra R U] (h : ) (h' : ) (h'' : ) :
(h.aequiv h').trans (h'.aequiv h'') = h.aequiv h''
@[simp]
theorem IsAdjoinRoot.ofEquiv_map_apply {R : Type u} {S : Type v} [] [] [Algebra R S] {f : } {T : Type u_1} [] [Algebra R T] (h : ) (e : S ≃ₐ[R] T) :
∀ (a : ), (h.ofEquiv e).map a = e (h.map a)
def IsAdjoinRoot.ofEquiv {R : Type u} {S : Type v} [] [] [Algebra R S] {f : } {T : Type u_1} [] [Algebra R T] (h : ) (e : S ≃ₐ[R] T) :

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 := }
Instances For
@[simp]
theorem IsAdjoinRoot.ofEquiv_root {R : Type u} {S : Type v} [] [] [Algebra R S] {f : } {T : Type u_1} [] [Algebra R T] (h : ) (e : S ≃ₐ[R] T) :
(h.ofEquiv e).root = e h.root
@[simp]
theorem IsAdjoinRoot.aequiv_ofEquiv {R : Type u} {S : Type v} [] [] [Algebra R S] {f : } {T : Type u_1} [] [Algebra R T] {U : Type u_2} [] [Algebra R U] (h : ) (h' : ) (e : T ≃ₐ[R] U) :
h.aequiv (h'.ofEquiv e) = (h.aequiv h').trans e
@[simp]
theorem IsAdjoinRoot.ofEquiv_aequiv {R : Type u} {S : Type v} [] [] [Algebra R S] {f : } {T : Type u_1} [] [Algebra R T] {U : Type u_2} [] [Algebra R U] (h : ) (h' : ) (e : S ≃ₐ[R] T) :
(h.ofEquiv e).aequiv h' = e.symm.trans (h.aequiv h')
theorem IsAdjoinRootMonic.minpoly_eq {R : Type u} {S : Type v} [] [] [Algebra R S] {f : } [] [] [] (h : ) (hirr : ) :
minpoly R h.root = f
theorem Algebra.adjoin.powerBasis'_minpoly_gen {R : Type u} {S : Type v} [] [] [Algebra R S] [] [] [] {x : S} (hx' : ) :
minpoly R x = minpoly R .gen