@@ -3,21 +3,19 @@ Copyright (c) 2018 Mario Carneiro. All rights reserved.
33Released under Apache 2.0 license as described in the file LICENSE.
44Authors: Mario Carneiro
55-/
6- import Mathlib.Algebra.Group.Hom.Defs
6+ import Mathlib.Algebra.Group.Equiv.Defs
7+ import Mathlib.Algebra.Group.Hom.Basic
78import Mathlib.Algebra.Group.TypeTags.Basic
89
910/-!
1011# Transport algebra morphisms between additive and multiplicative types.
1112-/
1213
13-
14- universe u v
15-
16- variable {α : Type u} {β : Type v}
17-
1814open Additive (ofMul toMul)
1915open Multiplicative (ofAdd toAdd)
2016
17+ variable {M N α β : Type *}
18+
2119/-- Reinterpret `α →+ β` as `Multiplicative α →* Multiplicative β`. -/
2220@[simps]
2321def AddMonoidHom.toMultiplicative [AddZeroClass α] [AddZeroClass β] :
@@ -37,6 +35,9 @@ def AddMonoidHom.toMultiplicative [AddZeroClass α] [AddZeroClass β] :
3735lemma AddMonoidHom.coe_toMultiplicative [AddZeroClass α] [AddZeroClass β] (f : α →+ β) :
3836 ⇑(toMultiplicative f) = ofAdd ∘ f ∘ toAdd := rfl
3937
38+ @[simp]
39+ lemma AddMonoidHom.toMultiplicative_id [AddZeroClass α] : (id α).toMultiplicative = .id _ := rfl
40+
4041/-- Reinterpret `α →* β` as `Additive α →+ Additive β`. -/
4142@[simps]
4243def MonoidHom.toAdditive [MulOneClass α] [MulOneClass β] :
@@ -53,9 +54,14 @@ def MonoidHom.toAdditive [MulOneClass α] [MulOneClass β] :
5354 }
5455
5556@[simp, norm_cast]
56- lemma MonoidHom.coe_toMultiplicative [MulOneClass α] [MulOneClass β] (f : α →* β) :
57+ lemma MonoidHom.coe_toAdditive [MulOneClass α] [MulOneClass β] (f : α →* β) :
5758 ⇑(toAdditive f) = ofMul ∘ f ∘ toMul := rfl
5859
60+ @[deprecated (since := "2025-11-07")]
61+ alias MonoidHom.coe_toMultiplicative := MonoidHom.coe_toAdditive
62+
63+ @[simp] lemma MonoidHom.toAdditive_id [MulOneClass α] : (id α).toAdditive = .id _ := rfl
64+
5965/-- Reinterpret `Additive α →+ β` as `α →* Multiplicative β`. -/
6066@[simps]
6167def AddMonoidHom.toMultiplicativeRight [MulOneClass α] [AddZeroClass β] :
@@ -153,3 +159,36 @@ lemma proving equality in `α →* Multiplicative β` from equality in `Additive
153159lemma Additive.addMonoidHom_ext [MulOneClass α] [AddZeroClass β]
154160 (f g : Additive α →+ β) (h : f.toMultiplicativeRight = g.toMultiplicativeRight) : f = g :=
155161 AddMonoidHom.toMultiplicativeRight.injective h
162+
163+ section AddCommMonoid
164+ variable [AddMonoid M] [AddCommMonoid N]
165+
166+ @[simp]
167+ lemma AddMonoidHom.toMultiplicative_add (f g : M →+ N) :
168+ (f + g).toMultiplicative = f.toMultiplicative * g.toMultiplicative := rfl
169+
170+ end AddCommMonoid
171+
172+ /-- `AddMonoidHom.toMultiplicativeLeft` as an `AddEquiv`. -/
173+ def AddMonoidHom.toMultiplicativeLeftAddEquiv [AddMonoid M] [CommMonoid N] :
174+ (M →+ Additive N) ≃+ Additive (Multiplicative M →* N) where
175+ toEquiv := AddMonoidHom.toMultiplicativeLeft.trans Additive.ofMul
176+ map_add' _ _ := rfl
177+
178+ /-- `AddMonoidHom.toMultiplicativeRight` as an `AddEquiv`. -/
179+ def AddMonoidHom.toMultiplicativeRightAddEquiv [Monoid M] [AddCommMonoid N] :
180+ (Additive M →+ N) ≃+ Additive (M →* Multiplicative N) where
181+ toEquiv := AddMonoidHom.toMultiplicativeRight.trans Additive.ofMul
182+ map_add' _ _ := rfl
183+
184+ /-- `MonoidHom.toAdditiveLeft` as a `MulEquiv`. -/
185+ def MonoidHom.toAdditiveLeftMulEquiv [Monoid M] [AddCommMonoid N] :
186+ (M →* Multiplicative N) ≃* Multiplicative (Additive M →+ N) where
187+ toEquiv := MonoidHom.toAdditiveLeft.trans Multiplicative.ofAdd
188+ map_mul' _ _ := rfl
189+
190+ /-- `MonoidHom.toAdditiveRight` as a `MulEquiv`. -/
191+ def MonoidHom.toAdditiveRightMulEquiv [AddMonoid M] [CommMonoid N] :
192+ (Multiplicative M →* N) ≃* Multiplicative (M →+ Additive N) where
193+ toEquiv := MonoidHom.toAdditiveRight.trans Multiplicative.ofAdd
194+ map_mul' _ _ := rfl
0 commit comments