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 Cmdinstead 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: Type ?u.7531
G
H: Type ?u.11
H
:
Type _: Type (?u.5+1)
Type _
} /-- Reinterpret `G ≃+ H` as `Multiplicative G ≃* Multiplicative H`. -/ def
AddEquiv.toMultiplicative: [inst : AddZeroClass G] β†’ [inst_1 : AddZeroClass H] β†’ G ≃+ H ≃ (Multiplicative G ≃* Multiplicative H)
AddEquiv.toMultiplicative
[
AddZeroClass: Type ?u.14 β†’ Type ?u.14
AddZeroClass
G: Type ?u.8
G
] [
AddZeroClass: Type ?u.17 β†’ Type ?u.17
AddZeroClass
H: Type ?u.11
H
] :
G: Type ?u.8
G
≃+
H: Type ?u.11
H
≃ (
Multiplicative: Type ?u.50 β†’ Type ?u.50
Multiplicative
G: Type ?u.8
G
≃*
Multiplicative: Type ?u.51 β†’ Type ?u.51
Multiplicative
H: Type ?u.11
H
) where toFun
f: ?m.94
f
:= ⟨⟨
AddMonoidHom.toMultiplicative: {Ξ± : Type ?u.153} β†’ {Ξ² : Type ?u.152} β†’ [inst : AddZeroClass Ξ±] β†’ [inst_1 : AddZeroClass Ξ²] β†’ (Ξ± β†’+ Ξ²) ≃ (Multiplicative Ξ± β†’* Multiplicative Ξ²)
AddMonoidHom.toMultiplicative
f: ?m.94
f
.
toAddMonoidHom: {M : Type ?u.246} β†’ {N : Type ?u.245} β†’ [inst : AddZeroClass M] β†’ [inst_1 : AddZeroClass N] β†’ M ≃+ N β†’ M β†’+ N
toAddMonoidHom
,
AddMonoidHom.toMultiplicative: {Ξ± : Type ?u.519} β†’ {Ξ² : Type ?u.518} β†’ [inst : AddZeroClass Ξ±] β†’ [inst_1 : AddZeroClass Ξ²] β†’ (Ξ± β†’+ Ξ²) ≃ (Multiplicative Ξ± β†’* Multiplicative Ξ²)
AddMonoidHom.toMultiplicative
f: ?m.94
f
.
symm: {M : Type ?u.612} β†’ {N : Type ?u.611} β†’ [inst : Add M] β†’ [inst_1 : Add N] β†’ M ≃+ N β†’ N ≃+ M
symm
.
toAddMonoidHom: {M : Type ?u.630} β†’ {N : Type ?u.629} β†’ [inst : AddZeroClass M] β†’ [inst_1 : AddZeroClass N] β†’ M ≃+ N β†’ M β†’+ N
toAddMonoidHom
,
f: ?m.94
f
.
1: {A : Type ?u.897} β†’ {B : Type ?u.896} β†’ [inst : Add A] β†’ [inst_1 : Add B] β†’ A ≃+ B β†’ A ≃ B
1
.
3: βˆ€ {Ξ± : Sort ?u.903} {Ξ² : Sort ?u.902} (self : Ξ± ≃ Ξ²), Function.LeftInverse self.invFun self.toFun
3
,
f: ?m.94
f
.
1: {A : Type ?u.922} β†’ {B : Type ?u.921} β†’ [inst : Add A] β†’ [inst_1 : Add B] β†’ A ≃+ B β†’ A ≃ B
1
.
4: βˆ€ {Ξ± : Sort ?u.928} {Ξ² : Sort ?u.927} (self : Ξ± ≃ Ξ²), Function.RightInverse self.invFun self.toFun
4
⟩,
f: ?m.94
f
.
2: βˆ€ {A : Type ?u.945} {B : Type ?u.944} [inst : Add A] [inst_1 : Add B] (self : A ≃+ B) (x y : A), Equiv.toFun self.toEquiv (x + y) = Equiv.toFun self.toEquiv x + Equiv.toFun self.toEquiv y
2
⟩ invFun
f: ?m.990
f
:= ⟨⟨
f: ?m.990
f
.
toMonoidHom: {M : Type ?u.1037} β†’ {N : Type ?u.1036} β†’ [inst : MulOneClass M] β†’ [inst_1 : MulOneClass N] β†’ M ≃* N β†’ M β†’* N
toMonoidHom
,
f: ?m.990
f
.
symm: {M : Type ?u.1281} β†’ {N : Type ?u.1280} β†’ [inst : Mul M] β†’ [inst_1 : Mul N] β†’ M ≃* N β†’ N ≃* M
symm
.
toMonoidHom: {M : Type ?u.1287} β†’ {N : Type ?u.1286} β†’ [inst : MulOneClass M] β†’ [inst_1 : MulOneClass N] β†’ M ≃* N β†’ M β†’* N
toMonoidHom
,
f: ?m.990
f
.
1: {M : Type ?u.1511} β†’ {N : Type ?u.1510} β†’ [inst : Mul M] β†’ [inst_1 : Mul N] β†’ M ≃* N β†’ M ≃ N
1
.
3: βˆ€ {Ξ± : Sort ?u.1517} {Ξ² : Sort ?u.1516} (self : Ξ± ≃ Ξ²), Function.LeftInverse self.invFun self.toFun
3
,
f: ?m.990
f
.
1: {M : Type ?u.1522} β†’ {N : Type ?u.1521} β†’ [inst : Mul M] β†’ [inst_1 : Mul N] β†’ M ≃* N β†’ M ≃ N
1
.
4: βˆ€ {Ξ± : Sort ?u.1528} {Ξ² : Sort ?u.1527} (self : Ξ± ≃ Ξ²), Function.RightInverse self.invFun self.toFun
4
⟩,
f: ?m.990
f
.
2: βˆ€ {M : Type ?u.1533} {N : Type ?u.1532} [inst : Mul M] [inst_1 : Mul N] (self : M ≃* N) (x y : M), Equiv.toFun self.toEquiv (x * y) = Equiv.toFun self.toEquiv x * Equiv.toFun self.toEquiv y
2
⟩ left_inv
x: ?m.1549
x
:=

