Transfer algebraic structures across Equiv
s #
This continues the pattern set in Mathlib/Algebra/Group/TransferInstance.lean
.
@[reducible, inline]
abbrev
Equiv.module
(R : Type u_1)
{α : Type u_2}
{β : Type u_3}
[Semiring R]
(e : α ≃ β)
[AddCommMonoid β]
:
have x := e.addCommMonoid;
[Module R β] → Module R α
Transfer Module
across an Equiv
Equations
- @Equiv.module R α β inst✝¹ e inst✝ = fun [Module R β] => let __src := Equiv.distribMulAction R e; { toDistribMulAction := __src, add_smul := ⋯, zero_smul := ⋯ }
Instances For
def
Equiv.linearEquiv
(R : Type u_1)
{α : Type u_2}
{β : Type u_3}
[Semiring R]
(e : α ≃ β)
[AddCommMonoid β]
[Module R β]
:
let addCommMonoid := e.addCommMonoid;
have module := Equiv.module R e;
α ≃ₗ[R] β
An equivalence e : α ≃ β
gives a linear equivalence α ≃ₗ[R] β
where the R
-module structure on α
is
the one obtained by transporting an R
-module structure on β
back along e
.
Equations
Instances For
@[reducible, inline]
abbrev
AddEquiv.module
{α : Type u_2}
{β : Type u_3}
(A : Type u_4)
[Semiring A]
[AddCommMonoid α]
[AddCommMonoid β]
[Module A β]
(e : α ≃+ β)
:
Module A α
Transport a module instance via an isomorphism of the underlying abelian groups.
This has better definitional properties than Equiv.module
since here
the abelian group structure remains unmodified.
Equations
- AddEquiv.module A e = { toSMul := Equiv.smul A e.toEquiv, one_smul := ⋯, mul_smul := ⋯, smul_zero := ⋯, smul_add := ⋯, add_smul := ⋯, zero_smul := ⋯ }
Instances For
theorem
LinearEquiv.isScalarTower
{R : Type u_1}
{α : Type u_2}
{β : Type u_3}
[Semiring R]
(A : Type u_4)
[Semiring A]
[Module R A]
[AddCommMonoid α]
[AddCommMonoid β]
[Module A β]
[Module R α]
[Module R β]
[IsScalarTower R A β]
(e : α ≃ₗ[R] β)
:
IsScalarTower R A α
The module instance from AddEquiv.module
is compatible with the R
-module structures,
if the AddEquiv
is induced by an R
-module isomorphism.