File: Mathlib/RingTheory/Algebraic.lean

full_name: IsAlgebraic
code: /-- An element of an R-algebra is algebraic over R if it is a root of a nonzero polynomial
with coefficients in R. -/
def IsAlgebraic (x : A) : Prop 
goal: Prop

full_name: Transcendental
code: /-- An element of an R-algebra is transcendental over R if it is not algebraic over R. -/
def Transcendental (x : A) : Prop 
goal: Prop

full_name: is_transcendental_of_subsingleton
code: theorem is_transcendental_of_subsingleton [Subsingleton R] (x : A) : Transcendental R x 
goal: Transcendental R x

full_name: Subalgebra.IsAlgebraic
code: /-- A subalgebra is algebraic if all its elements are algebraic. -/
nonrec
def Subalgebra.IsAlgebraic (S : Subalgebra R A) : Prop 
goal: Prop

full_name: Algebra.IsAlgebraic
code: /-- An algebra is algebraic if all its elements are algebraic. -/
protected class Algebra.IsAlgebraic : Prop :=
  isAlgebraic : ∀ x : A, IsAlgebraic R x
goal: Prop

full_name: Algebra.IsAlgebraic.isAlgebraic
code: /-- An algebra is algebraic if all its elements are algebraic. -/
protected class Algebra.IsAlgebraic : Prop :=
  isAlgebraic : ∀ x : A, IsAlgebraic R x
goal: IsAlgebraic R x

full_name: Algebra.Transcendental
code: /-- An algebra is transcendental if some element is transcendental. -/
protected class Algebra.Transcendental : Prop :=
  transcendental : ∃ x : A, Transcendental R x
goal: Prop

full_name: Algebra.Transcendental.transcendental
code: /-- An algebra is transcendental if some element is transcendental. -/
protected class Algebra.Transcendental : Prop :=
  transcendental : ∃ x : A, Transcendental R x
goal: ∃ x, Transcendental R x

full_name: Algebra.isAlgebraic_def
code: lemma Algebra.isAlgebraic_def : Algebra.IsAlgebraic R A ↔ ∀ x : A, IsAlgebraic R x 
goal: Algebra.IsAlgebraic R A ↔ ∀ (x : A), IsAlgebraic R x

full_name: Algebra.transcendental_def
code: lemma Algebra.transcendental_def : Algebra.Transcendental R A ↔ ∃ x : A, Transcendental R x 
goal: Algebra.Transcendental R A ↔ ∃ x, Transcendental R x

full_name: Algebra.transcendental_iff_not_isAlgebraic
code: theorem Algebra.transcendental_iff_not_isAlgebraic :
    Algebra.Transcendental R A ↔ ¬ Algebra.IsAlgebraic R A 
goal: Algebra.Transcendental R A ↔ ¬Algebra.IsAlgebraic R A

full_name: Subalgebra.isAlgebraic_iff
code: /-- A subalgebra is algebraic if and only if it is algebraic as an algebra. -/
theorem Subalgebra.isAlgebraic_iff (S : Subalgebra R A) :
    S.IsAlgebraic ↔ @Algebra.IsAlgebraic R S _ _ S.algebra 
goal: S.IsAlgebraic ↔ Algebra.IsAlgebraic R ↥S

full_name: Algebra.isAlgebraic_iff
code: /-- An algebra is algebraic if and only if it is algebraic as a subalgebra. -/
theorem Algebra.isAlgebraic_iff : Algebra.IsAlgebraic R A ↔ (⊤ : Subalgebra R A).IsAlgebraic 
goal: Algebra.IsAlgebraic R A ↔ ⊤.IsAlgebraic

full_name: isAlgebraic_iff_not_injective
code: theorem isAlgebraic_iff_not_injective {x : A} :
    IsAlgebraic R x ↔ ¬Function.Injective (Polynomial.aeval x : R[X] →ₐ[R] A) 
goal: IsAlgebraic R x ↔ ¬Function.Injective ⇑(Polynomial.aeval x)

full_name: transcendental_iff_injective
code: theorem transcendental_iff_injective {x : A} :
    Transcendental R x ↔ Function.Injective (Polynomial.aeval x : R[X] →ₐ[R] A) 
goal: Transcendental R x ↔ Function.Injective ⇑(Polynomial.aeval x)

full_name: IsIntegral.isAlgebraic
code: /-- An integral element of an algebra is algebraic. -/
theorem IsIntegral.isAlgebraic [Nontrivial R] {x : A} : IsIntegral R x → IsAlgebraic R x 
goal: IsIntegral R x → IsAlgebraic R x

