/-
Copyright (c) 2020 Eric Wieser. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Eric Wieser
! This file was ported from Lean 3 source module algebra.module.opposites
! leanprover-community/mathlib commit f7fc89d5d5ff1db2d1242c7bb0e9062ce47ef47c
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
import Mathlib.Algebra.Module.Equiv
import Mathlib.GroupTheory.GroupAction.Opposite
/-!
# Module operations on `Mα΅α΅α΅`
This file contains definitions that build on top of the group action definitions in
`GroupRheory.GroupAction.Opposite`.
-/
namespace MulOpposite
universe u v
variable (R: Type u
R : Type u: Type (u+1)
Type u) {M: Type v
M : Type v: Type (v+1)
Type v} [Semiring R: Type u
R] [AddCommMonoid M: Type v
M] [Module: (R : Type ?u.13) β (M : Type ?u.12) β [inst : Semiring R] β [inst : AddCommMonoid M] β Type (max?u.13?u.12)
Module R: Type u
R M: Type v
M]
/-- `MulOpposite.distribMulAction` extends to a `Module` -/
instance module : Module: (R : Type ?u.75) β (M : Type ?u.74) β [inst : Semiring R] β [inst : AddCommMonoid M] β Type (max?u.75?u.74)
Module R: Type u
R (MulOpposite M: Type v
M) :=
{ MulOpposite.distribMulAction: (Ξ± : Type ?u.116) β
(R : Type ?u.115) β
[inst : Monoid R] β [inst_1 : AddMonoid Ξ±] β [inst_2 : DistribMulAction R Ξ±] β DistribMulAction R Ξ±α΅α΅α΅
MulOpposite.distribMulAction M: Type v
M R: Type u
R with
add_smul := fun rβ: ?m.1041
rβ rβ: ?m.1044
rβ x: ?m.1047
x => unop_injective: β {Ξ± : Type ?u.1049}, Function.Injective unop
unop_injective <| add_smul rβ: ?m.1041
rβ rβ: ?m.1044
rβ (unop x: ?m.1047
x)
zero_smul := fun x: ?m.1087
x => unop_injective: β {Ξ± : Type ?u.1089}, Function.Injective unop
unop_injective <| zero_smul _: Type ?u.1095
_ (unop x: ?m.1087
x) }
/-- The function `op` is a linear equivalence. -/
def opLinearEquiv : M: Type v
M ββ[R: Type u
R] M: Type v
Mα΅α΅α΅ :=
{ opAddEquiv with map_smul' := MulOpposite.op_smul }
#align mul_opposite.op_linear_equiv MulOpposite.opLinearEquiv
@[simp]
theorem coe_opLinearEquiv: β (R : Type u) {M : Type v} [inst : Semiring R] [inst_1 : AddCommMonoid M] [inst_2 : Module R M],
β(opLinearEquiv R) = op
coe_opLinearEquiv : (opLinearEquiv R: Type u
R : M: Type v
M β M: Type v
Mα΅α΅α΅) = op :=
rfl
#align mul_opposite.coe_op_linear_equiv MulOpposite.coe_opLinearEquiv: β (R : Type u) {M : Type v} [inst : Semiring R] [inst_1 : AddCommMonoid M] [inst_2 : Module R M],
β(opLinearEquiv R) = op
MulOpposite.coe_opLinearEquiv
@[simp]
theorem coe_opLinearEquiv_symm: β (R : Type u) {M : Type v} [inst : Semiring R] [inst_1 : AddCommMonoid M] [inst_2 : Module R M],
β(LinearEquiv.symm (opLinearEquiv R)) = unop
coe_opLinearEquiv_symm : ((opLinearEquiv R: Type u
R).symm: {R : Type ?u.5771} β
{S : Type ?u.5770} β
{M : Type ?u.5769} β
{Mβ : Type ?u.5768} β
[inst : Semiring R] β
[inst_1 : Semiring S] β
[inst_2 : AddCommMonoid M] β
[inst_3 : AddCommMonoid Mβ] β
{module_M : Module R M} β
{module_S_Mβ : Module S Mβ} β
{Ο : R β+* S} β
{Ο' : S β+* R} β
{reβ : RingHomInvPair Ο Ο'} β {reβ : RingHomInvPair Ο' Ο} β (M βββ[Ο] Mβ) β Mβ βββ[Ο'] M
symm : M: Type v
Mα΅α΅α΅ β M: Type v
M) = unop :=
rfl
#align mul_opposite.coe_op_linear_equiv_symm MulOpposite.coe_opLinearEquiv_symm: β (R : Type u) {M : Type v} [inst : Semiring R] [inst_1 : AddCommMonoid M] [inst_2 : Module R M],
β(LinearEquiv.symm (opLinearEquiv R)) = unop
MulOpposite.coe_opLinearEquiv_symm
@[simp]
theorem coe_opLinearEquiv_toLinearMap: β (R : Type u) {M : Type v} [inst : Semiring R] [inst_1 : AddCommMonoid M] [inst_2 : Module R M],
ββ(opLinearEquiv R) = op
coe_opLinearEquiv_toLinearMap : ((opLinearEquiv R: Type u
R).toLinearMap: {R : Type ?u.7402} β
{S : Type ?u.7401} β
[inst : Semiring R] β
[inst_1 : Semiring S] β
{Ο : R β+* S} β
{Ο' : S β+* R} β
[inst_2 : RingHomInvPair Ο Ο'] β
[inst_3 : RingHomInvPair Ο' Ο] β
{M : Type ?u.7400} β
{Mβ : Type ?u.7399} β
[inst_4 : AddCommMonoid M] β
[inst_5 : AddCommMonoid Mβ] β
[inst_6 : Module R M] β [inst_7 : Module S Mβ] β (M βββ[Ο] Mβ) β M βββ[Ο] Mβ
toLinearMap : M: Type v
M β M: Type v
Mα΅α΅α΅) = op :=
rfl
#align mul_opposite.coe_op_linear_equiv_to_linear_map MulOpposite.coe_opLinearEquiv_toLinearMap: β (R : Type u) {M : Type v} [inst : Semiring R] [inst_1 : AddCommMonoid M] [inst_2 : Module R M],
ββ(opLinearEquiv R) = op
MulOpposite.coe_opLinearEquiv_toLinearMap
@[simp]
theorem coe_opLinearEquiv_symm_toLinearMap: β (R : Type u) {M : Type v} [inst : Semiring R] [inst_1 : AddCommMonoid M] [inst_2 : Module R M],
ββ(LinearEquiv.symm (opLinearEquiv R)) = unop
coe_opLinearEquiv_symm_toLinearMap :
((opLinearEquiv R: Type u
R).symm: {R : Type ?u.8113} β
{S : Type ?u.8112} β
{M : Type ?u.8111} β
{Mβ : Type ?u.8110} β
[inst : Semiring R] β
[inst_1 : Semiring S] β
[inst_2 : AddCommMonoid M] β
[inst_3 : AddCommMonoid Mβ] β
{module_M : Module R M} β
{module_S_Mβ : Module S Mβ} β
{Ο : R β+* S} β
{Ο' : S β+* R} β
{reβ : RingHomInvPair Ο Ο'} β {reβ : RingHomInvPair Ο' Ο} β (M βββ[Ο] Mβ) β Mβ βββ[Ο'] M
symm.toLinearMap: {R : Type ?u.8229} β
{S : Type ?u.8228} β
[inst : Semiring R] β
[inst_1 : Semiring S] β
{Ο : R β+* S} β
{Ο' : S β+* R} β
[inst_2 : RingHomInvPair Ο Ο'] β
[inst_3 : RingHomInvPair Ο' Ο] β
{M : Type ?u.8227} β
{Mβ : Type ?u.8226} β
[inst_4 : AddCommMonoid M] β
[inst_5 : AddCommMonoid Mβ] β
[inst_6 : Module R M] β [inst_7 : Module S Mβ] β (M βββ[Ο] Mβ) β M βββ[Ο] Mβ
toLinearMap : M: Type v
Mα΅α΅α΅ β M: Type v
M) = unop :=
rfl
#align mul_opposite.coe_op_linear_equiv_symm_to_linear_map MulOpposite.coe_opLinearEquiv_symm_toLinearMap: β (R : Type u) {M : Type v} [inst : Semiring R] [inst_1 : AddCommMonoid M] [inst_2 : Module R M],
ββ(LinearEquiv.symm (opLinearEquiv R)) = unop
MulOpposite.coe_opLinearEquiv_symm_toLinearMap
-- Porting note: LHS simplifies; added new simp lemma below @[simp]
theorem opLinearEquiv_toAddEquiv: β (R : Type u) {M : Type v} [inst : Semiring R] [inst_1 : AddCommMonoid M] [inst_2 : Module R M],
LinearEquiv.toAddEquiv (opLinearEquiv R) = opAddEquiv
opLinearEquiv_toAddEquiv : (opLinearEquiv R: Type u
R : M: Type v
M ββ[R: Type u
R] M: Type v
Mα΅α΅α΅).toAddEquiv: {R : Type ?u.9125} β
{S : Type ?u.9124} β
[inst : Semiring R] β
[inst_1 : Semiring S] β
{Ο : R β+* S} β
{Ο' : S β+* R} β
[inst_2 : RingHomInvPair Ο Ο'] β
[inst_3 : RingHomInvPair Ο' Ο] β
{M : Type ?u.9123} β
{Mβ : Type ?u.9122} β
[inst_4 : AddCommMonoid M] β
[inst_5 : AddCommMonoid Mβ] β
[inst_6 : Module R M] β [inst_7 : Module S Mβ] β (M βββ[Ο] Mβ) β M β+ Mβ
toAddEquiv = opAddEquiv :=
rfl
#align mul_opposite.op_linear_equiv_to_add_equiv MulOpposite.opLinearEquiv_toAddEquiv: β (R : Type u) {M : Type v} [inst : Semiring R] [inst_1 : AddCommMonoid M] [inst_2 : Module R M],
LinearEquiv.toAddEquiv (opLinearEquiv R) = opAddEquiv
MulOpposite.opLinearEquiv_toAddEquiv
@[simp]
theorem coe_opLinearEquiv_addEquiv: β (R : Type u) {M : Type v} [inst : Semiring R] [inst_1 : AddCommMonoid M] [inst_2 : Module R M],
β(opLinearEquiv R) = opAddEquiv
coe_opLinearEquiv_addEquiv : ((opLinearEquiv R: Type u
R : M: Type v
M ββ[R: Type u
R] M: Type v
Mα΅α΅α΅) : M: Type v
M β+ M: Type v
Mα΅α΅α΅) = opAddEquiv :=
rfl
-- Porting note: LHS simplifies; added new simp lemma below @[simp]
theorem opLinearEquiv_symm_toAddEquiv: LinearEquiv.toAddEquiv (LinearEquiv.symm (opLinearEquiv R)) = AddEquiv.symm opAddEquiv
opLinearEquiv_symm_toAddEquiv :
(opLinearEquiv R: Type u
R : M: Type v
M ββ[R: Type u
R] M: Type v
Mα΅α΅α΅).symm: {R : Type ?u.11509} β
{S : Type ?u.11508} β
{M : Type ?u.11507} β
{Mβ : Type ?u.11506} β
[inst : Semiring R] β
[inst_1 : Semiring S] β
[inst_2 : AddCommMonoid M] β
[inst_3 : AddCommMonoid Mβ] β
{module_M : Module R M} β
{module_S_Mβ : Module S Mβ} β
{Ο : R β+* S} β
{Ο' : S β+* R} β
{reβ : RingHomInvPair Ο Ο'} β {reβ : RingHomInvPair Ο' Ο} β (M βββ[Ο] Mβ) β Mβ βββ[Ο'] M
symm.toAddEquiv: {R : Type ?u.11527} β
{S : Type ?u.11526} β
[inst : Semiring R] β
[inst_1 : Semiring S] β
{Ο : R β+* S} β
{Ο' : S β+* R} β
[inst_2 : RingHomInvPair Ο Ο'] β
[inst_3 : RingHomInvPair Ο' Ο] β
{M : Type ?u.11525} β
{Mβ : Type ?u.11524} β
[inst_4 : AddCommMonoid M] β
[inst_5 : AddCommMonoid Mβ] β
[inst_6 : Module R M] β [inst_7 : Module S Mβ] β (M βββ[Ο] Mβ) β M β+ Mβ
toAddEquiv = opAddEquiv.symm :=
rfl
#align mul_opposite.op_linear_equiv_symm_to_add_equiv MulOpposite.opLinearEquiv_symm_toAddEquiv: β (R : Type u) {M : Type v} [inst : Semiring R] [inst_1 : AddCommMonoid M] [inst_2 : Module R M],
LinearEquiv.toAddEquiv (LinearEquiv.symm (opLinearEquiv R)) = AddEquiv.symm opAddEquiv
MulOpposite.opLinearEquiv_symm_toAddEquiv
@[simp]
theorem coe_opLinearEquiv_symm_addEquiv: β(LinearEquiv.symm (opLinearEquiv R)) = AddEquiv.symm opAddEquiv
coe_opLinearEquiv_symm_addEquiv :
((opLinearEquiv R: Type u
R : M: Type v
M ββ[R: Type u
R] M: Type v
Mα΅α΅α΅).symm: {R : Type ?u.13731} β
{S : Type ?u.13730} β
{M : Type ?u.13729} β
{Mβ : Type ?u.13728} β
[inst : Semiring R] β
[inst_1 : Semiring S] β
[inst_2 : AddCommMonoid M] β
[inst_3 : AddCommMonoid Mβ] β
{module_M : Module R M} β
{module_S_Mβ : Module S Mβ} β
{Ο : R β+* S} β
{Ο' : S β+* R} β
{reβ : RingHomInvPair Ο Ο'} β {reβ : RingHomInvPair Ο' Ο} β (M βββ[Ο] Mβ) β Mβ βββ[Ο'] M
symm : M: Type v
Mα΅α΅α΅ β+ M: Type v
M) = opAddEquiv.symm :=
rfl
end MulOpposite