Goals accomplished! πŸ™
G: Type ?u.8

H: Type ?u.11

inst✝¹: AddZeroClass G

inst✝: AddZeroClass H

x: G ≃+ 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
G: Type ?u.8

H: Type ?u.11

inst✝¹: AddZeroClass G

inst✝: AddZeroClass H

x: G ≃+ H

x✝: G


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✝
G: Type ?u.8

H: Type ?u.11

inst✝¹: AddZeroClass G

inst✝: AddZeroClass H

x: G ≃+ H

x✝: G


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✝
G: Type ?u.8

H: Type ?u.11

inst✝¹: AddZeroClass G

inst✝: AddZeroClass H

x: G ≃+ 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

Goals accomplished! πŸ™
right_inv
x: ?m.1555
x
:=

Goals accomplished! πŸ™
G: Type ?u.8

H: Type ?u.11

inst✝¹: AddZeroClass G

inst✝: AddZeroClass H

x: Multiplicative G ≃* Multiplicative 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
G: Type ?u.8

H: Type ?u.11

inst✝¹: AddZeroClass G

inst✝: AddZeroClass H

x: Multiplicative G ≃* Multiplicative H

x✝: Multiplicative G


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✝
G: Type ?u.8

H: Type ?u.11

inst✝¹: AddZeroClass G

inst✝: AddZeroClass H

x: Multiplicative G ≃* Multiplicative H

x✝: Multiplicative G


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✝
G: Type ?u.8

H: Type ?u.11

inst✝¹: AddZeroClass G

inst✝: AddZeroClass H

x: Multiplicative G ≃* Multiplicative 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