full_name: Algebra.IsIntegral.isAlgebraic
code: instance Algebra.IsIntegral.isAlgebraic [Nontrivial R] [Algebra.IsIntegral R A] :
    Algebra.IsAlgebraic R A 
goal: Algebra.IsAlgebraic R A

full_name: isAlgebraic_zero
code: theorem isAlgebraic_zero [Nontrivial R] : IsAlgebraic R (0 : A) 
goal: IsAlgebraic R 0

full_name: isAlgebraic_algebraMap
code: /-- An element of `R` is algebraic, when viewed as an element of the `R`-algebra `A`. -/
theorem isAlgebraic_algebraMap [Nontrivial R] (x : R) : IsAlgebraic R (algebraMap R A x) 
goal: IsAlgebraic R ((algebraMap R A) x)

full_name: isAlgebraic_one
code: theorem isAlgebraic_one [Nontrivial R] : IsAlgebraic R (1 : A) 
goal: IsAlgebraic R 1

full_name: isAlgebraic_nat
code: theorem isAlgebraic_nat [Nontrivial R] (n : ℕ) : IsAlgebraic R (n : A) 
goal: IsAlgebraic R ↑n

full_name: isAlgebraic_int
code: theorem isAlgebraic_int [Nontrivial R] (n : ℤ) : IsAlgebraic R (n : A) 
goal: IsAlgebraic R ↑n

full_name: isAlgebraic_rat
code: theorem isAlgebraic_rat (R : Type u) {A : Type v} [DivisionRing A] [Field R] [Algebra R A] (n : ℚ) :
    IsAlgebraic R (n : A) 
goal: IsAlgebraic R ↑n

full_name: isAlgebraic_of_mem_rootSet
code: theorem isAlgebraic_of_mem_rootSet {R : Type u} {A : Type v} [Field R] [Field A] [Algebra R A]
    {p : R[X]} {x : A} (hx : x ∈ p.rootSet A) : IsAlgebraic R x 
goal: IsAlgebraic R x

full_name: IsAlgebraic.algebraMap
code: protected theorem IsAlgebraic.algebraMap {a : S} :
    IsAlgebraic R a → IsAlgebraic R (algebraMap S A a) 
goal: IsAlgebraic R a → IsAlgebraic R ((algebraMap S A) a)

full_name: IsAlgebraic.algHom
code: /-- This is slightly more general than `IsAlgebraic.algebraMap` in that it
  allows noncommutative intermediate rings `A`. -/
protected theorem IsAlgebraic.algHom (f : A →ₐ[R] B) {a : A}
    (h : IsAlgebraic R a) : IsAlgebraic R (f a) 
goal: IsAlgebraic R (f a)

full_name: isAlgebraic_algHom_iff
code: theorem isAlgebraic_algHom_iff (f : A →ₐ[R] B) (hf : Function.Injective f)
    {a : A} : IsAlgebraic R (f a) ↔ IsAlgebraic R a 
goal: IsAlgebraic R (f a) ↔ IsAlgebraic R a

full_name: Algebra.IsAlgebraic.of_injective
code: theorem Algebra.IsAlgebraic.of_injective (f : A →ₐ[R] B) (hf : Function.Injective f)
    [Algebra.IsAlgebraic R B] : Algebra.IsAlgebraic R A 
goal: Algebra.IsAlgebraic R A

full_name: AlgEquiv.isAlgebraic
code: /-- Transfer `Algebra.IsAlgebraic` across an `AlgEquiv`. -/
theorem AlgEquiv.isAlgebraic (e : A ≃ₐ[R] B)
    [Algebra.IsAlgebraic R A] : Algebra.IsAlgebraic R B 
goal: Algebra.IsAlgebraic R B

full_name: AlgEquiv.isAlgebraic_iff
code: theorem AlgEquiv.isAlgebraic_iff (e : A ≃ₐ[R] B) :
    Algebra.IsAlgebraic R A ↔ Algebra.IsAlgebraic R B 
goal: Algebra.IsAlgebraic R A ↔ Algebra.IsAlgebraic R B

full_name: isAlgebraic_algebraMap_iff
code: theorem isAlgebraic_algebraMap_iff {a : S} (h : Function.Injective (algebraMap S A)) :
    IsAlgebraic R (algebraMap S A a) ↔ IsAlgebraic R a 
goal: IsAlgebraic R ((algebraMap S A) a) ↔ IsAlgebraic R a

full_name: IsAlgebraic.of_pow
code: theorem IsAlgebraic.of_pow {r : A} {n : ℕ} (hn : 0 < n) (ht : IsAlgebraic R (r ^ n)) :
    IsAlgebraic R r 
