algebra.hom.equiv.type_tags
⟷
Mathlib.Algebra.Group.Equiv.TypeTags
The following section lists changes to this file in mathlib3 and mathlib4 that occured after the initial port. Most recent changes are shown first. Hovering over a commit will show all commits associated with the same mathlib3 commit.
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(last sync)
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -3,7 +3,7 @@ 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
-/
-import Algebra.Hom.Equiv.Basic
+import Algebra.Group.Equiv.Basic
import Algebra.Group.TypeTags
#align_import algebra.hom.equiv.type_tags from "leanprover-community/mathlib"@"448144f7ae193a8990cb7473c9e9a01990f64ac7"
mathlib commit https://github.com/leanprover-community/mathlib/commit/ce64cd319bb6b3e82f31c2d38e79080d377be451
@@ -3,8 +3,8 @@ 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
-/
-import Mathbin.Algebra.Hom.Equiv.Basic
-import Mathbin.Algebra.Group.TypeTags
+import Algebra.Hom.Equiv.Basic
+import Algebra.Group.TypeTags
#align_import algebra.hom.equiv.type_tags from "leanprover-community/mathlib"@"448144f7ae193a8990cb7473c9e9a01990f64ac7"
mathlib commit https://github.com/leanprover-community/mathlib/commit/8ea5598db6caeddde6cb734aa179cc2408dbd345
@@ -2,15 +2,12 @@
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
-
-! This file was ported from Lean 3 source module algebra.hom.equiv.type_tags
-! leanprover-community/mathlib commit 448144f7ae193a8990cb7473c9e9a01990f64ac7
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
-/
import Mathbin.Algebra.Hom.Equiv.Basic
import Mathbin.Algebra.Group.TypeTags
+#align_import algebra.hom.equiv.type_tags from "leanprover-community/mathlib"@"448144f7ae193a8990cb7473c9e9a01990f64ac7"
+
/-!
# Additive and multiplicative equivalences associated to `multiplicative` and `additive`.
mathlib commit https://github.com/leanprover-community/mathlib/commit/9fb8964792b4237dac6200193a0d533f1b3f7423
@@ -21,6 +21,7 @@ import Mathbin.Algebra.Group.TypeTags
variable {G H : Type _}
+#print AddEquiv.toMultiplicative /-
/-- Reinterpret `G ≃+ H` as `multiplicative G ≃* multiplicative H`. -/
def AddEquiv.toMultiplicative [AddZeroClass G] [AddZeroClass H] :
G ≃+ H ≃ (Multiplicative G ≃* Multiplicative H)
@@ -31,7 +32,9 @@ def AddEquiv.toMultiplicative [AddZeroClass G] [AddZeroClass H] :
left_inv x := by ext; rfl
right_inv x := by ext; rfl
#align add_equiv.to_multiplicative AddEquiv.toMultiplicative
+-/
+#print MulEquiv.toAdditive /-
/-- Reinterpret `G ≃* H` as `additive G ≃+ additive H`. -/
def MulEquiv.toAdditive [MulOneClass G] [MulOneClass H] : G ≃* H ≃ (Additive G ≃+ Additive H)
where
@@ -40,7 +43,9 @@ def MulEquiv.toAdditive [MulOneClass G] [MulOneClass H] : G ≃* H ≃ (Additive
left_inv x := by ext; rfl
right_inv x := by ext; rfl
#align mul_equiv.to_additive MulEquiv.toAdditive
+-/
+#print AddEquiv.toMultiplicative' /-
/-- Reinterpret `additive G ≃+ H` as `G ≃* multiplicative H`. -/
def AddEquiv.toMultiplicative' [MulOneClass G] [AddZeroClass H] :
Additive G ≃+ H ≃ (G ≃* Multiplicative H)
@@ -51,13 +56,17 @@ def AddEquiv.toMultiplicative' [MulOneClass G] [AddZeroClass H] :
left_inv x := by ext; rfl
right_inv x := by ext; rfl
#align add_equiv.to_multiplicative' AddEquiv.toMultiplicative'
+-/
+#print MulEquiv.toAdditive' /-
/-- Reinterpret `G ≃* multiplicative H` as `additive G ≃+ H` as. -/
def MulEquiv.toAdditive' [MulOneClass G] [AddZeroClass H] :
G ≃* Multiplicative H ≃ (Additive G ≃+ H) :=
AddEquiv.toMultiplicative'.symm
#align mul_equiv.to_additive' MulEquiv.toAdditive'
+-/
+#print AddEquiv.toMultiplicative'' /-
/-- Reinterpret `G ≃+ additive H` as `multiplicative G ≃* H`. -/
def AddEquiv.toMultiplicative'' [AddZeroClass G] [MulOneClass H] :
G ≃+ Additive H ≃ (Multiplicative G ≃* H)
@@ -68,26 +77,33 @@ def AddEquiv.toMultiplicative'' [AddZeroClass G] [MulOneClass H] :
left_inv x := by ext; rfl
right_inv x := by ext; rfl
#align add_equiv.to_multiplicative'' AddEquiv.toMultiplicative''
+-/
+#print MulEquiv.toAdditive'' /-
/-- Reinterpret `multiplicative G ≃* H` as `G ≃+ additive H` as. -/
def MulEquiv.toAdditive'' [AddZeroClass G] [MulOneClass H] :
Multiplicative G ≃* H ≃ (G ≃+ Additive H) :=
AddEquiv.toMultiplicative''.symm
#align mul_equiv.to_additive'' MulEquiv.toAdditive''
+-/
section
variable (G) (H)
+#print AddEquiv.additiveMultiplicative /-
/-- `additive (multiplicative G)` is just `G`. -/
def AddEquiv.additiveMultiplicative [AddZeroClass G] : Additive (Multiplicative G) ≃+ G :=
MulEquiv.toAdditive'' (MulEquiv.refl (Multiplicative G))
#align add_equiv.additive_multiplicative AddEquiv.additiveMultiplicative
+-/
+#print MulEquiv.multiplicativeAdditive /-
/-- `multiplicative (additive H)` is just `H`. -/
def MulEquiv.multiplicativeAdditive [MulOneClass H] : Multiplicative (Additive H) ≃* H :=
AddEquiv.toMultiplicative'' (AddEquiv.refl (Additive H))
#align mul_equiv.multiplicative_additive MulEquiv.multiplicativeAdditive
+-/
end
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -21,12 +21,6 @@ import Mathbin.Algebra.Group.TypeTags
variable {G H : Type _}
-/- warning: add_equiv.to_multiplicative -> AddEquiv.toMultiplicative is a dubious translation:
-lean 3 declaration is
- forall {G : Type.{u1}} {H : Type.{u2}} [_inst_1 : AddZeroClass.{u1} G] [_inst_2 : AddZeroClass.{u2} H], Equiv.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (AddEquiv.{u1, u2} G H (AddZeroClass.toHasAdd.{u1} G _inst_1) (AddZeroClass.toHasAdd.{u2} H _inst_2)) (MulEquiv.{u1, u2} (Multiplicative.{u1} G) (Multiplicative.{u2} H) (Multiplicative.hasMul.{u1} G (AddZeroClass.toHasAdd.{u1} G _inst_1)) (Multiplicative.hasMul.{u2} H (AddZeroClass.toHasAdd.{u2} H _inst_2)))
-but is expected to have type
- forall {G : Type.{u1}} {H : Type.{u2}} [_inst_1 : AddZeroClass.{u1} G] [_inst_2 : AddZeroClass.{u2} H], Equiv.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (AddEquiv.{u1, u2} G H (AddZeroClass.toAdd.{u1} G _inst_1) (AddZeroClass.toAdd.{u2} H _inst_2)) (MulEquiv.{u1, u2} (Multiplicative.{u1} G) (Multiplicative.{u2} H) (Multiplicative.mul.{u1} G (AddZeroClass.toAdd.{u1} G _inst_1)) (Multiplicative.mul.{u2} H (AddZeroClass.toAdd.{u2} H _inst_2)))
-Case conversion may be inaccurate. Consider using '#align add_equiv.to_multiplicative AddEquiv.toMultiplicativeₓ'. -/
/-- Reinterpret `G ≃+ H` as `multiplicative G ≃* multiplicative H`. -/
def AddEquiv.toMultiplicative [AddZeroClass G] [AddZeroClass H] :
G ≃+ H ≃ (Multiplicative G ≃* Multiplicative H)
@@ -38,12 +32,6 @@ def AddEquiv.toMultiplicative [AddZeroClass G] [AddZeroClass H] :
right_inv x := by ext; rfl
#align add_equiv.to_multiplicative AddEquiv.toMultiplicative
-/- warning: mul_equiv.to_additive -> MulEquiv.toAdditive is a dubious translation:
-lean 3 declaration is
- forall {G : Type.{u1}} {H : Type.{u2}} [_inst_1 : MulOneClass.{u1} G] [_inst_2 : MulOneClass.{u2} H], Equiv.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (MulEquiv.{u1, u2} G H (MulOneClass.toHasMul.{u1} G _inst_1) (MulOneClass.toHasMul.{u2} H _inst_2)) (AddEquiv.{u1, u2} (Additive.{u1} G) (Additive.{u2} H) (Additive.hasAdd.{u1} G (MulOneClass.toHasMul.{u1} G _inst_1)) (Additive.hasAdd.{u2} H (MulOneClass.toHasMul.{u2} H _inst_2)))
-but is expected to have type
- forall {G : Type.{u1}} {H : Type.{u2}} [_inst_1 : MulOneClass.{u1} G] [_inst_2 : MulOneClass.{u2} H], Equiv.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} G H (MulOneClass.toMul.{u1} G _inst_1) (MulOneClass.toMul.{u2} H _inst_2)) (AddEquiv.{u1, u2} (Additive.{u1} G) (Additive.{u2} H) (Additive.add.{u1} G (MulOneClass.toMul.{u1} G _inst_1)) (Additive.add.{u2} H (MulOneClass.toMul.{u2} H _inst_2)))
-Case conversion may be inaccurate. Consider using '#align mul_equiv.to_additive MulEquiv.toAdditiveₓ'. -/
/-- Reinterpret `G ≃* H` as `additive G ≃+ additive H`. -/
def MulEquiv.toAdditive [MulOneClass G] [MulOneClass H] : G ≃* H ≃ (Additive G ≃+ Additive H)
where
@@ -53,12 +41,6 @@ def MulEquiv.toAdditive [MulOneClass G] [MulOneClass H] : G ≃* H ≃ (Additive
right_inv x := by ext; rfl
#align mul_equiv.to_additive MulEquiv.toAdditive
-/- warning: add_equiv.to_multiplicative' -> AddEquiv.toMultiplicative' is a dubious translation:
-lean 3 declaration is
- forall {G : Type.{u1}} {H : Type.{u2}} [_inst_1 : MulOneClass.{u1} G] [_inst_2 : AddZeroClass.{u2} H], Equiv.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (AddEquiv.{u1, u2} (Additive.{u1} G) H (Additive.hasAdd.{u1} G (MulOneClass.toHasMul.{u1} G _inst_1)) (AddZeroClass.toHasAdd.{u2} H _inst_2)) (MulEquiv.{u1, u2} G (Multiplicative.{u2} H) (MulOneClass.toHasMul.{u1} G _inst_1) (Multiplicative.hasMul.{u2} H (AddZeroClass.toHasAdd.{u2} H _inst_2)))
-but is expected to have type
- forall {G : Type.{u1}} {H : Type.{u2}} [_inst_1 : MulOneClass.{u1} G] [_inst_2 : AddZeroClass.{u2} H], Equiv.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (AddEquiv.{u1, u2} (Additive.{u1} G) H (Additive.add.{u1} G (MulOneClass.toMul.{u1} G _inst_1)) (AddZeroClass.toAdd.{u2} H _inst_2)) (MulEquiv.{u1, u2} G (Multiplicative.{u2} H) (MulOneClass.toMul.{u1} G _inst_1) (Multiplicative.mul.{u2} H (AddZeroClass.toAdd.{u2} H _inst_2)))
-Case conversion may be inaccurate. Consider using '#align add_equiv.to_multiplicative' AddEquiv.toMultiplicative'ₓ'. -/
/-- Reinterpret `additive G ≃+ H` as `G ≃* multiplicative H`. -/
def AddEquiv.toMultiplicative' [MulOneClass G] [AddZeroClass H] :
Additive G ≃+ H ≃ (G ≃* Multiplicative H)
@@ -70,24 +52,12 @@ def AddEquiv.toMultiplicative' [MulOneClass G] [AddZeroClass H] :
right_inv x := by ext; rfl
#align add_equiv.to_multiplicative' AddEquiv.toMultiplicative'
-/- warning: mul_equiv.to_additive' -> MulEquiv.toAdditive' is a dubious translation:
-lean 3 declaration is
- forall {G : Type.{u1}} {H : Type.{u2}} [_inst_1 : MulOneClass.{u1} G] [_inst_2 : AddZeroClass.{u2} H], Equiv.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (MulEquiv.{u1, u2} G (Multiplicative.{u2} H) (MulOneClass.toHasMul.{u1} G _inst_1) (Multiplicative.hasMul.{u2} H (AddZeroClass.toHasAdd.{u2} H _inst_2))) (AddEquiv.{u1, u2} (Additive.{u1} G) H (Additive.hasAdd.{u1} G (MulOneClass.toHasMul.{u1} G _inst_1)) (AddZeroClass.toHasAdd.{u2} H _inst_2))
-but is expected to have type
- forall {G : Type.{u1}} {H : Type.{u2}} [_inst_1 : MulOneClass.{u1} G] [_inst_2 : AddZeroClass.{u2} H], Equiv.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} G (Multiplicative.{u2} H) (MulOneClass.toMul.{u1} G _inst_1) (Multiplicative.mul.{u2} H (AddZeroClass.toAdd.{u2} H _inst_2))) (AddEquiv.{u1, u2} (Additive.{u1} G) H (Additive.add.{u1} G (MulOneClass.toMul.{u1} G _inst_1)) (AddZeroClass.toAdd.{u2} H _inst_2))
-Case conversion may be inaccurate. Consider using '#align mul_equiv.to_additive' MulEquiv.toAdditive'ₓ'. -/
/-- Reinterpret `G ≃* multiplicative H` as `additive G ≃+ H` as. -/
def MulEquiv.toAdditive' [MulOneClass G] [AddZeroClass H] :
G ≃* Multiplicative H ≃ (Additive G ≃+ H) :=
AddEquiv.toMultiplicative'.symm
#align mul_equiv.to_additive' MulEquiv.toAdditive'
-/- warning: add_equiv.to_multiplicative'' -> AddEquiv.toMultiplicative'' is a dubious translation:
-lean 3 declaration is
- forall {G : Type.{u1}} {H : Type.{u2}} [_inst_1 : AddZeroClass.{u1} G] [_inst_2 : MulOneClass.{u2} H], Equiv.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (AddEquiv.{u1, u2} G (Additive.{u2} H) (AddZeroClass.toHasAdd.{u1} G _inst_1) (Additive.hasAdd.{u2} H (MulOneClass.toHasMul.{u2} H _inst_2))) (MulEquiv.{u1, u2} (Multiplicative.{u1} G) H (Multiplicative.hasMul.{u1} G (AddZeroClass.toHasAdd.{u1} G _inst_1)) (MulOneClass.toHasMul.{u2} H _inst_2))
-but is expected to have type
- forall {G : Type.{u1}} {H : Type.{u2}} [_inst_1 : AddZeroClass.{u1} G] [_inst_2 : MulOneClass.{u2} H], Equiv.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (AddEquiv.{u1, u2} G (Additive.{u2} H) (AddZeroClass.toAdd.{u1} G _inst_1) (Additive.add.{u2} H (MulOneClass.toMul.{u2} H _inst_2))) (MulEquiv.{u1, u2} (Multiplicative.{u1} G) H (Multiplicative.mul.{u1} G (AddZeroClass.toAdd.{u1} G _inst_1)) (MulOneClass.toMul.{u2} H _inst_2))
-Case conversion may be inaccurate. Consider using '#align add_equiv.to_multiplicative'' AddEquiv.toMultiplicative''ₓ'. -/
/-- Reinterpret `G ≃+ additive H` as `multiplicative G ≃* H`. -/
def AddEquiv.toMultiplicative'' [AddZeroClass G] [MulOneClass H] :
G ≃+ Additive H ≃ (Multiplicative G ≃* H)
@@ -99,12 +69,6 @@ def AddEquiv.toMultiplicative'' [AddZeroClass G] [MulOneClass H] :
right_inv x := by ext; rfl
#align add_equiv.to_multiplicative'' AddEquiv.toMultiplicative''
-/- warning: mul_equiv.to_additive'' -> MulEquiv.toAdditive'' is a dubious translation:
-lean 3 declaration is
- forall {G : Type.{u1}} {H : Type.{u2}} [_inst_1 : AddZeroClass.{u1} G] [_inst_2 : MulOneClass.{u2} H], Equiv.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (MulEquiv.{u1, u2} (Multiplicative.{u1} G) H (Multiplicative.hasMul.{u1} G (AddZeroClass.toHasAdd.{u1} G _inst_1)) (MulOneClass.toHasMul.{u2} H _inst_2)) (AddEquiv.{u1, u2} G (Additive.{u2} H) (AddZeroClass.toHasAdd.{u1} G _inst_1) (Additive.hasAdd.{u2} H (MulOneClass.toHasMul.{u2} H _inst_2)))
-but is expected to have type
- forall {G : Type.{u1}} {H : Type.{u2}} [_inst_1 : AddZeroClass.{u1} G] [_inst_2 : MulOneClass.{u2} H], Equiv.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (MulEquiv.{u1, u2} (Multiplicative.{u1} G) H (Multiplicative.mul.{u1} G (AddZeroClass.toAdd.{u1} G _inst_1)) (MulOneClass.toMul.{u2} H _inst_2)) (AddEquiv.{u1, u2} G (Additive.{u2} H) (AddZeroClass.toAdd.{u1} G _inst_1) (Additive.add.{u2} H (MulOneClass.toMul.{u2} H _inst_2)))
-Case conversion may be inaccurate. Consider using '#align mul_equiv.to_additive'' MulEquiv.toAdditive''ₓ'. -/
/-- Reinterpret `multiplicative G ≃* H` as `G ≃+ additive H` as. -/
def MulEquiv.toAdditive'' [AddZeroClass G] [MulOneClass H] :
Multiplicative G ≃* H ≃ (G ≃+ Additive H) :=
@@ -115,23 +79,11 @@ section
variable (G) (H)
-/- warning: add_equiv.additive_multiplicative -> AddEquiv.additiveMultiplicative is a dubious translation:
-lean 3 declaration is
- forall (G : Type.{u1}) [_inst_1 : AddZeroClass.{u1} G], AddEquiv.{u1, u1} (Additive.{u1} (Multiplicative.{u1} G)) G (Additive.hasAdd.{u1} (Multiplicative.{u1} G) (Multiplicative.hasMul.{u1} G (AddZeroClass.toHasAdd.{u1} G _inst_1))) (AddZeroClass.toHasAdd.{u1} G _inst_1)
-but is expected to have type
- forall (G : Type.{u1}) [_inst_1 : AddZeroClass.{u1} G], AddEquiv.{u1, u1} (Additive.{u1} (Multiplicative.{u1} G)) G (Additive.add.{u1} (Multiplicative.{u1} G) (Multiplicative.mul.{u1} G (AddZeroClass.toAdd.{u1} G _inst_1))) (AddZeroClass.toAdd.{u1} G _inst_1)
-Case conversion may be inaccurate. Consider using '#align add_equiv.additive_multiplicative AddEquiv.additiveMultiplicativeₓ'. -/
/-- `additive (multiplicative G)` is just `G`. -/
def AddEquiv.additiveMultiplicative [AddZeroClass G] : Additive (Multiplicative G) ≃+ G :=
MulEquiv.toAdditive'' (MulEquiv.refl (Multiplicative G))
#align add_equiv.additive_multiplicative AddEquiv.additiveMultiplicative
-/- warning: mul_equiv.multiplicative_additive -> MulEquiv.multiplicativeAdditive is a dubious translation:
-lean 3 declaration is
- forall (H : Type.{u1}) [_inst_1 : MulOneClass.{u1} H], MulEquiv.{u1, u1} (Multiplicative.{u1} (Additive.{u1} H)) H (Multiplicative.hasMul.{u1} (Additive.{u1} H) (Additive.hasAdd.{u1} H (MulOneClass.toHasMul.{u1} H _inst_1))) (MulOneClass.toHasMul.{u1} H _inst_1)
-but is expected to have type
- forall (H : Type.{u1}) [_inst_1 : MulOneClass.{u1} H], MulEquiv.{u1, u1} (Multiplicative.{u1} (Additive.{u1} H)) H (Multiplicative.mul.{u1} (Additive.{u1} H) (Additive.add.{u1} H (MulOneClass.toMul.{u1} H _inst_1))) (MulOneClass.toMul.{u1} H _inst_1)
-Case conversion may be inaccurate. Consider using '#align mul_equiv.multiplicative_additive MulEquiv.multiplicativeAdditiveₓ'. -/
/-- `multiplicative (additive H)` is just `H`. -/
def MulEquiv.multiplicativeAdditive [MulOneClass H] : Multiplicative (Additive H) ≃* H :=
AddEquiv.toMultiplicative'' (AddEquiv.refl (Additive H))
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -34,12 +34,8 @@ def AddEquiv.toMultiplicative [AddZeroClass G] [AddZeroClass H] :
toFun f :=
⟨f.toAddMonoidHom.toMultiplicative, f.symm.toAddMonoidHom.toMultiplicative, f.3, f.4, f.5⟩
invFun f := ⟨f.toMonoidHom, f.symm.toMonoidHom, f.3, f.4, f.5⟩
- left_inv x := by
- ext
- rfl
- right_inv x := by
- ext
- rfl
+ left_inv x := by ext; rfl
+ right_inv x := by ext; rfl
#align add_equiv.to_multiplicative AddEquiv.toMultiplicative
/- warning: mul_equiv.to_additive -> MulEquiv.toAdditive is a dubious translation:
@@ -53,12 +49,8 @@ def MulEquiv.toAdditive [MulOneClass G] [MulOneClass H] : G ≃* H ≃ (Additive
where
toFun f := ⟨f.toMonoidHom.toAdditive, f.symm.toMonoidHom.toAdditive, f.3, f.4, f.5⟩
invFun f := ⟨f.toAddMonoidHom, f.symm.toAddMonoidHom, f.3, f.4, f.5⟩
- left_inv x := by
- ext
- rfl
- right_inv x := by
- ext
- rfl
+ left_inv x := by ext; rfl
+ right_inv x := by ext; rfl
#align mul_equiv.to_additive MulEquiv.toAdditive
/- warning: add_equiv.to_multiplicative' -> AddEquiv.toMultiplicative' is a dubious translation:
@@ -74,12 +66,8 @@ def AddEquiv.toMultiplicative' [MulOneClass G] [AddZeroClass H] :
toFun f :=
⟨f.toAddMonoidHom.toMultiplicative', f.symm.toAddMonoidHom.toMultiplicative'', f.3, f.4, f.5⟩
invFun f := ⟨f.toMonoidHom, f.symm.toMonoidHom, f.3, f.4, f.5⟩
- left_inv x := by
- ext
- rfl
- right_inv x := by
- ext
- rfl
+ left_inv x := by ext; rfl
+ right_inv x := by ext; rfl
#align add_equiv.to_multiplicative' AddEquiv.toMultiplicative'
/- warning: mul_equiv.to_additive' -> MulEquiv.toAdditive' is a dubious translation:
@@ -107,12 +95,8 @@ def AddEquiv.toMultiplicative'' [AddZeroClass G] [MulOneClass H] :
toFun f :=
⟨f.toAddMonoidHom.toMultiplicative'', f.symm.toAddMonoidHom.toMultiplicative', f.3, f.4, f.5⟩
invFun f := ⟨f.toMonoidHom, f.symm.toMonoidHom, f.3, f.4, f.5⟩
- left_inv x := by
- ext
- rfl
- right_inv x := by
- ext
- rfl
+ left_inv x := by ext; rfl
+ right_inv x := by ext; rfl
#align add_equiv.to_multiplicative'' AddEquiv.toMultiplicative''
/- warning: mul_equiv.to_additive'' -> MulEquiv.toAdditive'' is a dubious translation:
mathlib commit https://github.com/leanprover-community/mathlib/commit/bd9851ca476957ea4549eb19b40e7b5ade9428cc
Co-authored-by: Scott Morrison <scott.morrison@gmail.com> Co-authored-by: Eric Wieser <wieser.eric@gmail.com> Co-authored-by: Joachim Breitner <mail@joachim-breitner.de>
@@ -109,14 +109,14 @@ abbrev MulEquiv.toAdditive'' [AddZeroClass G] [MulOneClass H] :
/-- Multiplicative equivalence between multiplicative endomorphisms of a `MulOneClass` `M`
and additive endomorphisms of `Additive M`. -/
-@[simps] def monoidEndToAdditive (M : Type*) [MulOneClass M] :
+@[simps!] def monoidEndToAdditive (M : Type*) [MulOneClass M] :
Monoid.End M ≃* AddMonoid.End (Additive M) :=
{ MonoidHom.toAdditive with
map_mul' := fun _ _ => rfl }
/-- Multiplicative equivalence between additive endomorphisms of an `AddZeroClass` `A`
and multiplicative endomorphisms of `Multiplicative A`. -/
-@[simps] def addMonoidEndToMultiplicative (A : Type*) [AddZeroClass A] :
+@[simps!] def addMonoidEndToMultiplicative (A : Type*) [AddZeroClass A] :
AddMonoid.End A ≃* Monoid.End (Multiplicative A) :=
{ AddMonoidHom.toMultiplicative with
map_mul' := fun _ _ => rfl }
@@ -107,6 +107,20 @@ abbrev MulEquiv.toAdditive'' [AddZeroClass G] [MulOneClass H] :
AddEquiv.toMultiplicative''.symm
#align mul_equiv.to_additive'' MulEquiv.toAdditive''
+/-- Multiplicative equivalence between multiplicative endomorphisms of a `MulOneClass` `M`
+and additive endomorphisms of `Additive M`. -/
+@[simps] def monoidEndToAdditive (M : Type*) [MulOneClass M] :
+ Monoid.End M ≃* AddMonoid.End (Additive M) :=
+ { MonoidHom.toAdditive with
+ map_mul' := fun _ _ => rfl }
+
+/-- Multiplicative equivalence between additive endomorphisms of an `AddZeroClass` `A`
+and multiplicative endomorphisms of `Multiplicative A`. -/
+@[simps] def addMonoidEndToMultiplicative (A : Type*) [AddZeroClass A] :
+ AddMonoid.End A ≃* Monoid.End (Multiplicative A) :=
+ { AddMonoidHom.toMultiplicative with
+ map_mul' := fun _ _ => rfl }
+
section
variable (G) (H)
Hom
and file name (#8095)
I believe the file defining a type of morphisms belongs alongside the file defining the structure this morphism works on. So I would like to reorganize the files in the Mathlib.Algebra.Hom
folder so that e.g. Mathlib.Algebra.Hom.Ring
becomes Mathlib.Algebra.Ring.Hom
and Mathlib.Algebra.Hom.NonUnitalAlg
becomes Mathlib.Algebra.Algebra.NonUnitalHom
.
While fixing the imports I went ahead and sorted them for good luck.
The full list of changes is: renamed: Mathlib/Algebra/Hom/NonUnitalAlg.lean -> Mathlib/Algebra/Algebra/NonUnitalHom.lean renamed: Mathlib/Algebra/Hom/Aut.lean -> Mathlib/Algebra/Group/Aut.lean renamed: Mathlib/Algebra/Hom/Commute.lean -> Mathlib/Algebra/Group/Commute/Hom.lean renamed: Mathlib/Algebra/Hom/Embedding.lean -> Mathlib/Algebra/Group/Embedding.lean renamed: Mathlib/Algebra/Hom/Equiv/Basic.lean -> Mathlib/Algebra/Group/Equiv/Basic.lean renamed: Mathlib/Algebra/Hom/Equiv/TypeTags.lean -> Mathlib/Algebra/Group/Equiv/TypeTags.lean renamed: Mathlib/Algebra/Hom/Equiv/Units/Basic.lean -> Mathlib/Algebra/Group/Units/Equiv.lean renamed: Mathlib/Algebra/Hom/Equiv/Units/GroupWithZero.lean -> Mathlib/Algebra/GroupWithZero/Units/Equiv.lean renamed: Mathlib/Algebra/Hom/Freiman.lean -> Mathlib/Algebra/Group/Freiman.lean renamed: Mathlib/Algebra/Hom/Group/Basic.lean -> Mathlib/Algebra/Group/Hom/Basic.lean renamed: Mathlib/Algebra/Hom/Group/Defs.lean -> Mathlib/Algebra/Group/Hom/Defs.lean renamed: Mathlib/Algebra/Hom/GroupAction.lean -> Mathlib/GroupTheory/GroupAction/Hom.lean renamed: Mathlib/Algebra/Hom/GroupInstances.lean -> Mathlib/Algebra/Group/Hom/Instances.lean renamed: Mathlib/Algebra/Hom/Iterate.lean -> Mathlib/Algebra/GroupPower/IterateHom.lean renamed: Mathlib/Algebra/Hom/Centroid.lean -> Mathlib/Algebra/Ring/CentroidHom.lean renamed: Mathlib/Algebra/Hom/Ring/Basic.lean -> Mathlib/Algebra/Ring/Hom/Basic.lean renamed: Mathlib/Algebra/Hom/Ring/Defs.lean -> Mathlib/Algebra/Ring/Hom/Defs.lean renamed: Mathlib/Algebra/Hom/Units.lean -> Mathlib/Algebra/Group/Units/Hom.lean
Zulip thread: https://leanprover.zulipchat.com/#narrow/stream/287929-mathlib4/topic/Reorganizing.20.60Mathlib.2EAlgebra.2EHom.60
@@ -3,7 +3,7 @@ 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
-/
-import Mathlib.Algebra.Hom.Equiv.Basic
+import Mathlib.Algebra.Group.Equiv.Basic
import Mathlib.Algebra.Group.TypeTags
#align_import algebra.hom.equiv.type_tags from "leanprover-community/mathlib"@"3342d1b2178381196f818146ff79bc0e7ccd9e2d"
Multiplicative
defs (#7016)
This also fixes the definitions to not include any defeq abuse, which is required in order to not produce a bad simp lemma.
@@ -16,56 +16,93 @@ import Mathlib.Algebra.Group.TypeTags
variable {G H : Type*}
/-- Reinterpret `G ≃+ H` as `Multiplicative G ≃* Multiplicative H`. -/
+@[simps]
def AddEquiv.toMultiplicative [AddZeroClass G] [AddZeroClass H] :
G ≃+ H ≃ (Multiplicative G ≃* Multiplicative H) where
toFun f :=
- ⟨⟨AddMonoidHom.toMultiplicative f.toAddMonoidHom,
- AddMonoidHom.toMultiplicative f.symm.toAddMonoidHom, f.1.3, f.1.4⟩, f.2⟩
- invFun f := ⟨⟨f.toMonoidHom, f.symm.toMonoidHom, f.1.3, f.1.4⟩, f.2⟩
+ { toFun := AddMonoidHom.toMultiplicative f.toAddMonoidHom
+ invFun := AddMonoidHom.toMultiplicative f.symm.toAddMonoidHom
+ left_inv := f.left_inv
+ right_inv := f.right_inv
+ map_mul' := f.map_add }
+ invFun f :=
+ { toFun := AddMonoidHom.toMultiplicative.symm f.toMonoidHom
+ invFun := AddMonoidHom.toMultiplicative.symm f.symm.toMonoidHom
+ left_inv := f.left_inv
+ right_inv := f.right_inv
+ map_add' := f.map_mul }
left_inv x := by ext; rfl
right_inv x := by ext; rfl
#align add_equiv.to_multiplicative AddEquiv.toMultiplicative
/-- Reinterpret `G ≃* H` as `Additive G ≃+ Additive H`. -/
+@[simps]
def MulEquiv.toAdditive [MulOneClass G] [MulOneClass H] :
G ≃* H ≃ (Additive G ≃+ Additive H) where
- toFun f := ⟨⟨MonoidHom.toAdditive f.toMonoidHom,
- MonoidHom.toAdditive f.symm.toMonoidHom, f.1.3, f.1.4⟩, f.2⟩
- invFun f := ⟨⟨f.toAddMonoidHom, f.symm.toAddMonoidHom, f.1.3, f.1.4⟩, f.2⟩
+ toFun f :=
+ { toFun := MonoidHom.toAdditive f.toMonoidHom
+ invFun := MonoidHom.toAdditive f.symm.toMonoidHom
+ left_inv := f.left_inv
+ right_inv := f.right_inv
+ map_add' := f.map_mul }
+ invFun f :=
+ { toFun := MonoidHom.toAdditive.symm f.toAddMonoidHom
+ invFun := MonoidHom.toAdditive.symm f.symm.toAddMonoidHom
+ left_inv := f.left_inv
+ right_inv := f.right_inv
+ map_mul' := f.map_add }
left_inv x := by ext; rfl
right_inv x := by ext; rfl
#align mul_equiv.to_additive MulEquiv.toAdditive
/-- Reinterpret `Additive G ≃+ H` as `G ≃* Multiplicative H`. -/
+@[simps]
def AddEquiv.toMultiplicative' [MulOneClass G] [AddZeroClass H] :
Additive G ≃+ H ≃ (G ≃* Multiplicative H) where
toFun f :=
- ⟨⟨AddMonoidHom.toMultiplicative' f.toAddMonoidHom,
- AddMonoidHom.toMultiplicative'' f.symm.toAddMonoidHom, f.1.3, f.1.4⟩, f.2⟩
- invFun f := ⟨⟨f.toMonoidHom, f.symm.toMonoidHom, f.1.3, f.1.4⟩, f.2⟩
+ { toFun := AddMonoidHom.toMultiplicative' f.toAddMonoidHom
+ invFun := AddMonoidHom.toMultiplicative'' f.symm.toAddMonoidHom
+ left_inv := f.left_inv
+ right_inv := f.right_inv
+ map_mul' := f.map_add }
+ invFun f :=
+ { toFun := AddMonoidHom.toMultiplicative'.symm f.toMonoidHom
+ invFun := AddMonoidHom.toMultiplicative''.symm f.symm.toMonoidHom
+ left_inv := f.left_inv
+ right_inv := f.right_inv
+ map_add' := f.map_mul }
left_inv x := by ext; rfl
right_inv x := by ext; rfl
#align add_equiv.to_multiplicative' AddEquiv.toMultiplicative'
/-- Reinterpret `G ≃* Multiplicative H` as `Additive G ≃+ H` as. -/
-def MulEquiv.toAdditive' [MulOneClass G] [AddZeroClass H] :
+abbrev MulEquiv.toAdditive' [MulOneClass G] [AddZeroClass H] :
G ≃* Multiplicative H ≃ (Additive G ≃+ H) :=
AddEquiv.toMultiplicative'.symm
#align mul_equiv.to_additive' MulEquiv.toAdditive'
/-- Reinterpret `G ≃+ Additive H` as `Multiplicative G ≃* H`. -/
+@[simps]
def AddEquiv.toMultiplicative'' [AddZeroClass G] [MulOneClass H] :
G ≃+ Additive H ≃ (Multiplicative G ≃* H) where
toFun f :=
- ⟨⟨AddMonoidHom.toMultiplicative'' f.toAddMonoidHom,
- AddMonoidHom.toMultiplicative' f.symm.toAddMonoidHom, f.1.3, f.1.4⟩, f.2⟩
- invFun f := ⟨⟨f.toMonoidHom, f.symm.toMonoidHom, f.1.3, f.1.4⟩, f.2⟩
+ { toFun := AddMonoidHom.toMultiplicative'' f.toAddMonoidHom
+ invFun := AddMonoidHom.toMultiplicative' f.symm.toAddMonoidHom
+ left_inv := f.left_inv
+ right_inv := f.right_inv
+ map_mul' := f.map_add }
+ invFun f :=
+ { toFun := AddMonoidHom.toMultiplicative''.symm f.toMonoidHom
+ invFun := AddMonoidHom.toMultiplicative'.symm f.symm.toMonoidHom
+ left_inv := f.left_inv
+ right_inv := f.right_inv
+ map_add' := f.map_mul }
left_inv x := by ext; rfl
right_inv x := by ext; rfl
#align add_equiv.to_multiplicative'' AddEquiv.toMultiplicative''
/-- Reinterpret `Multiplicative G ≃* H` as `G ≃+ Additive H` as. -/
-def MulEquiv.toAdditive'' [AddZeroClass G] [MulOneClass H] :
+abbrev MulEquiv.toAdditive'' [AddZeroClass G] [MulOneClass H] :
Multiplicative G ≃* H ≃ (G ≃+ Additive H) :=
AddEquiv.toMultiplicative''.symm
#align mul_equiv.to_additive'' MulEquiv.toAdditive''
@@ -75,11 +112,13 @@ section
variable (G) (H)
/-- `Additive (Multiplicative G)` is just `G`. -/
+@[simps!]
def AddEquiv.additiveMultiplicative [AddZeroClass G] : Additive (Multiplicative G) ≃+ G :=
MulEquiv.toAdditive' (MulEquiv.refl (Multiplicative G))
#align add_equiv.additive_multiplicative AddEquiv.additiveMultiplicative
/-- `Multiplicative (Additive H)` is just `H`. -/
+@[simps!]
def MulEquiv.multiplicativeAdditive [MulOneClass H] : Multiplicative (Additive H) ≃* H :=
AddEquiv.toMultiplicative'' (AddEquiv.refl (Additive H))
#align mul_equiv.multiplicative_additive MulEquiv.multiplicativeAdditive
Type _
and Sort _
(#6499)
We remove all possible occurences of Type _
and Sort _
in favor of Type*
and Sort*
.
This has nice performance benefits.
@@ -13,7 +13,7 @@ import Mathlib.Algebra.Group.TypeTags
-/
-variable {G H : Type _}
+variable {G H : Type*}
/-- Reinterpret `G ≃+ H` as `Multiplicative G ≃* Multiplicative H`. -/
def AddEquiv.toMultiplicative [AddZeroClass G] [AddZeroClass H] :
Briefly during the port we were adding "Ported by" headers, but only ~60 / 3000 files ended up with such a header.
I propose deleting them.
We could consider adding these uniformly via a script, as part of the great history rewrite...?
Co-authored-by: Scott Morrison <scott.morrison@gmail.com>
@@ -2,7 +2,6 @@
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
-/
import Mathlib.Algebra.Hom.Equiv.Basic
import Mathlib.Algebra.Group.TypeTags
@@ -3,15 +3,12 @@ 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
+#align_import algebra.hom.equiv.type_tags from "leanprover-community/mathlib"@"3342d1b2178381196f818146ff79bc0e7ccd9e2d"
+
/-!
# Additive and multiplicative equivalences associated to `Multiplicative` and `Additive`.
-/
@@ -80,7 +80,7 @@ variable (G) (H)
/-- `Additive (Multiplicative G)` is just `G`. -/
def AddEquiv.additiveMultiplicative [AddZeroClass G] : Additive (Multiplicative G) ≃+ G :=
- MulEquiv.toAdditive'' (MulEquiv.refl (Multiplicative G))
+ MulEquiv.toAdditive' (MulEquiv.refl (Multiplicative G))
#align add_equiv.additive_multiplicative AddEquiv.additiveMultiplicative
/-- `Multiplicative (Additive H)` is just `H`. -/
The script used to do this is included. The yaml file was obtained from https://raw.githubusercontent.com/wiki/leanprover-community/mathlib/mathlib4-port-status.md
@@ -3,6 +3,11 @@ 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
All dependencies are ported!