Goals accomplished! πŸ™
#align add_equiv.to_multiplicative
AddEquiv.toMultiplicative: {G : Type u_1} β†’ {H : Type u_2} β†’ [inst : AddZeroClass G] β†’ [inst_1 : AddZeroClass H] β†’ G ≃+ H ≃ (Multiplicative G ≃* Multiplicative H)
AddEquiv.toMultiplicative
/-- Reinterpret `G ≃* H` as `Additive G ≃+ Additive H`. -/ def
MulEquiv.toAdditive: {G : Type u_1} β†’ {H : Type u_2} β†’ [inst : MulOneClass G] β†’ [inst_1 : MulOneClass H] β†’ G ≃* H ≃ (Additive G ≃+ Additive H)
MulEquiv.toAdditive
[
MulOneClass: Type ?u.1978 β†’ Type ?u.1978
MulOneClass
G: Type ?u.1972
G
] [
MulOneClass: Type ?u.1981 β†’ Type ?u.1981
MulOneClass
H: Type ?u.1975
H
] :
G: Type ?u.1972
G
≃*
H: Type ?u.1975
H
≃ (
Additive: Type ?u.2116 β†’ Type ?u.2116
Additive
G: Type ?u.1972
G
≃+
Additive: Type ?u.2117 β†’ Type ?u.2117
Additive
H: Type ?u.1975
H
) where toFun
f: ?m.2232
f
:= ⟨⟨
MonoidHom.toAdditive: {Ξ± : Type ?u.2285} β†’ {Ξ² : Type ?u.2284} β†’ [inst : MulOneClass Ξ±] β†’ [inst_1 : MulOneClass Ξ²] β†’ (Ξ± β†’* Ξ²) ≃ (Additive Ξ± β†’+ Additive Ξ²)
MonoidHom.toAdditive
f: ?m.2232
f
.
toMonoidHom: {M : Type ?u.2380} β†’ {N : Type ?u.2379} β†’ [inst : MulOneClass M] β†’ [inst_1 : MulOneClass N] β†’ M ≃* N β†’ M β†’* N
toMonoidHom
,
MonoidHom.toAdditive: {Ξ± : Type ?u.2908} β†’ {Ξ² : Type ?u.2907} β†’ [inst : MulOneClass Ξ±] β†’ [inst_1 : MulOneClass Ξ²] β†’ (Ξ± β†’* Ξ²) ≃ (Additive Ξ± β†’+ Additive Ξ²)
MonoidHom.toAdditive
f: ?m.2232
f
.
symm: {M : Type ?u.3003} β†’ {N : Type ?u.3002} β†’ [inst : Mul M] β†’ [inst_1 : Mul N] β†’ M ≃* N β†’ N ≃* M
symm
.
toMonoidHom: {M : Type ?u.3095} β†’ {N : Type ?u.3094} β†’ [inst : MulOneClass M] β†’ [inst_1 : MulOneClass N] β†’ M ≃* N β†’ M β†’* N
toMonoidHom
,
f: ?m.2232
f
.
1: {M : Type ?u.3615} β†’ {N : Type ?u.3614} β†’ [inst : Mul M] β†’ [inst_1 : Mul N] β†’ M ≃* N β†’ M ≃ N
1
.
3: βˆ€ {Ξ± : Sort ?u.3621} {Ξ² : Sort ?u.3620} (self : Ξ± ≃ Ξ²), Function.LeftInverse self.invFun self.toFun
3
,
f: ?m.2232
f
.
1: {M : Type ?u.3640} β†’ {N : Type ?u.3639} β†’ [inst : Mul M] β†’ [inst_1 : Mul N] β†’ M ≃* N β†’ M ≃ N
1
.
4: βˆ€ {Ξ± : Sort ?u.3646} {Ξ² : Sort ?u.3645} (self : Ξ± ≃ Ξ²), Function.RightInverse self.invFun self.toFun
4
⟩,
f: ?m.2232
f
.
2: βˆ€ {M : Type ?u.3663} {N : Type ?u.3662} [inst : Mul M] [inst_1 : Mul N] (self : M ≃* N) (x y : M), Equiv.toFun self.toEquiv (x * y) = Equiv.toFun self.toEquiv x * Equiv.toFun self.toEquiv y
2
⟩ invFun
f: ?m.3780
f
:= ⟨⟨
f: ?m.3780
f
.
toAddMonoidHom: {M : Type ?u.3833} β†’ {N : Type ?u.3832} β†’ [inst : AddZeroClass M] β†’ [inst_1 : AddZeroClass N] β†’ M ≃+ N β†’ M β†’+ N
toAddMonoidHom
,
f: ?m.3780
f
.
symm: {M : Type ?u.4322} β†’ {N : Type ?u.4321} β†’ [inst : Add M] β†’ [inst_1 : Add N] β†’ M ≃+ N β†’ N ≃+ M
symm
.
toAddMonoidHom: {M : Type ?u.4328} β†’ {N : Type ?u.4327} β†’ [inst : AddZeroClass M] β†’ [inst_1 : AddZeroClass N] β†’ M ≃+ N β†’ M β†’+ N
toAddMonoidHom
,
f: ?m.3780
f
.
1: {A : Type ?u.4797} β†’ {B : Type ?u.4796} β†’ [inst : Add A] β†’ [inst_1 : Add B] β†’ A ≃+ B β†’ A ≃ B
1
.
3: βˆ€ {Ξ± : Sort ?u.4803} {Ξ² : Sort ?u.4802} (self : Ξ± ≃ Ξ²), Function.LeftInverse self.invFun self.toFun
3
,
f: ?m.3780
f
.
1: {A : Type ?u.4808} β†’ {B : Type ?u.4807} β†’ [inst : Add A] β†’ [inst_1 : Add B] β†’ A ≃+ B β†’ A ≃ B
1
.
4: βˆ€ {Ξ± : Sort ?u.4814} {Ξ² : Sort ?u.4813} (self : Ξ± ≃ Ξ²), Function.RightInverse self.invFun self.toFun
4
⟩,
f: ?m.3780
f
.
2: βˆ€ {A : Type ?u.4819} {B : Type ?u.4818} [inst : Add A] [inst_1 : Add B] (self : A ≃+ B) (x y : A), Equiv.toFun self.toEquiv (x + y) = Equiv.toFun self.toEquiv x + Equiv.toFun self.toEquiv y
2
⟩ left_inv
x: ?m.4835
x
:=

Goals accomplished! πŸ™
G: Type ?u.1972

H: Type ?u.1975

inst✝¹: MulOneClass G

inst✝: MulOneClass H

x: G ≃* 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
G: Type ?u.1972

H: Type ?u.1975

inst✝¹: MulOneClass G

inst✝: MulOneClass H

x: G ≃* H