goal: IsAlgebraic R r

full_name: Transcendental.pow
code: theorem Transcendental.pow {r : A} (ht : Transcendental R r) {n : ℕ} (hn : 0 < n) :
    Transcendental R (r ^ n) 
goal: Transcendental R (r ^ n)

full_name: IsAlgebraic.invOf
code: lemma IsAlgebraic.invOf {x : S} [Invertible x] (h : IsAlgebraic R x) : IsAlgebraic R (⅟ x) 
goal: IsAlgebraic R ⅟x

full_name: IsAlgebraic.invOf_iff
code: lemma IsAlgebraic.invOf_iff {x : S} [Invertible x] :
    IsAlgebraic R (⅟ x) ↔ IsAlgebraic R x 
goal: IsAlgebraic R ⅟x ↔ IsAlgebraic R x

full_name: IsAlgebraic.inv_iff
code: lemma IsAlgebraic.inv_iff {K} [Field K] [Algebra R K] {x : K} :
    IsAlgebraic R (x⁻¹) ↔ IsAlgebraic R x 
goal: IsAlgebraic R x⁻¹ ↔ IsAlgebraic R x

full_name: isAlgebraic_iff_isIntegral
code: /-- An element of an algebra over a field is algebraic if and only if it is integral. -/
theorem isAlgebraic_iff_isIntegral {x : A} : IsAlgebraic K x ↔ IsIntegral K x 
goal: IsAlgebraic K x ↔ IsIntegral K x

full_name: Algebra.isAlgebraic_iff_isIntegral
code: protected theorem Algebra.isAlgebraic_iff_isIntegral :
    Algebra.IsAlgebraic K A ↔ Algebra.IsIntegral K A 
goal: Algebra.IsAlgebraic K A ↔ Algebra.IsIntegral K A

full_name: Algebra.IsAlgebraic.isIntegral
code: /-- This used to be an `alias` of `Algebra.isAlgebraic_iff_isIntegral` but that would make
`Algebra.IsAlgebraic K A` an explicit parameter instead of instance implicit. -/
protected instance Algebra.IsAlgebraic.isIntegral [Algebra.IsAlgebraic K A] :
    Algebra.IsIntegral K A 
goal: Algebra.IsIntegral K A

full_name: IsAlgebraic.tower_top_of_injective
code: /-- If x is algebraic over R, then x is algebraic over S when S is an extension of R,
  and the map from `R` to `S` is injective. -/
theorem IsAlgebraic.tower_top_of_injective
    (hinj : Function.Injective (algebraMap R S)) {x : A}
    (A_alg : IsAlgebraic R x) : IsAlgebraic S x 
goal: IsAlgebraic S x

full_name: Algebra.IsAlgebraic.tower_top_of_injective
code: /-- If A is an algebraic algebra over R, then A is algebraic over S when S is an extension of R,
  and the map from `R` to `S` is injective. -/
theorem Algebra.IsAlgebraic.tower_top_of_injective (hinj : Function.Injective (algebraMap R S))
    [Algebra.IsAlgebraic R A] : Algebra.IsAlgebraic S A 
goal: Algebra.IsAlgebraic S A

full_name: IsAlgebraic.tower_top
code: /-- If x is algebraic over K, then x is algebraic over L when L is an extension of K -/
theorem IsAlgebraic.tower_top {x : A} (A_alg : IsAlgebraic K x) :
    IsAlgebraic L x 
goal: IsAlgebraic L x

full_name: Algebra.IsAlgebraic.tower_top
code: /-- If A is an algebraic algebra over K, then A is algebraic over L when L is an extension of K -/
theorem Algebra.IsAlgebraic.tower_top [Algebra.IsAlgebraic K A] : Algebra.IsAlgebraic L A 
goal: Algebra.IsAlgebraic L A

full_name: IsAlgebraic.of_finite
code: theorem IsAlgebraic.of_finite (e : A) [FiniteDimensional K A] : IsAlgebraic K e 
goal: IsAlgebraic K e

full_name: Algebra.IsAlgebraic.of_finite
code: /-- A field extension is algebraic if it is finite. -/
instance Algebra.IsAlgebraic.of_finite [FiniteDimensional K A] : Algebra.IsAlgebraic K A 
goal: Algebra.IsAlgebraic K A

full_name: Algebra.IsAlgebraic.trans
code: /-- If L is an algebraic field extension of K and A is an algebraic algebra over L,
then A is algebraic over K. -/
protected theorem Algebra.IsAlgebraic.trans
    [L_alg : Algebra.IsAlgebraic K L] [A_alg : Algebra.IsAlgebraic L A] :
    Algebra.IsAlgebraic K A 
