File: Mathlib/LinearAlgebra/TensorProduct/Subalgebra.lean

full_name: Subalgebra.lTensorBot
code: /-- If `A` is a subalgebra of `S/R`, there is the natural `R`-algebra isomorphism between
`i(R) ⊗[R] A` and `A` induced by multiplication in `S`, here `i : R → S` is the structure map.
This generalizes `Algebra.TensorProduct.lid` as `i(R)` is not necessarily isomorphic to `R`.

This is the `Subalgebra` version of `Submodule.lTensorOne` -/
def lTensorBot : (⊥ : Subalgebra R S) ⊗[R] A ≃ₐ[R] A 
goal: ↥⊥ ⊗[R] ↥A ≃ₐ[R] ↥A

full_name: Subalgebra.lTensorBot_tmul
code: @[simp]
theorem lTensorBot_tmul (x : R) (a : A) : A.lTensorBot (algebraMap R _ x ⊗ₜ[R] a) = x • a 
goal: A.lTensorBot ((algebraMap R ↥⊥) x ⊗ₜ[R] a) = x • a

full_name: Subalgebra.lTensorBot_one_tmul
code: @[simp]
theorem lTensorBot_one_tmul (a : A) : A.lTensorBot (1 ⊗ₜ[R] a) = a 
goal: A.lTensorBot (1 ⊗ₜ[R] a) = a

full_name: Subalgebra.lTensorBot_symm_apply
code: @[simp]
theorem lTensorBot_symm_apply (a : A) : A.lTensorBot.symm a = 1 ⊗ₜ[R] a 
goal: A.lTensorBot.symm a = 1 ⊗ₜ[R] a

full_name: Subalgebra.rTensorBot
code: /-- If `A` is a subalgebra of `S/R`, there is the natural `R`-algebra isomorphism between
`A ⊗[R] i(R)` and `A` induced by multiplication in `S`, here `i : R → S` is the structure map.
This generalizes `Algebra.TensorProduct.rid` as `i(R)` is not necessarily isomorphic to `R`.

This is the `Subalgebra` version of `Submodule.rTensorOne` -/
def rTensorBot : A ⊗[R] (⊥ : Subalgebra R S) ≃ₐ[R] A 
goal: ↥A ⊗[R] ↥⊥ ≃ₐ[R] ↥A

full_name: Subalgebra.rTensorBot_tmul
code: @[simp]
theorem rTensorBot_tmul (x : R) (a : A) : A.rTensorBot (a ⊗ₜ[R] algebraMap R _ x) = x • a 
goal: A.rTensorBot (a ⊗ₜ[R] (algebraMap R ↥⊥) x) = x • a

full_name: Subalgebra.rTensorBot_tmul_one
code: @[simp]
theorem rTensorBot_tmul_one (a : A) : A.rTensorBot (a ⊗ₜ[R] 1) = a 
goal: A.rTensorBot (a ⊗ₜ[R] 1) = a

full_name: Subalgebra.rTensorBot_symm_apply
code: @[simp]
theorem rTensorBot_symm_apply (a : A) : A.rTensorBot.symm a = a ⊗ₜ[R] 1 
goal: A.rTensorBot.symm a = a ⊗ₜ[R] 1

full_name: Subalgebra.comm_trans_lTensorBot
code: @[simp]
theorem comm_trans_lTensorBot :
    (Algebra.TensorProduct.comm R _ _).trans A.lTensorBot = A.rTensorBot 
goal: (Algebra.TensorProduct.comm R ↥A ↥⊥).trans A.lTensorBot = A.rTensorBot

full_name: Subalgebra.comm_trans_rTensorBot
code: @[simp]
theorem comm_trans_rTensorBot :
    (Algebra.TensorProduct.comm R _ _).trans A.rTensorBot = A.lTensorBot 
goal: (Algebra.TensorProduct.comm R ↥⊥ ↥A).trans A.rTensorBot = A.lTensorBot

full_name: Subalgebra.mulMap
code: /-- If `A` and `B` are subalgebras in a commutative algebra `S` over `R`,
there is the natural `R`-algebra homomorphism
`A ⊗[R] B →ₐ[R] S` induced by multiplication in `S`. -/
def mulMap : A ⊗[R] B →ₐ[R] S 
goal: ↥A ⊗[R] ↥B →ₐ[R] S