x✝: G


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✝
G: Type ?u.1972

H: Type ?u.1975

inst✝¹: MulOneClass G

inst✝: MulOneClass H

x: G ≃* H

x✝: G


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✝
G: Type ?u.1972

H: Type ?u.1975

inst✝¹: MulOneClass G

inst✝: MulOneClass H

x: G ≃* 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

Goals accomplished! πŸ™
right_inv
x: ?m.4841
x
:=

Goals accomplished! πŸ™
G: Type ?u.1972

H: Type ?u.1975

inst✝¹: MulOneClass G

inst✝: MulOneClass H

x: Additive G ≃+ Additive 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
G: Type ?u.1972

H: Type ?u.1975

inst✝¹: MulOneClass G

inst✝: MulOneClass H

x: Additive G ≃+ Additive H

x✝: Additive G


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✝
G: Type ?u.1972

H: Type ?u.1975

inst✝¹: MulOneClass G

inst✝: MulOneClass H

x: Additive G ≃+ Additive H

x✝: Additive G


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✝
G: Type ?u.1972

H: Type ?u.1975

inst✝¹: MulOneClass G

inst✝: MulOneClass H

x: Additive G ≃+ Additive 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

Goals accomplished! πŸ™
#align mul_equiv.to_additive
MulEquiv.toAdditive: {G : Type u_1} β†’ {H : Type u_2} β†’ [inst : MulOneClass G] β†’ [inst_1 : MulOneClass H] β†’ G ≃* H ≃ (Additive G ≃+ Additive H)
MulEquiv.toAdditive
/-- Reinterpret `Additive G ≃+ H` as `G ≃* Multiplicative H`. -/ def
AddEquiv.toMultiplicative': [inst : MulOneClass G] β†’ [inst_1 : AddZeroClass H] β†’ Additive G ≃+ H ≃ (G ≃* Multiplicative H)
AddEquiv.toMultiplicative'
[
MulOneClass: Type ?u.5253 β†’ Type ?u.5253
MulOneClass
G: Type ?u.5247
G
] [
AddZeroClass: Type ?u.5256 β†’ Type ?u.5256
AddZeroClass
H: Type ?u.5250
H
] :
Additive: Type ?u.5263 β†’ Type ?u.5263
Additive
G: Type ?u.5247
G
≃+
H: Type ?u.5250
H
≃ (
G: Type ?u.5247
G
≃*
Multiplicative: Type ?u.5349 β†’ Type ?u.5349
Multiplicative
H: Type ?u.5250
H
) where toFun
f: ?m.5420
f
:= ⟨⟨
AddMonoidHom.toMultiplicative': {Ξ± : Type ?u.5479} β†’ {Ξ² : Type ?u.5478} β†’ [inst : MulOneClass Ξ±] β†’ [inst_1 : AddZeroClass Ξ²] β†’ (Additive Ξ± β†’+ Ξ²) ≃ (Ξ± β†’* Multiplicative Ξ²)
AddMonoidHom.toMultiplicative'
f: ?m.5420
f
.
toAddMonoidHom: {M : Type ?u.5573} β†’ {N : Type ?u.5572} β†’ [inst : AddZeroClass M] β†’ [inst_1 : AddZeroClass N] β†’ M ≃+ N β†’ M β†’+ N
toAddMonoidHom
,
AddMonoidHom.toMultiplicative'': {Ξ± : Type ?u.5865} β†’ {Ξ² : Type ?u.5864} β†’ [inst : AddZeroClass Ξ±] β†’ [inst_1 : MulOneClass Ξ²] β†’ (Ξ± β†’+ Additive Ξ²) ≃ (Multiplicative Ξ± β†’* Ξ²)
AddMonoidHom.toMultiplicative''
f: ?m.5420
f
.
symm: {M : Type ?u.5959} β†’ {N : Type ?u.5958} β†’ [inst : Add M] β†’ [inst_1 : Add N] β†’ M ≃+ N β†’ N ≃+ M
symm
.
toAddMonoidHom: {M : Type ?u.6019} β†’ {N : Type ?u.6018} β†’ [inst : AddZeroClass M] β†’ [inst_1 : AddZeroClass N] β†’ M ≃+ N β†’ M β†’+ N
toAddMonoidHom
,
f: ?m.5420
f
.
1: {A : Type ?u.6287} β†’ {B : Type ?u.6286} β†’ [inst : Add A] β†’ [inst_1 : Add B] β†’ A ≃+ B β†’ A ≃ B
1
.
3: βˆ€ {Ξ± : Sort ?u.6293} {Ξ² : Sort ?u.6292} (self : Ξ± ≃ Ξ²), Function.LeftInverse self.invFun self.toFun
3
,
f: ?m.5420
f
.
1: {A : Type ?u.6312} β†’ {B : Type ?u.6311} β†’ [inst : Add A] β†’ [inst_1 : Add B] β†’ A ≃+ B β†’ A ≃ B
1
.
4: βˆ€ {Ξ± : Sort ?u.6318} {Ξ² : Sort ?u.6317} (self : Ξ± ≃ Ξ²), Function.RightInverse self.invFun self.toFun
4
⟩,
f: ?m.5420
f
.
2: βˆ€ {A : Type ?u.6335} {B : Type ?u.6334} [inst : Add A] [inst_1 : Add B] (self : A ≃+ B) (x y : A), Equiv.toFun self.toEquiv (x + y) = Equiv.toFun self.toEquiv x + Equiv.toFun self.toEquiv y
2
⟩ invFun
f: ?m.6412
f
:= ⟨⟨
f: ?m.6412
f
.
toMonoidHom: {M : Type ?u.6459} β†’ {N : Type ?u.6458} β†’ [inst : MulOneClass M] β†’ [inst_1 : MulOneClass N] β†’ M ≃* N β†’ M β†’* N
toMonoidHom
,
f: ?m.6412
f
.
symm: {M : Type ?u.6681} β†’ {N : Type ?u.6680} β†’ [inst : Mul M] β†’ [inst_1 : Mul N] β†’ M ≃* N β†’ N ≃* M
symm
.
toMonoidHom: {M : Type ?u.6687} β†’ {N : Type ?u.6686} β†’ [inst : MulOneClass M] β†’ [inst_1 : MulOneClass N] β†’ M ≃* N β†’ M β†’* N
toMonoidHom
,
f: ?m.6412
f
.
1: {M : Type ?u.6901} β†’ {N : Type ?u.6900} β†’ [inst : Mul M] β†’ [inst_1 : Mul N] β†’ M ≃* N β†’ M ≃ N
1
.
3: βˆ€ {Ξ± : Sort ?u.6907} {Ξ² : Sort ?u.6906} (self : Ξ± ≃ Ξ²), Function.LeftInverse self.invFun self.toFun
3
,
f: ?m.6412
f
.
1: {M : Type ?u.6912} β†’ {N : Type ?u.6911} β†’ [inst : Mul M] β†’ [inst_1 : Mul N] β†’ M ≃* N β†’ M ≃ N
1
.
4: βˆ€ {Ξ± : Sort ?u.6918} {Ξ² : Sort ?u.6917} (self : Ξ± ≃ Ξ²), Function.RightInverse self.invFun self.toFun
4
⟩,
f: ?m.6412
f
.
2: βˆ€ {M : Type ?u.6923} {N : Type ?u.6922} [inst : Mul M] [inst_1 : Mul N] (self : M ≃* N) (x y : M), Equiv.toFun self.toEquiv (x * y) = Equiv.toFun self.toEquiv x * Equiv.toFun self.toEquiv y
2
⟩ left_inv
x: ?m.6939
x
:=