goal: Algebra.IsAlgebraic K A

full_name: Algebra.IsAlgebraic.algHom_bijective
code: theorem algHom_bijective [Algebra.IsAlgebraic K L] (f : L →ₐ[K] L) :
    Function.Bijective f 
goal: Function.Bijective ⇑f

full_name: Algebra.IsAlgebraic.algHom_bijective₂
code: theorem algHom_bijective₂ [Field R] [Algebra K R]
    [Algebra.IsAlgebraic K L] (f : L →ₐ[K] R) (g : R →ₐ[K] L) :
    Function.Bijective f ∧ Function.Bijective g 
goal: Function.Bijective ⇑f ∧ Function.Bijective ⇑g

full_name: Algebra.IsAlgebraic.bijective_of_isScalarTower
code: theorem bijective_of_isScalarTower [Algebra.IsAlgebraic K L]
    [Field R] [Algebra K R] [Algebra L R] [IsScalarTower K L R] (f : R →ₐ[K] L) :
    Function.Bijective f 
goal: Function.Bijective ⇑f

full_name: Algebra.IsAlgebraic.bijective_of_isScalarTower'
code: theorem bijective_of_isScalarTower' [Field R] [Algebra K R]
    [NoZeroSMulDivisors K R]
    [Algebra.IsAlgebraic K R] [Algebra L R] [IsScalarTower K L R] (f : R →ₐ[K] L) :
    Function.Bijective f 
goal: Function.Bijective ⇑f

full_name: Algebra.IsAlgebraic.algEquivEquivAlgHom
code: /-- Bijection between algebra equivalences and algebra homomorphisms -/
@[simps]
noncomputable def algEquivEquivAlgHom [Algebra.IsAlgebraic K L] :
    (L ≃ₐ[K] L) ≃* (L →ₐ[K] L) 
goal: (L ≃ₐ[K] L) ≃* (L →ₐ[K] L)

full_name: Algebra.IsAlgebraic.algEquivEquivAlgHom_symm_apply
code: /-- Bijection between algebra equivalences and algebra homomorphisms -/
@[simps]
noncomputable def algEquivEquivAlgHom [Algebra.IsAlgebraic K L] :
    (L ≃ₐ[K] L) ≃* (L →ₐ[K] L) 
goal: (Algebra.IsAlgebraic.algEquivEquivAlgHom K L).symm ϕ = AlgEquiv.ofBijective ϕ ⋯

full_name: Algebra.IsAlgebraic.algEquivEquivAlgHom_apply
code: /-- Bijection between algebra equivalences and algebra homomorphisms -/
@[simps]
noncomputable def algEquivEquivAlgHom [Algebra.IsAlgebraic K L] :
    (L ≃ₐ[K] L) ≃* (L →ₐ[K] L) 
goal: (Algebra.IsAlgebraic.algEquivEquivAlgHom K L) ϕ = ↑ϕ

full_name: AlgHom.bijective
code: theorem AlgHom.bijective [FiniteDimensional K L] (ϕ : L →ₐ[K] L) : Function.Bijective ϕ 
goal: Function.Bijective ⇑ϕ

full_name: algEquivEquivAlgHom
code: /-- Bijection between algebra equivalences and algebra homomorphisms -/
noncomputable abbrev algEquivEquivAlgHom [FiniteDimensional K L] :
    (L ≃ₐ[K] L) ≃* (L →ₐ[K] L) 
goal: (L ≃ₐ[K] L) ≃* (L →ₐ[K] L)

full_name: exists_integral_multiple
code: theorem exists_integral_multiple [Algebra R S] {z : S} (hz : IsAlgebraic R z)
    (inj : ∀ x, algebraMap R S x = 0 → x = 0) :
    ∃ᵉ (x : integralClosure R S) (y ≠ (0 : R)), z * algebraMap R S y = x 
goal: ∃ x y, y ≠ 0 ∧ z * (algebraMap R S) y = ↑x

full_name: IsIntegralClosure.exists_smul_eq_mul
code: /-- A fraction `(a : S) / (b : S)` can be reduced to `(c : S) / (d : R)`,
if `S` is the integral closure of `R` in an algebraic extension `L` of `R`. -/
theorem IsIntegralClosure.exists_smul_eq_mul {L : Type*} [Field L] [Algebra R S] [Algebra S L]
    [Algebra R L] [IsScalarTower R S L] [IsIntegralClosure S R L] [Algebra.IsAlgebraic R L]
    (inj : Function.Injective (algebraMap R L)) (a : S) {b : S} (hb : b ≠ 0) :
    ∃ᵉ (c : S) (d ≠ (0 : R)), d • a = b * c 
