mathlib documentation

ring_theory.​algebra_tower

ring_theory.​algebra_tower

Towers of algebras

We set up the basic theory of algebra towers. An algebra tower A/S/R is expressed by having instances of algebra A S, algebra R S, algebra R A and is_scalar_tower R S A, the later asserting the compatibility condition (r • s) • a = r • (s • a).

In field_theory/tower.lean we use this to prove the tower law for finite extensions, that if R and S are both fields, then [A:R] = [A:S] [S:A].

In this file we prepare the main lemma: if {bi | i ∈ I} is an R-basis of S and {cj | j ∈ J} is a S-basis of A, then {bi cj | i ∈ I, j ∈ J} is an R-basis of A. This statement does not require the base rings to be a field, so we also generalize the lemma to rings in this file.

theorem is_scalar_tower.​algebra_map_smul {R : Type u} (S : Type v) {A : Type w} [comm_semiring R] [semiring S] [add_comm_monoid A] [algebra R S] [semimodule S A] [semimodule R A] [is_scalar_tower R S A] (r : R) (x : A) :
(algebra_map R S) r x = r x

theorem is_scalar_tower.​smul_left_comm {R : Type u} {S : Type v} {A : Type w} [comm_semiring R] [semiring S] [add_comm_monoid A] [algebra R S] [semimodule S A] [semimodule R A] [is_scalar_tower R S A] (r : R) (s : S) (x : A) :
r s x = s r x

theorem is_scalar_tower.​of_algebra_map_eq {R : Type u} {S : Type v} {A : Type w} [comm_semiring R] [comm_semiring S] [semiring A] [algebra R S] [algebra S A] [algebra R A] :
(∀ (x : R), (algebra_map R A) x = (algebra_map S A) ((algebra_map R S) x))is_scalar_tower R S A

theorem is_scalar_tower.​algebra_map_eq (R : Type u) (S : Type v) (A : Type w) [comm_semiring R] [comm_semiring S] [semiring A] [algebra R S] [algebra S A] [algebra R A] [is_scalar_tower R S A] :

theorem is_scalar_tower.​algebra_map_apply (R : Type u) (S : Type v) (A : Type w) [comm_semiring R] [comm_semiring S] [semiring A] [algebra R S] [algebra S A] [algebra R A] [is_scalar_tower R S A] (x : R) :

@[ext]
theorem is_scalar_tower.​algebra.​ext {S : Type u} {A : Type v} [comm_semiring S] [semiring A] (h1 h2 : algebra S A) :
(∀ {r : S} {x : A}, r x = r x)h1 = h2

theorem is_scalar_tower.​algebra_comap_eq (R : Type u) (S : Type v) (A : Type w) [comm_semiring R] [comm_semiring S] [semiring A] [algebra R S] [algebra S A] [algebra R A] [is_scalar_tower R S A] :
algebra.comap.algebra R S A = _inst_7

def is_scalar_tower.​to_alg_hom (R : Type u) (S : Type v) (A : Type w) [comm_semiring R] [comm_semiring S] [semiring A] [algebra R S] [algebra S A] [algebra R A] [is_scalar_tower R S A] :

In a tower, the canonical map from the middle element to the top element is an algebra homomorphism over the bottom element.

Equations
@[simp]
theorem is_scalar_tower.​to_alg_hom_apply (R : Type u) (S : Type v) (A : Type w) [comm_semiring R] [comm_semiring S] [semiring A] [algebra R S] [algebra S A] [algebra R A] [is_scalar_tower R S A] (y : S) :

def is_scalar_tower.​restrict_base (R : Type u) {S : Type v} {A : Type w} {B : Type u₁} [comm_semiring R] [comm_semiring S] [semiring A] [semiring B] [algebra R S] [algebra S A] [algebra R A] [algebra S B] [algebra R B] [is_scalar_tower R S A] [is_scalar_tower R S B] :
(A →ₐ[S] B)(A →ₐ[R] B)

R ⟶ S induces S-Alg ⥤ R-Alg