Goals accomplished! πŸ™
G: Type ?u.5247

H: Type ?u.5250

inst✝¹: MulOneClass G

inst✝: AddZeroClass H

x: Additive G ≃+ 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
G: Type ?u.5247

H: Type ?u.5250

inst✝¹: MulOneClass G

inst✝: AddZeroClass H

x: Additive G ≃+ H

x✝: Additive G


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✝
G: Type ?u.5247

H: Type ?u.5250

inst✝¹: MulOneClass G

inst✝: AddZeroClass H

x: Additive G ≃+ H

x✝: Additive G


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✝
G: Type ?u.5247

H: Type ?u.5250

inst✝¹: MulOneClass G

inst✝: AddZeroClass H

x: Additive G ≃+ 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

Goals accomplished! πŸ™
right_inv
x: ?m.6945
x
:=

Goals accomplished! πŸ™
G: Type ?u.5247

H: Type ?u.5250

inst✝¹: MulOneClass G

inst✝: AddZeroClass H

x: G ≃* Multiplicative 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
G: Type ?u.5247

H: Type ?u.5250

inst✝¹: MulOneClass G

inst✝: AddZeroClass H

x: G ≃* Multiplicative H

x✝: G


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✝
G: Type ?u.5247

H: Type ?u.5250

inst✝¹: MulOneClass G

inst✝: AddZeroClass H

x: G ≃* Multiplicative H

x✝: G


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✝
G: Type ?u.5247

H: Type ?u.5250

inst✝¹: MulOneClass G

inst✝: AddZeroClass H

x: G ≃* Multiplicative 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