goal: ∃ c d, d ≠ 0 ∧ d • a = b * c

full_name: inv_eq_of_aeval_divX_ne_zero
code: theorem inv_eq_of_aeval_divX_ne_zero {x : L} {p : K[X]} (aeval_ne : aeval x (divX p) ≠ 0) :
    x⁻¹ = aeval x (divX p) / (aeval x p - algebraMap _ _ (p.coeff 0)) 
goal: x⁻¹ = (Polynomial.aeval x) p.divX / ((Polynomial.aeval x) p - (algebraMap K L) (p.coeff 0))

full_name: inv_eq_of_root_of_coeff_zero_ne_zero
code: theorem inv_eq_of_root_of_coeff_zero_ne_zero {x : L} {p : K[X]} (aeval_eq : aeval x p = 0)
    (coeff_zero_ne : p.coeff 0 ≠ 0) : x⁻¹ = -(aeval x (divX p) / algebraMap _ _ (p.coeff 0)) 
goal: x⁻¹ = -((Polynomial.aeval x) p.divX / (algebraMap K L) (p.coeff 0))

full_name: Subalgebra.inv_mem_of_root_of_coeff_zero_ne_zero
code: theorem Subalgebra.inv_mem_of_root_of_coeff_zero_ne_zero {x : A} {p : K[X]}
    (aeval_eq : aeval x p = 0) (coeff_zero_ne : p.coeff 0 ≠ 0) : (x⁻¹ : L) ∈ A 
goal: (↑x)⁻¹ ∈ A

full_name: Subalgebra.inv_mem_of_algebraic
code: theorem Subalgebra.inv_mem_of_algebraic {x : A} (hx : _root_.IsAlgebraic K (x : L)) :
    (x⁻¹ : L) ∈ A 
goal: (↑x)⁻¹ ∈ A

full_name: Subalgebra.isField_of_algebraic
code: /-- In an algebraic extension L/K, an intermediate subalgebra is a field. -/
theorem Subalgebra.isField_of_algebraic [Algebra.IsAlgebraic K L] : IsField A 
goal: IsField ↥A

full_name: Polynomial.hasSMulPi
code: /-- This is not an instance as it forms a diamond with `Pi.instSMul`.

See the `instance_diamonds` test for details. -/
def Polynomial.hasSMulPi [Semiring R'] [SMul R' S'] : SMul R'[X] (R' → S') 
goal: SMul R'[X] (R' → S')

full_name: Polynomial.hasSMulPi'
code: /-- This is not an instance as it forms a diamond with `Pi.instSMul`.

See the `instance_diamonds` test for details. -/
noncomputable def Polynomial.hasSMulPi' [CommSemiring R'] [Semiring S'] [Algebra R' S']
    [SMul S' T'] : SMul R'[X] (S' → T') 
goal: SMul R'[X] (S' → T')

full_name: polynomial_smul_apply
code: @[simp]
theorem polynomial_smul_apply [Semiring R'] [SMul R' S'] (p : R'[X]) (f : R' → S') (x : R') :
    (p • f) x = eval x p • f x 
goal: (p • f) x = Polynomial.eval x p • f x

full_name: polynomial_smul_apply'
code: @[simp]
theorem polynomial_smul_apply' [CommSemiring R'] [Semiring S'] [Algebra R' S'] [SMul S' T']
    (p : R'[X]) (f : S' → T') (x : S') : (p • f) x = aeval x p • f x 
goal: (p • f) x = (Polynomial.aeval x) p • f x

full_name: Polynomial.algebraPi
code: /-- This is not an instance for the same reasons as `Polynomial.hasSMulPi'`. -/
noncomputable def Polynomial.algebraPi : Algebra R'[X] (S' → T') 
goal: Algebra R'[X] (S' → T')

full_name: Polynomial.algebraMap_pi_eq_aeval
code: @[simp]
theorem Polynomial.algebraMap_pi_eq_aeval :
    (algebraMap R'[X] (S' → T') : R'[X] → S' → T') = fun p z => algebraMap _ _ (aeval z p) 
goal: ⇑(algebraMap R'[X] (S' → T')) = fun p z => (algebraMap S' T') ((Polynomial.aeval z) p)

full_name: Polynomial.algebraMap_pi_self_eq_eval
code: @[simp]
theorem Polynomial.algebraMap_pi_self_eq_eval :
    (algebraMap R'[X] (R' → R') : R'[X] → R' → R') = fun p z => eval z p 
goal: ⇑(algebraMap R'[X] (R' → R')) = fun p z => Polynomial.eval z p