# Bimodules #

One frequently encounters situations in which several sets of scalars act on a single space, subject to compatibility condition(s). A distinguished instance of this is the theory of bimodules: one has two rings R, S acting on an additive group M, with R acting covariantly ("on the left") and S acting contravariantly ("on the right"). The compatibility condition is just: (r • m) • s = r • (m • s) for all r : R, s : S, m : M.

This situation can be set up in Mathlib as:

variable (R S M : Type*) [Ring R] [Ring S]
variable [AddCommGroup M] [Module R M] [Module Sᵐᵒᵖ M] [SMulCommClass R Sᵐᵒᵖ M]


The key fact is:

example : Module (R ⊗[ℕ] Sᵐᵒᵖ) M := TensorProduct.Algebra.module


Note that the corresponding result holds for the canonically isomorphic ring R ⊗[ℤ] Sᵐᵒᵖ but it is preferable to use the R ⊗[ℕ] Sᵐᵒᵖ instance since it works without additive inverses.

Bimodules are thus just a special case of Modules and most of their properties follow from the theory of Modules. In particular a two-sided Submodule of a bimodule is simply a term of type Submodule (R ⊗[ℕ] Sᵐᵒᵖ) M.

This file is a place to collect results which are specific to bimodules.

## Main definitions #

• Subbimodule.mk
• Subbimodule.smul_mem
• Subbimodule.smul_mem'
• Subbimodule.toSubmodule
• Subbimodule.toSubmodule'

## Implementation details #

For many definitions and lemmas it is preferable to set things up without opposites, i.e., as: [Module S M] [SMulCommClass R S M] rather than [Module Sᵐᵒᵖ M] [SMulCommClass R Sᵐᵒᵖ M]. The corresponding results for opposites then follow automatically and do not require taking advantage of the fact that (Sᵐᵒᵖ)ᵐᵒᵖ is defeq to S.

## TODO #

Develop the theory of two-sided ideals, which have type Submodule (R ⊗[ℕ] Rᵐᵒᵖ) R.

@[simp]
theorem Subbimodule.mk_carrier {R : Type u_1} {A : Type u_2} {B : Type u_3} {M : Type u_4} [] [] [Module R M] [] [] [Module A M] [Module B M] [Algebra R A] [Algebra R B] [] [] [] (p : ) (hA : ∀ (a : A) {m : M}, m pa m p) (hB : ∀ (b : B) {m : M}, m pb m p) :
(Subbimodule.mk p hA hB) = p
def Subbimodule.mk {R : Type u_1} {A : Type u_2} {B : Type u_3} {M : Type u_4} [] [] [Module R M] [] [] [Module A M] [Module B M] [Algebra R A] [Algebra R B] [] [] [] (p : ) (hA : ∀ (a : A) {m : M}, m pa m p) (hB : ∀ (b : B) {m : M}, m pb m p) :

A constructor for a subbimodule which demands closure under the two sets of scalars individually, rather than jointly via their tensor product.

Note that R plays no role but it is convenient to make this generalisation to support the cases R = ℕ and R = ℤ which both show up naturally. See also Subbimodule.baseChange.

