algebra.hom.equiv.type_tagsMathlib.Algebra.Group.Equiv.TypeTags

This file has been ported!

Changes since the initial port

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.

Changes in mathlib3

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(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)

Changes in mathlib3port

mathlib3
mathlib3port
Diff
@@ -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"
Diff
@@ -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"
 
Diff
@@ -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`.
 
Diff
@@ -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
 
Diff
@@ -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))
Diff
@@ -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:

Changes in mathlib4

mathlib3
mathlib4
chore: move to v4.6.0-rc1, merging adaptations from bump/v4.6.0 (#10176)

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>

Diff
@@ -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 }
feat(RepresentationTheory/GroupCohomology): Noether's generalization of Hilbert's Theorem 90 (#8599)
Diff
@@ -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)
refactor(Algebra/Hom): transpose 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

Diff
@@ -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"
chore: missing simps lemmas for 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.

Diff
@@ -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
chore: banish Type _ and Sort _ (#6499)

We remove all possible occurences of Type _ and Sort _ in favor of Type* and Sort*.

This has nice performance benefits.

Diff
@@ -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] :
chore: remove 'Ported by' headers (#6018)

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>

Diff
@@ -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
chore: script to replace headers with #align_import statements (#5979)

Open in Gitpod

Co-authored-by: Eric Wieser <wieser.eric@gmail.com> Co-authored-by: Scott Morrison <scott.morrison@gmail.com>

Diff
@@ -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`.
 -/
chore: golf (#1214)
Diff
@@ -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`. -/
chore: add source headers to ported theory files (#1094)

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

Diff
@@ -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

Dependencies 27

28 files ported (100.0%)
12741 lines ported (100.0%)

All dependencies are ported!