full_name: Subalgebra.mulMap_tmul
code: @[simp]
theorem mulMap_tmul (a : A) (b : B) : mulMap A B (a ⊗ₜ[R] b) = a.1 * b.1 
goal: (A.mulMap B) (a ⊗ₜ[R] b) = ↑a * ↑b

full_name: Subalgebra.mulMap_toLinearMap
code: theorem mulMap_toLinearMap : (A.mulMap B).toLinearMap = (toSubmodule A).mulMap (toSubmodule B) 
goal: (A.mulMap B).toLinearMap = (Subalgebra.toSubmodule A).mulMap (Subalgebra.toSubmodule B)

full_name: Subalgebra.mulMap_comm
code: theorem mulMap_comm : mulMap B A = (mulMap A B).comp (Algebra.TensorProduct.comm R B A) 
goal: B.mulMap A = (A.mulMap B).comp ↑(Algebra.TensorProduct.comm R ↥B ↥A)

full_name: Subalgebra.mulMap_range
code: theorem mulMap_range : (A.mulMap B).range = A ⊔ B 
goal: (A.mulMap B).range = A ⊔ B

full_name: Subalgebra.mulMap_bot_left_eq
code: theorem mulMap_bot_left_eq : mulMap ⊥ A = A.val.comp A.lTensorBot.toAlgHom 
goal: ⊥.mulMap A = A.val.comp ↑A.lTensorBot

full_name: Subalgebra.mulMap_bot_right_eq
code: theorem mulMap_bot_right_eq : mulMap A ⊥ = A.val.comp A.rTensorBot.toAlgHom 
goal: A.mulMap ⊥ = A.val.comp ↑A.rTensorBot

full_name: Subalgebra.mulMap'
code: /-- If `A` and `B` are subalgebras in a commutative algebra `S` over `R`,
there is the natural `R`-algebra homomorphism
`A ⊗[R] B →ₐ[R] A ⊔ B` induced by multiplication in `S`,
which is surjective (`Subalgebra.mulMap'_surjective`). -/
def mulMap' : A ⊗[R] B →ₐ[R] ↥(A ⊔ B) 
goal: ↥A ⊗[R] ↥B →ₐ[R] ↥(A ⊔ B)

full_name: Subalgebra.val_mulMap'_tmul
code: @[simp]
theorem val_mulMap'_tmul (a : A) (b : B) : (mulMap' A B (a ⊗ₜ[R] b) : S) = a.1 * b.1 
goal: ↑((A.mulMap' B) (a ⊗ₜ[R] b)) = ↑a * ↑b

full_name: Subalgebra.mulMap'_surjective
code: theorem mulMap'_surjective : Function.Surjective (mulMap' A B) 
goal: Function.Surjective ⇑(A.mulMap' B)

full_name: Subalgebra.rank_sup_le_of_free
code: /-- If `A` and `B` are subalgebras of a commutative `R`-algebra `S`, both of them are
free `R`-algebras, then the rank of `A ⊔ B` is less than or equal to
the product of that of `A` and `B`. -/
theorem rank_sup_le_of_free [Module.Free R A] [Module.Free R B] :
    Module.rank R ↥(A ⊔ B) ≤ Module.rank R A * Module.rank R B 
goal: Module.rank R ↥(A ⊔ B) ≤ Module.rank R ↥A * Module.rank R ↥B

full_name: Subalgebra.finrank_sup_le_of_free
code: /-- If `A` and `B` are subalgebras of a commutative `R`-algebra `S`, both of them are
free `R`-algebras, then the `FiniteDimensional.finrank` of `A ⊔ B` is less than or equal to
the product of that of `A` and `B`. -/
theorem finrank_sup_le_of_free [Module.Free R A] [Module.Free R B] :
    finrank R ↥(A ⊔ B) ≤ finrank R A * finrank R B 
goal: FiniteDimensional.finrank R ↥(A ⊔ B) ≤ FiniteDimensional.finrank R ↥A * FiniteDimensional.finrank R ↥B