Equations
• Subbimodule.mk p hA hB = { carrier := p, add_mem' := , zero_mem' := , smul_mem' := }
Instances For
theorem Subbimodule.smul_mem {R : Type u_1} {A : Type u_2} {B : Type u_3} {M : Type u_4} [] [] [Module R M] [] [] [Module A M] [Module B M] [Algebra R A] [Algebra R B] [] [] [] (p : Submodule (TensorProduct R A B) M) (a : A) {m : M} (hm : m p) :
a m p
theorem Subbimodule.smul_mem' {R : Type u_1} {A : Type u_2} {B : Type u_3} {M : Type u_4} [] [] [Module R M] [] [] [Module A M] [Module B M] [Algebra R A] [Algebra R B] [] [] [] (p : Submodule (TensorProduct R A B) M) (b : B) {m : M} (hm : m p) :
b m p
@[simp]
theorem Subbimodule.baseChange_carrier {R : Type u_1} {A : Type u_2} {B : Type u_3} {M : Type u_4} [] [] [Module R M] [] [] [Module A M] [Module B M] [Algebra R A] [Algebra R B] [] [] [] (S : Type u_5) [] [Module S M] [Algebra S A] [Algebra S B] [] [] (p : Submodule (TensorProduct R A B) M) :
= p
def Subbimodule.baseChange {R : Type u_1} {A : Type u_2} {B : Type u_3} {M : Type u_4} [] [] [Module R M] [] [] [Module A M] [Module B M] [Algebra R A] [Algebra R B] [] [] [] (S : Type u_5) [] [Module S M] [Algebra S A] [Algebra S B] [] [] (p : Submodule (TensorProduct R A B) M) :

If A and B are also Algebras over yet another set of scalars S then we may "base change" from R to S.

Equations
Instances For
@[simp]
theorem Subbimodule.toSubmodule_carrier {R : Type u_1} {A : Type u_2} {B : Type u_3} {M : Type u_4} [] [] [Module R M] [] [] [Module A M] [Module B M] [Algebra R A] [Algebra R B] [] [] [] (p : Submodule (TensorProduct R A B) M) :
= p
def Subbimodule.toSubmodule {R : Type u_1} {A : Type u_2} {B : Type u_3} {M : Type u_4} [] [] [Module R M] [] [] [Module A M] [Module B M] [Algebra R A] [Algebra R B] [] [] [] (p : Submodule (TensorProduct R A B) M) :

Forgetting the B action, a Submodule over A ⊗[R] B is just a Submodule over A.

Equations
• = { carrier := p, add_mem' := , zero_mem' := , smul_mem' := }
Instances For
@[simp]
theorem Subbimodule.toSubmodule'_carrier {R : Type u_1} {A : Type u_2} {B : Type u_3} {M : Type u_4} [] [] [Module R M] [] [] [Module A M] [Module B M] [Algebra R A] [Algebra R B] [] [] [] (p : Submodule (TensorProduct R A B) M) :
= p
def Subbimodule.toSubmodule' {R : Type u_1} {A : Type u_2} {B : Type u_3} {M : Type u_4} [] [] [Module R M] [] [] [Module A M] [Module B M] [Algebra R A] [Algebra R B] [] [] [] (p : Submodule (TensorProduct R A B) M) :

Forgetting the A action, a Submodule over A ⊗[R] B is just a Submodule over B.

Equations
• = { carrier := p, add_mem' := , zero_mem' := , smul_mem' := }
Instances For
@[simp]
theorem Subbimodule.toSubbimoduleInt_carrier (R : Type u_1) (S : Type u_2) (M : Type u_3) [Ring R] [Ring S] [] [Module R M] [Module S M] [] (p : Submodule (TensorProduct R S) M) :
= p
def Subbimodule.toSubbimoduleInt (R : Type u_1) (S : Type u_2) (M : Type u_3) [Ring R] [Ring S] [] [Module R M] [Module S M] [] (p : Submodule (TensorProduct R S) M) :

A Submodule over R ⊗[ℕ] S is naturally also a Submodule over the canonically-isomorphic ring R ⊗[ℤ] S.

Equations
Instances For
@[simp]
theorem Subbimodule.toSubbimoduleNat_carrier (R : Type u_1) (S : Type u_2) (M : Type u_3) [Ring R] [Ring S] [] [Module R M] [Module S M] [] (p : Submodule (TensorProduct R S) M) :
= p
def Subbimodule.toSubbimoduleNat (R : Type u_1) (S : Type u_2) (M : Type u_3) [Ring R] [Ring S] [] [Module R M] [Module S M] [] (p : Submodule (TensorProduct R S) M) :

A Submodule over R ⊗[ℤ] S is naturally also a Submodule over the canonically-isomorphic ring R ⊗[ℕ] S.

Equations
Instances For