Goals accomplished! πŸ™
#align add_equiv.to_multiplicative'
AddEquiv.toMultiplicative': {G : Type u_1} β†’ {H : Type u_2} β†’ [inst : MulOneClass G] β†’ [inst_1 : AddZeroClass H] β†’ Additive G ≃+ H ≃ (G ≃* Multiplicative H)
AddEquiv.toMultiplicative'
/-- Reinterpret `G ≃* Multiplicative H` as `Additive G ≃+ H` as. -/ def
MulEquiv.toAdditive': [inst : MulOneClass G] β†’ [inst_1 : AddZeroClass H] β†’ G ≃* Multiplicative H ≃ (Additive G ≃+ H)
MulEquiv.toAdditive'
[
MulOneClass: Type ?u.7293 β†’ Type ?u.7293
MulOneClass
G: Type ?u.7287
G
] [
AddZeroClass: Type ?u.7296 β†’ Type ?u.7296
AddZeroClass
H: Type ?u.7290
H
] :
G: Type ?u.7287
G
≃*
Multiplicative: Type ?u.7303 β†’ Type ?u.7303
Multiplicative
H: Type ?u.7290
H
≃ (
Additive: Type ?u.7390 β†’ Type ?u.7390
Additive
G: Type ?u.7287
G
≃+
H: Type ?u.7290
H
) :=
AddEquiv.toMultiplicative': {G : Type ?u.7454} β†’ {H : Type ?u.7453} β†’ [inst : MulOneClass G] β†’ [inst_1 : AddZeroClass H] β†’ Additive G ≃+ H ≃ (G ≃* Multiplicative H)
AddEquiv.toMultiplicative'
.
symm: {Ξ± : Sort ?u.7469} β†’ {Ξ² : Sort ?u.7468} β†’ Ξ± ≃ Ξ² β†’ Ξ² ≃ Ξ±
symm
#align mul_equiv.to_additive'
MulEquiv.toAdditive': {G : Type u_1} β†’ {H : Type u_2} β†’ [inst : MulOneClass G] β†’ [inst_1 : AddZeroClass H] β†’ G ≃* Multiplicative H ≃ (Additive G ≃+ H)
MulEquiv.toAdditive'
/-- Reinterpret `G ≃+ Additive H` as `Multiplicative G ≃* H`. -/ def
AddEquiv.toMultiplicative'': {G : Type u_1} β†’ {H : Type u_2} β†’ [inst : AddZeroClass G] β†’ [inst_1 : MulOneClass H] β†’ G ≃+ Additive H ≃ (Multiplicative G ≃* H)
AddEquiv.toMultiplicative''
[
AddZeroClass: Type ?u.7537 β†’ Type ?u.7537
AddZeroClass
G: Type ?u.7531
G
] [
MulOneClass: Type ?u.7540 β†’ Type ?u.7540
MulOneClass
H: Type ?u.7534
H
] :
G: Type ?u.7531
G
≃+
Additive: Type ?u.7547 β†’ Type ?u.7547
Additive
H: Type ?u.7534
H
≃ (
Multiplicative: Type ?u.7633 β†’ Type ?u.7633
Multiplicative
G: Type ?u.7531
G
≃*
H: Type ?u.7534
H
) where toFun
f: ?m.7704
f
:= ⟨⟨
AddMonoidHom.toMultiplicative'': {Ξ± : Type ?u.7763} β†’ {Ξ² : Type ?u.7762} β†’ [inst : AddZeroClass Ξ±] β†’ [inst_1 : MulOneClass Ξ²] β†’ (Ξ± β†’+ Additive Ξ²) ≃ (Multiplicative Ξ± β†’* Ξ²)
AddMonoidHom.toMultiplicative''
f: ?m.7704
f
.
toAddMonoidHom: {M : Type ?u.7857} β†’ {N : Type ?u.7856} β†’ [inst : AddZeroClass M] β†’ [inst_1 : AddZeroClass N] β†’ M ≃+ N β†’ M β†’+ N
toAddMonoidHom
,
AddMonoidHom.toMultiplicative': {Ξ± : Type ?u.8149} β†’ {Ξ² : Type ?u.8148} β†’ [inst : MulOneClass Ξ±] β†’ [inst_1 : AddZeroClass Ξ²] β†’ (Additive Ξ± β†’+ Ξ²) ≃ (Ξ± β†’* Multiplicative Ξ²)
AddMonoidHom.toMultiplicative'
f: ?m.7704
f
.
symm: {M : Type ?u.8243} β†’ {N : Type ?u.8242} β†’ [inst : Add M] β†’ [inst_1 : Add N] β†’ M ≃+ N β†’ N ≃+ M
symm
.
toAddMonoidHom: {M : Type ?u.8303} β†’ {N : Type ?u.8302} β†’ [inst : AddZeroClass M] β†’ [inst_1 : AddZeroClass N] β†’ M ≃+ N β†’ M β†’+ N
toAddMonoidHom
,
f: ?m.7704
f
.
1: {A : Type ?u.8571} β†’ {B : Type ?u.8570} β†’ [inst : Add A] β†’ [inst_1 : Add B] β†’ A ≃+ B β†’ A ≃ B
1
.
3: βˆ€ {Ξ± : Sort ?u.8577} {Ξ² : Sort ?u.8576} (self : Ξ± ≃ Ξ²), Function.LeftInverse self.invFun self.toFun
3
,
f: ?m.7704
f
.
1: {A : Type ?u.8596} β†’ {B : Type ?u.8595} β†’ [inst : Add A] β†’ [inst_1 : Add B] β†’ A ≃+ B β†’ A ≃ B
1
.
4: βˆ€ {Ξ± : Sort ?u.8602} {Ξ² : Sort ?u.8601} (self : Ξ± ≃ Ξ²), Function.RightInverse self.invFun self.toFun
4
⟩,
f: ?m.7704
f
.
2: βˆ€ {A : Type ?u.8619} {B : Type ?u.8618} [inst : Add A] [inst_1 : Add B] (self : A ≃+ B) (x y : A), Equiv.toFun self.toEquiv (x + y) = Equiv.toFun self.toEquiv x + Equiv.toFun self.toEquiv y
2
⟩ invFun
f: ?m.8696
f
:= ⟨⟨
f: ?m.8696
f
.
toMonoidHom: {M : Type ?u.8743} β†’ {N : Type ?u.8742} β†’ [inst : MulOneClass M] β†’ [inst_1 : MulOneClass N] β†’ M ≃* N β†’ M β†’* N
toMonoidHom
,
f: ?m.8696
f
.
symm: {M : Type ?u.8965} β†’ {N : Type ?u.8964} β†’ [inst : Mul M] β†’ [inst_1 : Mul N] β†’ M ≃* N β†’ N ≃* M
symm
.
toMonoidHom: {M : Type ?u.8971} β†’ {N : Type ?u.8970} β†’ [inst : MulOneClass M] β†’ [inst_1 : MulOneClass N] β†’ M ≃* N β†’ M β†’* N
toMonoidHom
,
f: ?m.8696
f
.
1: {M : Type ?u.9185} β†’ {N : Type ?u.9184} β†’ [inst : Mul M] β†’ [inst_1 : Mul N] β†’ M ≃* N β†’ M ≃ N
1
.
3: βˆ€ {Ξ± : Sort ?u.9191} {Ξ² : Sort ?u.9190} (self : Ξ± ≃ Ξ²), Function.LeftInverse self.invFun self.toFun
3
,
f: ?m.8696
f
.
1: {M : Type ?u.9196} β†’ {N : Type ?u.9195} β†’ [inst : Mul M] β†’ [inst_1 : Mul N] β†’ M ≃* N β†’ M ≃ N
1
.
4: βˆ€ {Ξ± : Sort ?u.9202} {Ξ² : Sort ?u.9201} (self : Ξ± ≃ Ξ²), Function.RightInverse self.invFun self.toFun
4
⟩,
f: ?m.8696
f
.
2: βˆ€ {M : Type ?u.9207} {N : Type ?u.9206} [inst : Mul M] [inst_1 : Mul N] (self : M ≃* N) (x y : M), Equiv.toFun self.toEquiv (x * y) = Equiv.toFun self.toEquiv x * Equiv.toFun self.toEquiv y
2
⟩ left_inv
x: ?m.9223
x
:=