Equations
@[simp]
theorem is_scalar_tower.​restrict_base_apply (R : Type u) {S : Type v} {A : Type w} {B : Type u₁} [comm_semiring R] [comm_semiring S] [semiring A] [semiring B] [algebra R S] [algebra S A] [algebra R A] [algebra S B] [algebra R B] [is_scalar_tower R S A] [is_scalar_tower R S B] (f : A →ₐ[S] B) (x : A) :

@[instance]
def is_scalar_tower.​right (R : Type u) {S : Type v} [comm_semiring R] [comm_semiring S] [algebra R S] :

Equations
  • _ = _
@[instance]
def is_scalar_tower.​nat {S : Type v} {A : Type w} [comm_semiring S] [semiring A] [algebra S A] :

Equations
@[instance]
def is_scalar_tower.​comap {R : Type u_1} {S : Type u_2} {A : Type u_3} [comm_semiring R] [comm_semiring S] [semiring A] [algebra R S] [algebra S A] :

Equations
@[instance]
def is_scalar_tower.​subsemiring {S : Type v} {A : Type w} [comm_semiring S] [semiring A] [algebra S A] (U : subsemiring S) :

Equations
  • _ = _
@[instance]
def is_scalar_tower.​subring {S : Type u_1} {A : Type u_2} [comm_ring S] [ring A] [algebra S A] (U : set S) [is_subring U] :

Equations
  • _ = _
@[nolint, instance]
def is_scalar_tower.​of_ring_hom {R : Type u_1} {A : Type u_2} {B : Type u_3} [comm_semiring R] [comm_semiring A] [comm_semiring B] [algebra R A] [algebra R B] (f : A →ₐ[R] B) :

Equations
  • _ = _
@[instance]
def is_scalar_tower.​subalgebra (R : Type u) (A : Type w) [comm_semiring R] [comm_semiring A] [algebra R A] (S : subalgebra R A) :

Equations
  • _ = _
@[instance]
def is_scalar_tower.​polynomial (R : Type u) (A : Type w) (B : Type u₁) [comm_semiring R] [comm_semiring A] [algebra R A] [comm_semiring B] [algebra A B] [algebra R B] [is_scalar_tower R A B] :

Equations
  • _ = _
theorem is_scalar_tower.​aeval_apply (R : Type u) (A : Type w) (B : Type u₁) [comm_semiring R] [comm_semiring A] [algebra R A] [comm_semiring B] [algebra A B] [algebra R B] [is_scalar_tower R A B] (x : B) (p : polynomial R) :

@[instance]
def is_scalar_tower.​int (S : Type v) (A : Type w) [comm_ring S] [comm_ring A] [algebra S A] :

Equations
  • _ = _
@[instance]
def is_scalar_tower.​rat (R : Type u) (S : Type v) [field R] [division_ring S] [algebra R S] [char_zero R] [char_zero S] :

Equations
  • _ = _
theorem algebra.​adjoin_algebra_map' {R : Type u} {S : Type v} {A : Type w} [comm_ring R] [comm_ring S] [comm_ring A] [algebra R S] [algebra S A] (s : set S) :

theorem algebra.​adjoin_algebra_map (R : Type u) (S : Type v) (A : Type w) [comm_ring R] [comm_ring S] [comm_ring A] [algebra R S] [algebra S A] [algebra R A] [is_scalar_tower R S A] (s : set S) :

def subalgebra.​res (R : Type u) {S : Type v} {A : Type w} [comm_semiring R] [comm_semiring S] [semiring A] [algebra R S] [algebra S A] [algebra R A] [is_scalar_tower R S A] :

If A/S/R is a tower of algebras then the restriction of a S-subalgebra of A is an R-subalgebra of A.

Equations
@[simp]
theorem subalgebra.​res_top (R : Type u) {S : Type v} {A : Type w} [comm_semiring R] [comm_semiring S] [semiring A] [algebra R S] [algebra S A] [algebra R A] [is_scalar_tower R S A] :

@[simp]
theorem subalgebra.​mem_res (R : Type u) {S : Type v} {A : Type w} [comm_semiring R] [comm_semiring S] [semiring A] [algebra R S] [algebra S A] [algebra R A] [is_scalar_tower R S A] {U : subalgebra S A} {x : A} :

