Built with
doc-gen4 , running Lean4.
Bubbles (
) indicate interactive fragments: hover for details, tap to reveal contents.
Use
Ctrl+β Ctrl+β to navigate,
Ctrl+π±οΈ to focus.
On Mac, use
Cmd instead of
Ctrl .
/-
Copyright (c) 2018 Johannes HΓΆlzl. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Johannes HΓΆlzl, Callum Sutton, Yury Kudryashov
Ported by: FrΓ©dΓ©ric Dupuis
! This file was ported from Lean 3 source module algebra.hom.equiv.type_tags
! leanprover-community/mathlib commit 3342d1b2178381196f818146ff79bc0e7ccd9e2d
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
import Mathlib.Algebra.Hom.Equiv.Basic
import Mathlib.Algebra.Group.TypeTags
/-!
# Additive and multiplicative equivalences associated to `Multiplicative` and `Additive`.
-/
variable { G H : Type _ }
/-- Reinterpret `G β+ H` as `Multiplicative G β* Multiplicative H`. -/
def AddEquiv.toMultiplicative [ AddZeroClass G ] [ AddZeroClass H ] :
G β+ H β ( Multiplicative : Type ?u.50 β Type ?u.50 Multiplicative G β* Multiplicative : Type ?u.51 β Type ?u.51 Multiplicative H ) where
toFun f :=
β¨β¨ AddMonoidHom.toMultiplicative f . toAddMonoidHom ,
AddMonoidHom.toMultiplicative f . symm : {M : Type ?u.612} β {N : Type ?u.611} β [inst : Add M ] β [inst_1 : Add N ] β M β+ N β N β+ M symm. toAddMonoidHom , f . 1 : {A : Type ?u.897} β {B : Type ?u.896} β [inst : Add A ] β [inst_1 : Add B ] β A β+ B β A β B 1. 3 , f . 1 : {A : Type ?u.922} β {B : Type ?u.921} β [inst : Add A ] β [inst_1 : Add B ] β A β+ B β A β B 1. 4 β©, f . 2 β©
invFun f := β¨β¨ f . toMonoidHom , f . symm : {M : Type ?u.1281} β {N : Type ?u.1280} β [inst : Mul M ] β [inst_1 : Mul N ] β M β* N β N β* M symm. toMonoidHom , f . 1 : {M : Type ?u.1511} β {N : Type ?u.1510} β [inst : Mul M ] β [inst_1 : Mul N ] β M β* N β M β N 1. 3 , f . 1 : {M : Type ?u.1522} β {N : Type ?u.1521} β [inst : Mul M ] β [inst_1 : Mul N ] β M β* N β M β N 1. 4 β©, f . 2 β©
left_inv x := by (fun f =>
{
toEquiv :=
{ toFun := β(MulEquiv.toMonoidHom f ) , invFun := β(MulEquiv.toMonoidHom (MulEquiv.symm f ) ) ,
left_inv := (_ : Function.LeftInverse f .invFun f .toFun ) ,
right_inv := (_ : Function.RightInverse f .invFun f .toFun ) } ,
map_add' :=
(_ :
β (x y : Multiplicative G ),
Equiv.toFun f .toEquiv (x * y ) = Equiv.toFun f .toEquiv x * Equiv.toFun f .toEquiv y ) } )
((fun f =>
{
toEquiv :=
{ toFun := β(βAddMonoidHom.toMultiplicative (toAddMonoidHom f ) ) ,
invFun := β(βAddMonoidHom.toMultiplicative (toAddMonoidHom (symm f ) ) ) ,
left_inv := (_ : Function.LeftInverse f .invFun f .toFun ) ,
right_inv := (_ : Function.RightInverse f .invFun f .toFun ) } ,
map_mul' :=
(_ : β (x y : G ), Equiv.toFun f .toEquiv (x + y ) = Equiv.toFun f .toEquiv x + Equiv.toFun f .toEquiv y ) } )
x ) = x ext h β((fun f =>
{
toEquiv :=
{ toFun := β(MulEquiv.toMonoidHom f ) , invFun := β(MulEquiv.toMonoidHom (MulEquiv.symm f ) ) ,
left_inv := (_ : Function.LeftInverse f .invFun f .toFun ) ,
right_inv := (_ : Function.RightInverse f .invFun f .toFun ) } ,
map_add' :=
(_ :
β (x y : Multiplicative G ),
Equiv.toFun f .toEquiv (x * y ) = Equiv.toFun f .toEquiv x * Equiv.toFun f .toEquiv y ) } )
((fun f =>
{
toEquiv :=
{ toFun := β(βAddMonoidHom.toMultiplicative (toAddMonoidHom f ) ) ,
invFun := β(βAddMonoidHom.toMultiplicative (toAddMonoidHom (symm f ) ) ) ,
left_inv := (_ : Function.LeftInverse f .invFun f .toFun ) ,
right_inv := (_ : Function.RightInverse f .invFun f .toFun ) } ,
map_mul' :=
(_ : β (x y : G ), Equiv.toFun f .toEquiv (x + y ) = Equiv.toFun f .toEquiv x + Equiv.toFun f .toEquiv y ) } )
x ) )
xβ = βx xβ ; h β((fun f =>
{
toEquiv :=
{ toFun := β(MulEquiv.toMonoidHom f ) , invFun := β(MulEquiv.toMonoidHom (MulEquiv.symm f ) ) ,
left_inv := (_ : Function.LeftInverse f .invFun f .toFun ) ,
right_inv := (_ : Function.RightInverse f .invFun f .toFun ) } ,
map_add' :=
(_ :
β (x y : Multiplicative G ),
Equiv.toFun f .toEquiv (x * y ) = Equiv.toFun f .toEquiv x * Equiv.toFun f .toEquiv y ) } )
((fun f =>
{
toEquiv :=
{ toFun := β(βAddMonoidHom.toMultiplicative (toAddMonoidHom f ) ) ,
invFun := β(βAddMonoidHom.toMultiplicative (toAddMonoidHom (symm f ) ) ) ,
left_inv := (_ : Function.LeftInverse f .invFun f .toFun ) ,
right_inv := (_ : Function.RightInverse f .invFun f .toFun ) } ,
map_mul' :=
(_ : β (x y : G ), Equiv.toFun f .toEquiv (x + y ) = Equiv.toFun f .toEquiv x + Equiv.toFun f .toEquiv y ) } )
x ) )
xβ = βx xβ (fun f =>
{
toEquiv :=
{ toFun := β(MulEquiv.toMonoidHom f ) , invFun := β(MulEquiv.toMonoidHom (MulEquiv.symm f ) ) ,
left_inv := (_ : Function.LeftInverse f .invFun f .toFun ) ,
right_inv := (_ : Function.RightInverse f .invFun f .toFun ) } ,
map_add' :=
(_ :
β (x y : Multiplicative G ),
Equiv.toFun f .toEquiv (x * y ) = Equiv.toFun f .toEquiv x * Equiv.toFun f .toEquiv y ) } )
((fun f =>
{
toEquiv :=
{ toFun := β(βAddMonoidHom.toMultiplicative (toAddMonoidHom f ) ) ,
invFun := β(βAddMonoidHom.toMultiplicative (toAddMonoidHom (symm f ) ) ) ,
left_inv := (_ : Function.LeftInverse f .invFun f .toFun ) ,
right_inv := (_ : Function.RightInverse f .invFun f .toFun ) } ,
map_mul' :=
(_ : β (x y : G ), Equiv.toFun f .toEquiv (x + y ) = Equiv.toFun f .toEquiv x + Equiv.toFun f .toEquiv y ) } )
x ) = x rfl
right_inv x := by (fun f =>
{
toEquiv :=
{ toFun := β(βAddMonoidHom.toMultiplicative (toAddMonoidHom f ) ) ,
invFun := β(βAddMonoidHom.toMultiplicative (toAddMonoidHom (symm f ) ) ) ,
left_inv := (_ : Function.LeftInverse f .invFun f .toFun ) ,
right_inv := (_ : Function.RightInverse f .invFun f .toFun ) } ,
map_mul' :=
(_ : β (x y : G ), Equiv.toFun f .toEquiv (x + y ) = Equiv.toFun f .toEquiv x + Equiv.toFun f .toEquiv y ) } )
((fun f =>
{
toEquiv :=
{ toFun := β(MulEquiv.toMonoidHom f ) , invFun := β(MulEquiv.toMonoidHom (MulEquiv.symm f ) ) ,
left_inv := (_ : Function.LeftInverse f .invFun f .toFun ) ,
right_inv := (_ : Function.RightInverse f .invFun f .toFun ) } ,
map_add' :=
(_ :
β (x y : Multiplicative G ),
Equiv.toFun f .toEquiv (x * y ) = Equiv.toFun f .toEquiv x * Equiv.toFun f .toEquiv y ) } )
x ) = x ext h β((fun f =>
{
toEquiv :=
{ toFun := β(βAddMonoidHom.toMultiplicative (toAddMonoidHom f ) ) ,
invFun := β(βAddMonoidHom.toMultiplicative (toAddMonoidHom (symm f ) ) ) ,
left_inv := (_ : Function.LeftInverse f .invFun f .toFun ) ,
right_inv := (_ : Function.RightInverse f .invFun f .toFun ) } ,
map_mul' :=
(_ : β (x y : G ), Equiv.toFun f .toEquiv (x + y ) = Equiv.toFun f .toEquiv x + Equiv.toFun f .toEquiv y ) } )
((fun f =>
{
toEquiv :=
{ toFun := β(MulEquiv.toMonoidHom f ) , invFun := β(MulEquiv.toMonoidHom (MulEquiv.symm f ) ) ,
left_inv := (_ : Function.LeftInverse f .invFun f .toFun ) ,
right_inv := (_ : Function.RightInverse f .invFun f .toFun ) } ,
map_add' :=
(_ :
β (x y : Multiplicative G ),
Equiv.toFun f .toEquiv (x * y ) = Equiv.toFun f .toEquiv x * Equiv.toFun f .toEquiv y ) } )
x ) )
xβ = βx xβ ; h β((fun f =>
{
toEquiv :=
{ toFun := β(βAddMonoidHom.toMultiplicative (toAddMonoidHom f ) ) ,
invFun := β(βAddMonoidHom.toMultiplicative (toAddMonoidHom (symm f ) ) ) ,
left_inv := (_ : Function.LeftInverse f .invFun f .toFun ) ,
right_inv := (_ : Function.RightInverse f .invFun f .toFun ) } ,
map_mul' :=
(_ : β (x y : G ), Equiv.toFun f .toEquiv (x + y ) = Equiv.toFun f .toEquiv x + Equiv.toFun f .toEquiv y ) } )
((fun f =>
{
toEquiv :=
{ toFun := β(MulEquiv.toMonoidHom f ) , invFun := β(MulEquiv.toMonoidHom (MulEquiv.symm f ) ) ,
left_inv := (_ : Function.LeftInverse f .invFun f .toFun ) ,
right_inv := (_ : Function.RightInverse f .invFun f .toFun ) } ,
map_add' :=
(_ :
β (x y : Multiplicative G ),
Equiv.toFun f .toEquiv (x * y ) = Equiv.toFun f .toEquiv x * Equiv.toFun f .toEquiv y ) } )
x ) )
xβ = βx xβ (fun f =>
{
toEquiv :=
{ toFun := β(βAddMonoidHom.toMultiplicative (toAddMonoidHom f ) ) ,
invFun := β(βAddMonoidHom.toMultiplicative (toAddMonoidHom (symm f ) ) ) ,
left_inv := (_ : Function.LeftInverse f .invFun f .toFun ) ,
right_inv := (_ : Function.RightInverse f .invFun f .toFun ) } ,
map_mul' :=
(_ : β (x y : G ), Equiv.toFun f .toEquiv (x + y ) = Equiv.toFun f .toEquiv x + Equiv.toFun f .toEquiv y ) } )
((fun f =>
{
toEquiv :=
{ toFun := β(MulEquiv.toMonoidHom f ) , invFun := β(MulEquiv.toMonoidHom (MulEquiv.symm f ) ) ,
left_inv := (_ : Function.LeftInverse f .invFun f .toFun ) ,
right_inv := (_ : Function.RightInverse f .invFun f .toFun ) } ,
map_add' :=
(_ :
β (x y : Multiplicative G ),
Equiv.toFun f .toEquiv (x * y ) = Equiv.toFun f .toEquiv x * Equiv.toFun f .toEquiv y ) } )
x ) = x rfl
#align add_equiv.to_multiplicative AddEquiv.toMultiplicative
/-- Reinterpret `G β* H` as `Additive G β+ Additive H`. -/
def MulEquiv.toAdditive [ MulOneClass : Type ?u.1978 β Type ?u.1978 MulOneClass G ] [ MulOneClass : Type ?u.1981 β Type ?u.1981 MulOneClass H ] :
G β* H β ( Additive G β+ Additive H ) where
toFun f := β¨β¨ MonoidHom.toAdditive f . toMonoidHom ,
MonoidHom.toAdditive f . symm : {M : Type ?u.3003} β {N : Type ?u.3002} β [inst : Mul M ] β [inst_1 : Mul N ] β M β* N β N β* M symm. toMonoidHom , f . 1 : {M : Type ?u.3615} β {N : Type ?u.3614} β [inst : Mul M ] β [inst_1 : Mul N ] β M β* N β M β N 1. 3 , f . 1 : {M : Type ?u.3640} β {N : Type ?u.3639} β [inst : Mul M ] β [inst_1 : Mul N ] β M β* N β M β N 1. 4 β©, f . 2 β©
invFun f := β¨β¨ f . toAddMonoidHom , f . symm : {M : Type ?u.4322} β {N : Type ?u.4321} β [inst : Add M ] β [inst_1 : Add N ] β M β+ N β N β+ M symm. toAddMonoidHom , f . 1 : {A : Type ?u.4797} β {B : Type ?u.4796} β [inst : Add A ] β [inst_1 : Add B ] β A β+ B β A β B 1. 3 , f . 1 : {A : Type ?u.4808} β {B : Type ?u.4807} β [inst : Add A ] β [inst_1 : Add B ] β A β+ B β A β B 1. 4 β©, f . 2 β©
left_inv x := by (fun f =>
{
toEquiv :=
{ toFun := β(AddEquiv.toAddMonoidHom f ) , invFun := β(AddEquiv.toAddMonoidHom (AddEquiv.symm f ) ) ,
left_inv := (_ : Function.LeftInverse f .invFun f .toFun ) ,
right_inv := (_ : Function.RightInverse f .invFun f .toFun ) } ,
map_mul' :=
(_ :
β (x y : Additive G ), Equiv.toFun f .toEquiv (x + y ) = Equiv.toFun f .toEquiv x + Equiv.toFun f .toEquiv y ) } )
((fun f =>
{
toEquiv :=
{ toFun := β(βMonoidHom.toAdditive (toMonoidHom f ) ) ,
invFun := β(βMonoidHom.toAdditive (toMonoidHom (symm f ) ) ) ,
left_inv := (_ : Function.LeftInverse f .invFun f .toFun ) ,
right_inv := (_ : Function.RightInverse f .invFun f .toFun ) } ,
map_add' :=
(_ : β (x y : G ), Equiv.toFun f .toEquiv (x * y ) = Equiv.toFun f .toEquiv x * Equiv.toFun f .toEquiv y ) } )
x ) = x ext h β((fun f =>
{
toEquiv :=
{ toFun := β(AddEquiv.toAddMonoidHom f ) , invFun := β(AddEquiv.toAddMonoidHom (AddEquiv.symm f ) ) ,
left_inv := (_ : Function.LeftInverse f .invFun f .toFun ) ,
right_inv := (_ : Function.RightInverse f .invFun f .toFun ) } ,
map_mul' :=
(_ :
β (x y : Additive G ),
Equiv.toFun f .toEquiv (x + y ) = Equiv.toFun f .toEquiv x + Equiv.toFun f .toEquiv y ) } )
((fun f =>
{
toEquiv :=
{ toFun := β(βMonoidHom.toAdditive (toMonoidHom f ) ) ,
invFun := β(βMonoidHom.toAdditive (toMonoidHom (symm f ) ) ) ,
left_inv := (_ : Function.LeftInverse f .invFun f .toFun ) ,
right_inv := (_ : Function.RightInverse f .invFun f .toFun ) } ,
map_add' :=
(_ : β (x y : G ), Equiv.toFun f .toEquiv (x * y ) = Equiv.toFun f .toEquiv x * Equiv.toFun f .toEquiv y ) } )
x ) )
xβ = βx xβ ; h β((fun f =>
{
toEquiv :=
{ toFun := β(AddEquiv.toAddMonoidHom f ) , invFun := β(AddEquiv.toAddMonoidHom (AddEquiv.symm f ) ) ,
left_inv := (_ : Function.LeftInverse f .invFun f .toFun ) ,
right_inv := (_ : Function.RightInverse f .invFun f .toFun ) } ,
map_mul' :=
(_ :
β (x y : Additive G ),
Equiv.toFun f .toEquiv (x + y ) = Equiv.toFun f .toEquiv x + Equiv.toFun f .toEquiv y ) } )
((fun f =>
{
toEquiv :=
{ toFun := β(βMonoidHom.toAdditive (toMonoidHom f ) ) ,
invFun := β(βMonoidHom.toAdditive (toMonoidHom (symm f ) ) ) ,
left_inv := (_ : Function.LeftInverse f .invFun f .toFun ) ,
right_inv := (_ : Function.RightInverse f .invFun f .toFun ) } ,
map_add' :=
(_ : β (x y : G ), Equiv.toFun f .toEquiv (x * y ) = Equiv.toFun f .toEquiv x * Equiv.toFun f .toEquiv y ) } )
x ) )
xβ = βx xβ (fun f =>
{
toEquiv :=
{ toFun := β(AddEquiv.toAddMonoidHom f ) , invFun := β(AddEquiv.toAddMonoidHom (AddEquiv.symm f ) ) ,
left_inv := (_ : Function.LeftInverse f .invFun f .toFun ) ,
right_inv := (_ : Function.RightInverse f .invFun f .toFun ) } ,
map_mul' :=
(_ :
β (x y : Additive G ), Equiv.toFun f .toEquiv (x + y ) = Equiv.toFun f .toEquiv x + Equiv.toFun f .toEquiv y ) } )
((fun f =>
{
toEquiv :=
{ toFun := β(βMonoidHom.toAdditive (toMonoidHom f ) ) ,
invFun := β(βMonoidHom.toAdditive (toMonoidHom (symm f ) ) ) ,
left_inv := (_ : Function.LeftInverse f .invFun f .toFun ) ,
right_inv := (_ : Function.RightInverse f .invFun f .toFun ) } ,
map_add' :=
(_ : β (x y : G ), Equiv.toFun f .toEquiv (x * y ) = Equiv.toFun f .toEquiv x * Equiv.toFun f .toEquiv y ) } )
x ) = x rfl
right_inv x := by (fun f =>
{
toEquiv :=
{ toFun := β(βMonoidHom.toAdditive (toMonoidHom f ) ) ,
invFun := β(βMonoidHom.toAdditive (toMonoidHom (symm f ) ) ) ,
left_inv := (_ : Function.LeftInverse f .invFun f .toFun ) ,
right_inv := (_ : Function.RightInverse f .invFun f .toFun ) } ,
map_add' :=
(_ : β (x y : G ), Equiv.toFun f .toEquiv (x * y ) = Equiv.toFun f .toEquiv x * Equiv.toFun f .toEquiv y ) } )
((fun f =>
{
toEquiv :=
{ toFun := β(AddEquiv.toAddMonoidHom f ) , invFun := β(AddEquiv.toAddMonoidHom (AddEquiv.symm f ) ) ,
left_inv := (_ : Function.LeftInverse f .invFun f .toFun ) ,
right_inv := (_ : Function.RightInverse f .invFun f .toFun ) } ,
map_mul' :=
(_ :
β (x y : Additive G ),
Equiv.toFun f .toEquiv (x + y ) = Equiv.toFun f .toEquiv x + Equiv.toFun f .toEquiv y ) } )
x ) = x ext h β((fun f =>
{
toEquiv :=
{ toFun := β(βMonoidHom.toAdditive (toMonoidHom f ) ) ,
invFun := β(βMonoidHom.toAdditive (toMonoidHom (symm f ) ) ) ,
left_inv := (_ : Function.LeftInverse f .invFun f .toFun ) ,
right_inv := (_ : Function.RightInverse f .invFun f .toFun ) } ,
map_add' :=
(_ : β (x y : G ), Equiv.toFun f .toEquiv (x * y ) = Equiv.toFun f .toEquiv x * Equiv.toFun f .toEquiv y ) } )
((fun f =>
{
toEquiv :=
{ toFun := β(AddEquiv.toAddMonoidHom f ) , invFun := β(AddEquiv.toAddMonoidHom (AddEquiv.symm f ) ) ,
left_inv := (_ : Function.LeftInverse f .invFun f .toFun ) ,
right_inv := (_ : Function.RightInverse f .invFun f .toFun ) } ,
map_mul' :=
(_ :
β (x y : Additive G ),
Equiv.toFun f .toEquiv (x + y ) = Equiv.toFun f .toEquiv x + Equiv.toFun f .toEquiv y ) } )
x ) )
xβ = βx xβ ; h β((fun f =>
{
toEquiv :=
{ toFun := β(βMonoidHom.toAdditive (toMonoidHom f ) ) ,
invFun := β(βMonoidHom.toAdditive (toMonoidHom (symm f ) ) ) ,
left_inv := (_ : Function.LeftInverse f .invFun f .toFun ) ,
right_inv := (_ : Function.RightInverse f .invFun f .toFun ) } ,
map_add' :=
(_ : β (x y : G ), Equiv.toFun f .toEquiv (x * y ) = Equiv.toFun f .toEquiv x * Equiv.toFun f .toEquiv y ) } )
((fun f =>
{
toEquiv :=
{ toFun := β(AddEquiv.toAddMonoidHom f ) , invFun := β(AddEquiv.toAddMonoidHom (AddEquiv.symm f ) ) ,
left_inv := (_ : Function.LeftInverse f .invFun f .toFun ) ,
right_inv := (_ : Function.RightInverse f .invFun f .toFun ) } ,
map_mul' :=
(_ :
β (x y : Additive G ),
Equiv.toFun f .toEquiv (x + y ) = Equiv.toFun f .toEquiv x + Equiv.toFun f .toEquiv y ) } )
x ) )
xβ = βx xβ (fun f =>
{
toEquiv :=
{ toFun := β(βMonoidHom.toAdditive (toMonoidHom f ) ) ,
invFun := β(βMonoidHom.toAdditive (toMonoidHom (symm f ) ) ) ,
left_inv := (_ : Function.LeftInverse f .invFun f .toFun ) ,
right_inv := (_ : Function.RightInverse f .invFun f .toFun ) } ,
map_add' :=
(_ : β (x y : G ), Equiv.toFun f .toEquiv (x * y ) = Equiv.toFun f .toEquiv x * Equiv.toFun f .toEquiv y ) } )
((fun f =>
{
toEquiv :=
{ toFun := β(AddEquiv.toAddMonoidHom f ) , invFun := β(AddEquiv.toAddMonoidHom (AddEquiv.symm f ) ) ,
left_inv := (_ : Function.LeftInverse f .invFun f .toFun ) ,
right_inv := (_ : Function.RightInverse f .invFun f .toFun ) } ,
map_mul' :=
(_ :
β (x y : Additive G ),
Equiv.toFun f .toEquiv (x + y ) = Equiv.toFun f .toEquiv x + Equiv.toFun f .toEquiv y ) } )
x ) = x rfl
#align mul_equiv.to_additive MulEquiv.toAdditive
/-- Reinterpret `Additive G β+ H` as `G β* Multiplicative H`. -/
def AddEquiv.toMultiplicative' [ MulOneClass : Type ?u.5253 β Type ?u.5253 MulOneClass G ] [ AddZeroClass : Type ?u.5256 β Type ?u.5256 AddZeroClass H ] :
Additive G β+ H β ( G β* Multiplicative : Type ?u.5349 β Type ?u.5349 Multiplicative H ) where
toFun f :=
β¨β¨ AddMonoidHom.toMultiplicative' f . toAddMonoidHom ,
AddMonoidHom.toMultiplicative'' f . symm : {M : Type ?u.5959} β {N : Type ?u.5958} β [inst : Add M ] β [inst_1 : Add N ] β M β+ N β N β+ M symm. toAddMonoidHom , f . 1 : {A : Type ?u.6287} β {B : Type ?u.6286} β [inst : Add A ] β [inst_1 : Add B ] β A β+ B β A β B 1. 3 , f . 1 : {A : Type ?u.6312} β {B : Type ?u.6311} β [inst : Add A ] β [inst_1 : Add B ] β A β+ B β A β B 1. 4 β©, f . 2 β©
invFun f := β¨β¨ f . toMonoidHom , f . symm : {M : Type ?u.6681} β {N : Type ?u.6680} β [inst : Mul M ] β [inst_1 : Mul N ] β M β* N β N β* M symm. toMonoidHom , f . 1 : {M : Type ?u.6901} β {N : Type ?u.6900} β [inst : Mul M ] β [inst_1 : Mul N ] β M β* N β M β N 1. 3 , f . 1 : {M : Type ?u.6912} β {N : Type ?u.6911} β [inst : Mul M ] β [inst_1 : Mul N ] β M β* N β M β N 1. 4 β©, f . 2 β©
left_inv x := by (fun f =>
{
toEquiv :=
{ toFun := β(MulEquiv.toMonoidHom f ) , invFun := β(MulEquiv.toMonoidHom (MulEquiv.symm f ) ) ,
left_inv := (_ : Function.LeftInverse f .invFun f .toFun ) ,
right_inv := (_ : Function.RightInverse f .invFun f .toFun ) } ,
map_add' :=
(_ : β (x y : G ), Equiv.toFun f .toEquiv (x * y ) = Equiv.toFun f .toEquiv x * Equiv.toFun f .toEquiv y ) } )
((fun f =>
{
toEquiv :=
{ toFun := β(βAddMonoidHom.toMultiplicative' (toAddMonoidHom f ) ) ,
invFun := β(βAddMonoidHom.toMultiplicative'' (toAddMonoidHom (symm f ) ) ) ,
left_inv := (_ : Function.LeftInverse f .invFun f .toFun ) ,
right_inv := (_ : Function.RightInverse f .invFun f .toFun ) } ,
map_mul' :=
(_ :
β (x y : Additive G ),
Equiv.toFun f .toEquiv (x + y ) = Equiv.toFun f .toEquiv x + Equiv.toFun f .toEquiv y ) } )
x ) = x ext h β((fun f =>
{
toEquiv :=
{ toFun := β(MulEquiv.toMonoidHom f ) , invFun := β(MulEquiv.toMonoidHom (MulEquiv.symm f ) ) ,
left_inv := (_ : Function.LeftInverse f .invFun f .toFun ) ,
right_inv := (_ : Function.RightInverse f .invFun f .toFun ) } ,
map_add' :=
(_ : β (x y : G ), Equiv.toFun f .toEquiv (x * y ) = Equiv.toFun f .toEquiv x * Equiv.toFun f .toEquiv y ) } )
((fun f =>
{
toEquiv :=
{ toFun := β(βAddMonoidHom.toMultiplicative' (toAddMonoidHom f ) ) ,
invFun := β(βAddMonoidHom.toMultiplicative'' (toAddMonoidHom (symm f ) ) ) ,
left_inv := (_ : Function.LeftInverse f .invFun f .toFun ) ,
right_inv := (_ : Function.RightInverse f .invFun f .toFun ) } ,
map_mul' :=
(_ :
β (x y : Additive G ),
Equiv.toFun f .toEquiv (x + y ) = Equiv.toFun f .toEquiv x + Equiv.toFun f .toEquiv y ) } )
x ) )
xβ = βx xβ ; h β((fun f =>
{
toEquiv :=
{ toFun := β(MulEquiv.toMonoidHom f ) , invFun := β(MulEquiv.toMonoidHom (MulEquiv.symm f ) ) ,
left_inv := (_ : Function.LeftInverse f .invFun f .toFun ) ,
right_inv := (_ : Function.RightInverse f .invFun f .toFun ) } ,
map_add' :=
(_ : β (x y : G ), Equiv.toFun f .toEquiv (x * y ) = Equiv.toFun f .toEquiv x * Equiv.toFun f .toEquiv y ) } )
((fun f =>
{
toEquiv :=
{ toFun := β(βAddMonoidHom.toMultiplicative' (toAddMonoidHom f ) ) ,
invFun := β(βAddMonoidHom.toMultiplicative'' (toAddMonoidHom (symm f ) ) ) ,
left_inv := (_ : Function.LeftInverse f .invFun f .toFun ) ,
right_inv := (_ : Function.RightInverse f .invFun f .toFun ) } ,
map_mul' :=
(_ :
β (x y : Additive G ),
Equiv.toFun f .toEquiv (x + y ) = Equiv.toFun f .toEquiv x + Equiv.toFun f .toEquiv y ) } )
x ) )
xβ = βx xβ (fun f =>
{
toEquiv :=
{ toFun := β(MulEquiv.toMonoidHom f ) , invFun := β(MulEquiv.toMonoidHom (MulEquiv.symm f ) ) ,
left_inv := (_ : Function.LeftInverse f .invFun f .toFun ) ,
right_inv := (_ : Function.RightInverse f .invFun f .toFun ) } ,
map_add' :=
(_ : β (x y : G ), Equiv.toFun f .toEquiv (x * y ) = Equiv.toFun f .toEquiv x * Equiv.toFun f .toEquiv y ) } )
((fun f =>
{
toEquiv :=
{ toFun := β(βAddMonoidHom.toMultiplicative' (toAddMonoidHom f ) ) ,
invFun := β(βAddMonoidHom.toMultiplicative'' (toAddMonoidHom (symm f ) ) ) ,
left_inv := (_ : Function.LeftInverse f .invFun f .toFun ) ,
right_inv := (_ : Function.RightInverse f .invFun f .toFun ) } ,
map_mul' :=
(_ :
β (x y : Additive G ),
Equiv.toFun f .toEquiv (x + y ) = Equiv.toFun f .toEquiv x + Equiv.toFun f .toEquiv y ) } )
x ) = x rfl
right_inv x := by (fun f =>
{
toEquiv :=
{ toFun := β(βAddMonoidHom.toMultiplicative' (toAddMonoidHom f ) ) ,
invFun := β(βAddMonoidHom.toMultiplicative'' (toAddMonoidHom (symm f ) ) ) ,
left_inv := (_ : Function.LeftInverse f .invFun f .toFun ) ,
right_inv := (_ : Function.RightInverse f .invFun f .toFun ) } ,
map_mul' :=
(_ :
β (x y : Additive G ), Equiv.toFun f .toEquiv (x + y ) = Equiv.toFun f .toEquiv x + Equiv.toFun f .toEquiv y ) } )
((fun f =>
{
toEquiv :=
{ toFun := β(MulEquiv.toMonoidHom f ) , invFun := β(MulEquiv.toMonoidHom (MulEquiv.symm f ) ) ,
left_inv := (_ : Function.LeftInverse f .invFun f .toFun ) ,
right_inv := (_ : Function.RightInverse f .invFun f .toFun ) } ,
map_add' :=
(_ : β (x y : G ), Equiv.toFun f .toEquiv (x * y ) = Equiv.toFun f .toEquiv x * Equiv.toFun f .toEquiv y ) } )
x ) = x ext h β((fun f =>
{
toEquiv :=
{ toFun := β(βAddMonoidHom.toMultiplicative' (toAddMonoidHom f ) ) ,
invFun := β(βAddMonoidHom.toMultiplicative'' (toAddMonoidHom (symm f ) ) ) ,
left_inv := (_ : Function.LeftInverse f .invFun f .toFun ) ,
right_inv := (_ : Function.RightInverse f .invFun f .toFun ) } ,
map_mul' :=
(_ :
β (x y : Additive G ),
Equiv.toFun f .toEquiv (x + y ) = Equiv.toFun f .toEquiv x + Equiv.toFun f .toEquiv y ) } )
((fun f =>
{
toEquiv :=
{ toFun := β(MulEquiv.toMonoidHom f ) , invFun := β(MulEquiv.toMonoidHom (MulEquiv.symm f ) ) ,
left_inv := (_ : Function.LeftInverse f .invFun f .toFun ) ,
right_inv := (_ : Function.RightInverse f .invFun f .toFun ) } ,
map_add' :=
(_ : β (x y : G ), Equiv.toFun f .toEquiv (x * y ) = Equiv.toFun f .toEquiv x * Equiv.toFun f .toEquiv y ) } )
x ) )
xβ = βx xβ ; h β((fun f =>
{
toEquiv :=
{ toFun := β(βAddMonoidHom.toMultiplicative' (toAddMonoidHom f ) ) ,
invFun := β(βAddMonoidHom.toMultiplicative'' (toAddMonoidHom (symm f ) ) ) ,
left_inv := (_ : Function.LeftInverse f .invFun f .toFun ) ,
right_inv := (_ : Function.RightInverse f .invFun f .toFun ) } ,
map_mul' :=
(_ :
β (x y : Additive G ),
Equiv.toFun f .toEquiv (x + y ) = Equiv.toFun f .toEquiv x + Equiv.toFun f .toEquiv y ) } )
((fun f =>
{
toEquiv :=
{ toFun := β(MulEquiv.toMonoidHom f ) , invFun := β(MulEquiv.toMonoidHom (MulEquiv.symm f ) ) ,
left_inv := (_ : Function.LeftInverse f .invFun f .toFun ) ,
right_inv := (_ : Function.RightInverse f .invFun f .toFun ) } ,
map_add' :=
(_ : β (x y : G ), Equiv.toFun f .toEquiv (x * y ) = Equiv.toFun f .toEquiv x * Equiv.toFun f .toEquiv y ) } )
x ) )
xβ = βx xβ (fun f =>
{
toEquiv :=
{ toFun := β(βAddMonoidHom.toMultiplicative' (toAddMonoidHom f ) ) ,
invFun := β(βAddMonoidHom.toMultiplicative'' (toAddMonoidHom (symm f ) ) ) ,
left_inv := (_ : Function.LeftInverse f .invFun f .toFun ) ,
right_inv := (_ : Function.RightInverse f .invFun f .toFun ) } ,
map_mul' :=
(_ :
β (x y : Additive G ), Equiv.toFun f .toEquiv (x + y ) = Equiv.toFun f .toEquiv x + Equiv.toFun f .toEquiv y ) } )
((fun f =>
{
toEquiv :=
{ toFun := β(MulEquiv.toMonoidHom f ) , invFun := β(MulEquiv.toMonoidHom (MulEquiv.symm f ) ) ,
left_inv := (_ : Function.LeftInverse f .invFun f .toFun ) ,
right_inv := (_ : Function.RightInverse f .invFun f .toFun ) } ,
map_add' :=
(_ : β (x y : G ), Equiv.toFun f .toEquiv (x * y ) = Equiv.toFun f .toEquiv x * Equiv.toFun f .toEquiv y ) } )
x ) = x rfl
#align add_equiv.to_multiplicative' AddEquiv.toMultiplicative'
/-- Reinterpret `G β* Multiplicative H` as `Additive G β+ H` as. -/
def MulEquiv.toAdditive' [ MulOneClass : Type ?u.7293 β Type ?u.7293 MulOneClass G ] [ AddZeroClass : Type ?u.7296 β Type ?u.7296 AddZeroClass H ] :
G β* Multiplicative : Type ?u.7303 β Type ?u.7303 Multiplicative H β ( Additive G β+ H ) :=
AddEquiv.toMultiplicative' . symm : {Ξ± : Sort ?u.7469} β {Ξ² : Sort ?u.7468} β Ξ± β Ξ² β Ξ² β Ξ± symm
#align mul_equiv.to_additive' MulEquiv.toAdditive'
/-- Reinterpret `G β+ Additive H` as `Multiplicative G β* H`. -/
def AddEquiv.toMultiplicative'' [ AddZeroClass : Type ?u.7537 β Type ?u.7537 AddZeroClass G ] [ MulOneClass : Type ?u.7540 β Type ?u.7540 MulOneClass H ] :
G β+ Additive H β ( Multiplicative : Type ?u.7633 β Type ?u.7633 Multiplicative G β* H ) where
toFun f :=
β¨β¨ AddMonoidHom.toMultiplicative'' f . toAddMonoidHom ,
AddMonoidHom.toMultiplicative' f . symm : {M : Type ?u.8243} β {N : Type ?u.8242} β [inst : Add M ] β [inst_1 : Add N ] β M β+ N β N β+ M symm. toAddMonoidHom , f . 1 : {A : Type ?u.8571} β {B : Type ?u.8570} β [inst : Add A ] β [inst_1 : Add B ] β A β+ B β A β B 1. 3 , f . 1 : {A : Type ?u.8596} β {B : Type ?u.8595} β [inst : Add A ] β [inst_1 : Add B ] β A β+ B β A β B 1. 4 β©, f . 2 β©
invFun f := β¨β¨ f . toMonoidHom , f . symm : {M : Type ?u.8965} β {N : Type ?u.8964} β [inst : Mul M ] β [inst_1 : Mul N ] β M β* N β N β* M symm. toMonoidHom , f . 1 : {M : Type ?u.9185} β {N : Type ?u.9184} β [inst : Mul M ] β [inst_1 : Mul N ] β M β* N β M β N 1. 3 , f . 1 : {M : Type ?u.9196} β {N : Type ?u.9195} β [inst : Mul M ] β [inst_1 : Mul N ] β M β* N β M β N 1. 4 β©, f . 2 β©
left_inv x := by (fun f =>
{
toEquiv :=
{ toFun := β(MulEquiv.toMonoidHom f ) , invFun := β(MulEquiv.toMonoidHom (MulEquiv.symm f ) ) ,
left_inv := (_ : Function.LeftInverse f .invFun f .toFun ) ,
right_inv := (_ : Function.RightInverse f .invFun f .toFun ) } ,
map_add' :=
(_ :
β (x y : Multiplicative G ),
Equiv.toFun f .toEquiv (x * y ) = Equiv.toFun f .toEquiv x * Equiv.toFun f .toEquiv y ) } )
((fun f =>
{
toEquiv :=
{ toFun := β(βAddMonoidHom.toMultiplicative'' (toAddMonoidHom f ) ) ,
invFun := β(βAddMonoidHom.toMultiplicative' (toAddMonoidHom (symm f ) ) ) ,
left_inv := (_ : Function.LeftInverse f .invFun f .toFun ) ,
right_inv := (_ : Function.RightInverse f .invFun f .toFun ) } ,
map_mul' :=
(_ : β (x y : G ), Equiv.toFun f .toEquiv (x + y ) = Equiv.toFun f .toEquiv x + Equiv.toFun f .toEquiv y ) } )
x ) = x ext h β((fun f =>
{
toEquiv :=
{ toFun := β(MulEquiv.toMonoidHom f ) , invFun := β(MulEquiv.toMonoidHom (MulEquiv.symm f ) ) ,
left_inv := (_ : Function.LeftInverse f .invFun f .toFun ) ,
right_inv := (_ : Function.RightInverse f .invFun f .toFun ) } ,
map_add' :=
(_ :
β (x y : Multiplicative G ),
Equiv.toFun f .toEquiv (x * y ) = Equiv.toFun f .toEquiv x * Equiv.toFun f .toEquiv y ) } )
((fun f =>
{
toEquiv :=
{ toFun := β(βAddMonoidHom.toMultiplicative'' (toAddMonoidHom f ) ) ,
invFun := β(βAddMonoidHom.toMultiplicative' (toAddMonoidHom (symm f ) ) ) ,
left_inv := (_ : Function.LeftInverse f .invFun f .toFun ) ,
right_inv := (_ : Function.RightInverse f .invFun f .toFun ) } ,
map_mul' :=
(_ : β (x y : G ), Equiv.toFun f .toEquiv (x + y ) = Equiv.toFun f .toEquiv x + Equiv.toFun f .toEquiv y ) } )
x ) )
xβ = βx xβ ; h β((fun f =>
{
toEquiv :=
{ toFun := β(MulEquiv.toMonoidHom f ) , invFun := β(MulEquiv.toMonoidHom (MulEquiv.symm f ) ) ,
left_inv := (_ : Function.LeftInverse f .invFun f .toFun ) ,
right_inv := (_ : Function.RightInverse f .invFun f .toFun ) } ,
map_add' :=
(_ :
β (x y : Multiplicative G ),
Equiv.toFun f .toEquiv (x * y ) = Equiv.toFun f .toEquiv x * Equiv.toFun f .toEquiv y ) } )
((fun f =>
{
toEquiv :=
{ toFun := β(βAddMonoidHom.toMultiplicative'' (toAddMonoidHom f ) ) ,
invFun := β(βAddMonoidHom.toMultiplicative' (toAddMonoidHom (symm f ) ) ) ,
left_inv := (_ : Function.LeftInverse f .invFun f .toFun ) ,
right_inv := (_ : Function.RightInverse f .invFun f .toFun ) } ,
map_mul' :=
(_ : β (x y : G ), Equiv.toFun f .toEquiv (x + y ) = Equiv.toFun f .toEquiv x + Equiv.toFun f .toEquiv y ) } )
x ) )
xβ = βx xβ (fun f =>
{
toEquiv :=
{ toFun := β(MulEquiv.toMonoidHom f ) , invFun := β(MulEquiv.toMonoidHom (MulEquiv.symm f ) ) ,
left_inv := (_ : Function.LeftInverse f .invFun f .toFun ) ,
right_inv := (_ : Function.RightInverse f .invFun f .toFun ) } ,
map_add' :=
(_ :
β (x y : Multiplicative G ),
Equiv.toFun f .toEquiv (x * y ) = Equiv.toFun f .toEquiv x * Equiv.toFun f .toEquiv y ) } )
((fun f =>
{
toEquiv :=
{ toFun := β(βAddMonoidHom.toMultiplicative'' (toAddMonoidHom f ) ) ,
invFun := β(βAddMonoidHom.toMultiplicative' (toAddMonoidHom (symm f ) ) ) ,
left_inv := (_ : Function.LeftInverse f .invFun f .toFun ) ,
right_inv := (_ : Function.RightInverse f .invFun f .toFun ) } ,
map_mul' :=
(_ : β (x y : G ), Equiv.toFun f .toEquiv (x + y ) = Equiv.toFun f .toEquiv x + Equiv.toFun f .toEquiv y ) } )
x ) = x rfl
right_inv x := by (fun f =>
{
toEquiv :=
{ toFun := β(βAddMonoidHom.toMultiplicative'' (toAddMonoidHom f ) ) ,
invFun := β(βAddMonoidHom.toMultiplicative' (toAddMonoidHom (symm f ) ) ) ,
left_inv := (_ : Function.LeftInverse f .invFun f .toFun ) ,
right_inv := (_ : Function.RightInverse f .invFun f .toFun ) } ,
map_mul' :=
(_ : β (x y : G ), Equiv.toFun f .toEquiv (x + y ) = Equiv.toFun f .toEquiv x + Equiv.toFun f .toEquiv y ) } )
((fun f =>
{
toEquiv :=
{ toFun := β(MulEquiv.toMonoidHom f ) , invFun := β(MulEquiv.toMonoidHom (MulEquiv.symm f ) ) ,
left_inv := (_ : Function.LeftInverse f .invFun f .toFun ) ,
right_inv := (_ : Function.RightInverse f .invFun f .toFun ) } ,
map_add' :=
(_ :
β (x y : Multiplicative G ),
Equiv.toFun f .toEquiv (x * y ) = Equiv.toFun f .toEquiv x * Equiv.toFun f .toEquiv y ) } )
x ) = x ext h β((fun f =>
{
toEquiv :=
{ toFun := β(βAddMonoidHom.toMultiplicative'' (toAddMonoidHom f ) ) ,
invFun := β(βAddMonoidHom.toMultiplicative' (toAddMonoidHom (symm f ) ) ) ,
left_inv := (_ : Function.LeftInverse f .invFun f .toFun ) ,
right_inv := (_ : Function.RightInverse f .invFun f .toFun ) } ,
map_mul' :=
(_ : β (x y : G ), Equiv.toFun f .toEquiv (x + y ) = Equiv.toFun f .toEquiv x + Equiv.toFun f .toEquiv y ) } )
((fun f =>
{
toEquiv :=
{ toFun := β(MulEquiv.toMonoidHom f ) , invFun := β(MulEquiv.toMonoidHom (MulEquiv.symm f ) ) ,
left_inv := (_ : Function.LeftInverse f .invFun f .toFun ) ,
right_inv := (_ : Function.RightInverse f .invFun f .toFun ) } ,
map_add' :=
(_ :
β (x y : Multiplicative G ),
Equiv.toFun f .toEquiv (x * y ) = Equiv.toFun f .toEquiv x * Equiv.toFun f .toEquiv y ) } )
x ) )
xβ = βx xβ ; h β((fun f =>
{
toEquiv :=
{ toFun := β(βAddMonoidHom.toMultiplicative'' (toAddMonoidHom f ) ) ,
invFun := β(βAddMonoidHom.toMultiplicative' (toAddMonoidHom (symm f ) ) ) ,
left_inv := (_ : Function.LeftInverse f .invFun f .toFun ) ,
right_inv := (_ : Function.RightInverse f .invFun f .toFun ) } ,
map_mul' :=
(_ : β (x y : G ), Equiv.toFun f .toEquiv (x + y ) = Equiv.toFun f .toEquiv x + Equiv.toFun f .toEquiv y ) } )
((fun f =>
{
toEquiv :=
{ toFun := β(MulEquiv.toMonoidHom f ) , invFun := β(MulEquiv.toMonoidHom (MulEquiv.symm f ) ) ,
left_inv := (_ : Function.LeftInverse f .invFun f .toFun ) ,
right_inv := (_ : Function.RightInverse f .invFun f .toFun ) } ,
map_add' :=
(_ :
β (x y : Multiplicative G ),
Equiv.toFun f .toEquiv (x * y ) = Equiv.toFun f .toEquiv x * Equiv.toFun f .toEquiv y ) } )
x ) )
xβ = βx xβ (fun f =>
{
toEquiv :=
{ toFun := β(βAddMonoidHom.toMultiplicative'' (toAddMonoidHom f ) ) ,
invFun := β(βAddMonoidHom.toMultiplicative' (toAddMonoidHom (symm f ) ) ) ,
left_inv := (_ : Function.LeftInverse f .invFun f .toFun ) ,
right_inv := (_ : Function.RightInverse f .invFun f .toFun ) } ,
map_mul' :=
(_ : β (x y : G ), Equiv.toFun f .toEquiv (x + y ) = Equiv.toFun f .toEquiv x + Equiv.toFun f .toEquiv y ) } )
((fun f =>
{
toEquiv :=
{ toFun := β(MulEquiv.toMonoidHom f ) , invFun := β(MulEquiv.toMonoidHom (MulEquiv.symm f ) ) ,
left_inv := (_ : Function.LeftInverse f .invFun f .toFun ) ,
right_inv := (_ : Function.RightInverse f .invFun f .toFun ) } ,
map_add' :=
(_ :
β (x y : Multiplicative G ),
Equiv.toFun f .toEquiv (x * y ) = Equiv.toFun f .toEquiv x * Equiv.toFun f .toEquiv y ) } )
x ) = x rfl
#align add_equiv.to_multiplicative'' AddEquiv.toMultiplicative''
/-- Reinterpret `Multiplicative G β* H` as `G β+ Additive H` as. -/
def MulEquiv.toAdditive'' [ AddZeroClass : Type ?u.9577 β Type ?u.9577 AddZeroClass G ] [ MulOneClass : Type ?u.9580 β Type ?u.9580 MulOneClass H ] :
Multiplicative : Type ?u.9587 β Type ?u.9587 Multiplicative G β* H β ( G β+ Additive H ) :=
AddEquiv.toMultiplicative'' . symm : {Ξ± : Sort ?u.9753} β {Ξ² : Sort ?u.9752} β Ξ± β Ξ² β Ξ² β Ξ± symm
#align mul_equiv.to_additive'' MulEquiv.toAdditive''
section
variable ( G ) ( H )
/-- `Additive (Multiplicative G)` is just `G`. -/
def AddEquiv.additiveMultiplicative [ AddZeroClass : Type ?u.9833 β Type ?u.9833 AddZeroClass G ] : Additive ( Multiplicative : Type ?u.9839 β Type ?u.9839 Multiplicative G ) β+ G :=
MulEquiv.toAdditive' ( MulEquiv.refl : (M : Type ?u.9972) β [inst : Mul M ] β M β* M MulEquiv.refl ( Multiplicative : Type ?u.9973 β Type ?u.9973 Multiplicative G ))
#align add_equiv.additive_multiplicative AddEquiv.additiveMultiplicative
/-- `Multiplicative (Additive H)` is just `H`. -/
def MulEquiv.multiplicativeAdditive [ MulOneClass : Type ?u.10086 β Type ?u.10086 MulOneClass H ] : Multiplicative : Type ?u.10091 β Type ?u.10091 Multiplicative ( Additive : Type ?u.10092 β Type ?u.10092 Additive H ) β* H :=
AddEquiv.toMultiplicative'' ( AddEquiv.refl : (M : Type ?u.10313) β [inst : Add M ] β M β+ M AddEquiv.refl ( Additive : Type ?u.10314 β Type ?u.10314 Additive H ))
#align mul_equiv.multiplicative_additive MulEquiv.multiplicativeAdditive
end