Goals accomplished! πŸ™
G: Type ?u.7531

H: Type ?u.7534

inst✝¹: AddZeroClass G

inst✝: MulOneClass H

x: G ≃+ Additive 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
G: Type ?u.7531

H: Type ?u.7534

inst✝¹: AddZeroClass G

inst✝: MulOneClass H

x: G ≃+ Additive H

x✝: G


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✝
G: Type ?u.7531

H: Type ?u.7534

inst✝¹: AddZeroClass G

inst✝: MulOneClass H

x: G ≃+ Additive H

x✝: G


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✝
G: Type ?u.7531

H: Type ?u.7534

inst✝¹: AddZeroClass G

inst✝: MulOneClass H

x: G ≃+ Additive 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

Goals accomplished! πŸ™
right_inv
x: ?m.9229
x
:=

Goals accomplished! πŸ™
G: Type ?u.7531

H: Type ?u.7534

inst✝¹: AddZeroClass G

inst✝: MulOneClass H

x: Multiplicative G ≃* 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
G: Type ?u.7531

H: Type ?u.7534

inst✝¹: AddZeroClass G

inst✝: MulOneClass H

x: Multiplicative G ≃* H

x✝: Multiplicative G


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✝
G: Type ?u.7531

H: Type ?u.7534

inst✝¹: AddZeroClass G

inst✝: MulOneClass H

x: Multiplicative G ≃* H

x✝: Multiplicative G


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✝
G: Type ?u.7531

H: Type ?u.7534

inst✝¹: AddZeroClass G

inst✝: MulOneClass H

x: Multiplicative G ≃* 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