theorem subalgebra.​res_inj (R : Type u) {S : Type v} {A : Type w} [comm_semiring R] [comm_semiring S] [semiring A] [algebra R S] [algebra S A] [algebra R A] [is_scalar_tower R S A] {U V : subalgebra S A} :

def subalgebra.​of_under {R : Type u_1} {A : Type u_2} {B : Type u_3} [comm_semiring R] [comm_semiring A] [semiring B] [algebra R A] [algebra R B] (S : subalgebra R A) (U : subalgebra S A) [algebra S B] [is_scalar_tower R S B] :
(U →ₐ[S] B)((S.under U) →ₐ[R] B)

Produces a map from subalgebra.under.

Equations
def submodule.​restrict_scalars' (R : Type u) {S : Type v} {A : Type w} [comm_semiring R] [semiring S] [add_comm_monoid A] [algebra R S] [semimodule S A] [semimodule R A] [is_scalar_tower R S A] :
submodule S Asubmodule R A

Restricting the scalars of submodules in an algebra tower.

Equations
theorem submodule.​restrict_scalars'_top (R : Type u) (S : Type v) (A : Type w) [comm_semiring R] [semiring S] [add_comm_monoid A] [algebra R S] [semimodule S A] [semimodule R A] [is_scalar_tower R S A] :

theorem submodule.​restrict_scalars'_injective {R : Type u} {S : Type v} {A : Type w} [comm_semiring R] [semiring S] [add_comm_monoid A] [algebra R S] [semimodule S A] [semimodule R A] [is_scalar_tower R S A] (U₁ U₂ : submodule S A) :

theorem submodule.​restrict_scalars'_inj {R : Type u} {S : Type v} {A : Type w} [comm_semiring R] [semiring S] [add_comm_monoid A] [algebra R S] [semimodule S A] [semimodule R A] [is_scalar_tower R S A] {U₁ U₂ : submodule S A} :

theorem submodule.​smul_mem_span_smul_of_mem {R : Type u} {S : Type v} {A : Type w} [comm_semiring R] [semiring S] [add_comm_monoid A] [algebra R S] [semimodule S A] [semimodule R A] [is_scalar_tower R S A] {s : set S} {t : set A} {k : S} (hks : k submodule.span R s) {x : A} :
x tk x submodule.span R (s t)

theorem submodule.​smul_mem_span_smul {R : Type u} {S : Type v} {A : Type w} [comm_semiring R] [semiring S] [add_comm_monoid A] [algebra R S] [semimodule S A] [semimodule R A] [is_scalar_tower R S A] {s : set S} (hs : submodule.span R s = ) {t : set A} {k : S} {x : A} :
x submodule.span R tk x submodule.span R (s t)

theorem submodule.​smul_mem_span_smul' {R : Type u} {S : Type v} {A : Type w} [comm_semiring R] [semiring S] [add_comm_monoid A] [algebra R S] [semimodule S A] [semimodule R A] [is_scalar_tower R S A] {s : set S} (hs : submodule.span R s = ) {t : set A} {k : S} {x : A} :
x submodule.span R (s t)k x submodule.span R (s t)

theorem submodule.​span_smul {R : Type u} {S : Type v} {A : Type w} [comm_semiring R] [semiring S] [add_comm_monoid A] [algebra R S] [semimodule S A] [semimodule R A] [is_scalar_tower R S A] {s : set S} (hs : submodule.span R s = ) (t : set A) :

theorem linear_independent_smul {R : Type u} {S : Type v} {A : Type w} [comm_ring R] [ring S] [add_comm_group A] [algebra R S] [module S A] [module R A] [is_scalar_tower R S A] {ι : Type v₁} {b : ι → S} {κ : Type w₁} {c : κ → A} :
linear_independent R blinear_independent S clinear_independent R (λ (p : ι × κ), b p.fst c p.snd)

theorem is_basis.​smul {R : Type u} {S : Type v} {A : Type w} [comm_ring R] [ring S] [add_comm_group A] [algebra R S] [module S A] [module R A] [is_scalar_tower R S A] {ι : Type v₁} {b : ι → S} {κ : Type w₁} {c : κ → A} :
is_basis R bis_basis S cis_basis R (λ (p : ι × κ), b p.fst c p.snd)