Goals accomplished! πŸ™
#align add_equiv.to_multiplicative''
AddEquiv.toMultiplicative'': {G : Type u_1} β†’ {H : Type u_2} β†’ [inst : AddZeroClass G] β†’ [inst_1 : MulOneClass H] β†’ G ≃+ Additive H ≃ (Multiplicative G ≃* H)
AddEquiv.toMultiplicative''
/-- Reinterpret `Multiplicative G ≃* H` as `G ≃+ Additive H` as. -/ def
MulEquiv.toAdditive'': {G : Type u_1} β†’ {H : Type u_2} β†’ [inst : AddZeroClass G] β†’ [inst_1 : MulOneClass H] β†’ Multiplicative G ≃* H ≃ (G ≃+ Additive H)
MulEquiv.toAdditive''
[
AddZeroClass: Type ?u.9577 β†’ Type ?u.9577
AddZeroClass
G: Type ?u.9571
G
] [
MulOneClass: Type ?u.9580 β†’ Type ?u.9580
MulOneClass
H: Type ?u.9574
H
] :
Multiplicative: Type ?u.9587 β†’ Type ?u.9587
Multiplicative
G: Type ?u.9571
G
≃*
H: Type ?u.9574
H
≃ (
G: Type ?u.9571
G
≃+
Additive: Type ?u.9674 β†’ Type ?u.9674
Additive
H: Type ?u.9574
H
) :=
AddEquiv.toMultiplicative'': {G : Type ?u.9738} β†’ {H : Type ?u.9737} β†’ [inst : AddZeroClass G] β†’ [inst_1 : MulOneClass H] β†’ G ≃+ Additive H ≃ (Multiplicative G ≃* H)
AddEquiv.toMultiplicative''
.
symm: {Ξ± : Sort ?u.9753} β†’ {Ξ² : Sort ?u.9752} β†’ Ξ± ≃ Ξ² β†’ Ξ² ≃ Ξ±
symm
#align mul_equiv.to_additive''
MulEquiv.toAdditive'': {G : Type u_1} β†’ {H : Type u_2} β†’ [inst : AddZeroClass G] β†’ [inst_1 : MulOneClass H] β†’ Multiplicative G ≃* H ≃ (G ≃+ Additive H)
MulEquiv.toAdditive''
section variable (
G: ?m.9821
G
) (
H: ?m.9824
H
) /-- `Additive (Multiplicative G)` is just `G`. -/ def
AddEquiv.additiveMultiplicative: (G : Type u_1) β†’ [inst : AddZeroClass G] β†’ Additive (Multiplicative G) ≃+ G
AddEquiv.additiveMultiplicative
[
AddZeroClass: Type ?u.9833 β†’ Type ?u.9833
AddZeroClass
G: Type ?u.9827
G
] :
Additive: Type ?u.9838 β†’ Type ?u.9838
Additive
(
Multiplicative: Type ?u.9839 β†’ Type ?u.9839
Multiplicative
G: Type ?u.9827
G
) ≃+
G: Type ?u.9827
G
:=
MulEquiv.toAdditive': {G : Type ?u.9877} β†’ {H : Type ?u.9876} β†’ [inst : MulOneClass G] β†’ [inst_1 : AddZeroClass H] β†’ G ≃* Multiplicative H ≃ (Additive G ≃+ H)
MulEquiv.toAdditive'
(
MulEquiv.refl: (M : Type ?u.9972) β†’ [inst : Mul M] β†’ M ≃* M
MulEquiv.refl
(
Multiplicative: Type ?u.9973 β†’ Type ?u.9973
Multiplicative
G: Type ?u.9827
G
)) #align add_equiv.additive_multiplicative
AddEquiv.additiveMultiplicative: (G : Type u_1) β†’ [inst : AddZeroClass G] β†’ Additive (Multiplicative G) ≃+ G
AddEquiv.additiveMultiplicative
/-- `Multiplicative (Additive H)` is just `H`. -/ def
MulEquiv.multiplicativeAdditive: [inst : MulOneClass H] β†’ Multiplicative (Additive H) ≃* H
MulEquiv.multiplicativeAdditive
[
MulOneClass: Type ?u.10086 β†’ Type ?u.10086
MulOneClass
H: Type ?u.10083
H
] :
Multiplicative: Type ?u.10091 β†’ Type ?u.10091
Multiplicative
(
Additive: Type ?u.10092 β†’ Type ?u.10092
Additive
H: Type ?u.10083
H
) ≃*
H: Type ?u.10083
H
:=
AddEquiv.toMultiplicative'': {G : Type ?u.10218} β†’ {H : Type ?u.10217} β†’ [inst : AddZeroClass G] β†’ [inst_1 : MulOneClass H] β†’ G ≃+ Additive H ≃ (Multiplicative G ≃* 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: Type ?u.10083
H
)) #align mul_equiv.multiplicative_additive
MulEquiv.multiplicativeAdditive: (H : Type u_1) β†’ [inst : MulOneClass H] β†’ Multiplicative (Additive H) ≃* H
MulEquiv.multiplicativeAdditive
end