algebra.group.type_tags
⟷
Mathlib.Algebra.Group.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)
(last sync)
is_left_cancel_mul
etc (#17884)
The Lean 4 version is here: leanprover-community/mathlib4#945.
@@ -124,21 +124,35 @@ instance [add_comm_semigroup α] : comm_semigroup (multiplicative α) :=
{ mul_comm := @add_comm _ _,
..multiplicative.semigroup }
+instance [has_mul α] [is_left_cancel_mul α] : is_left_cancel_add (additive α) :=
+{ add_left_cancel := @mul_left_cancel α _ _ }
+
+instance [has_add α] [is_left_cancel_add α] : is_left_cancel_mul (multiplicative α) :=
+{ mul_left_cancel := @add_left_cancel α _ _ }
+
+instance [has_mul α] [is_right_cancel_mul α] : is_right_cancel_add (additive α) :=
+{ add_right_cancel := @mul_right_cancel α _ _ }
+
+instance [has_add α] [is_right_cancel_add α] : is_right_cancel_mul (multiplicative α) :=
+{ mul_right_cancel := @add_right_cancel α _ _ }
+
+instance [has_mul α] [is_cancel_mul α] : is_cancel_add (additive α) :=
+{ ..additive.is_left_cancel_add, ..additive.is_right_cancel_add }
+
+instance [has_add α] [is_cancel_add α] : is_cancel_mul (multiplicative α) :=
+{ ..multiplicative.is_left_cancel_mul, ..multiplicative.is_right_cancel_mul }
+
instance [left_cancel_semigroup α] : add_left_cancel_semigroup (additive α) :=
-{ add_left_cancel := @mul_left_cancel _ _,
- ..additive.add_semigroup }
+{ ..additive.add_semigroup, ..additive.is_left_cancel_add }
instance [add_left_cancel_semigroup α] : left_cancel_semigroup (multiplicative α) :=
-{ mul_left_cancel := @add_left_cancel _ _,
- ..multiplicative.semigroup }
+{ ..multiplicative.semigroup, ..multiplicative.is_left_cancel_mul }
instance [right_cancel_semigroup α] : add_right_cancel_semigroup (additive α) :=
-{ add_right_cancel := @mul_right_cancel _ _,
- ..additive.add_semigroup }
+{ ..additive.add_semigroup, ..additive.is_right_cancel_add }
instance [add_right_cancel_semigroup α] : right_cancel_semigroup (multiplicative α) :=
-{ mul_right_cancel := @add_right_cancel _ _,
- ..multiplicative.semigroup }
+{ ..multiplicative.semigroup, ..multiplicative.is_right_cancel_mul }
instance [has_one α] : has_zero (additive α) := ⟨additive.of_mul 1⟩
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(first ported)
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -3,7 +3,7 @@ Copyright (c) 2018 Mario Carneiro. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Mario Carneiro
-/
-import Algebra.Hom.Group
+import Algebra.Group.Hom.Defs
import Logic.Equiv.Defs
import Data.Finite.Defs
mathlib commit https://github.com/leanprover-community/mathlib/commit/ce64cd319bb6b3e82f31c2d38e79080d377be451
@@ -3,9 +3,9 @@ Copyright (c) 2018 Mario Carneiro. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Mario Carneiro
-/
-import Mathbin.Algebra.Hom.Group
-import Mathbin.Logic.Equiv.Defs
-import Mathbin.Data.Finite.Defs
+import Algebra.Hom.Group
+import Logic.Equiv.Defs
+import Data.Finite.Defs
#align_import algebra.group.type_tags from "leanprover-community/mathlib"@"448144f7ae193a8990cb7473c9e9a01990f64ac7"
mathlib commit https://github.com/leanprover-community/mathlib/commit/32a7e535287f9c73f2e4d2aef306a39190f0b504
@@ -216,13 +216,13 @@ instance [Mul α] [IsLeftCancelMul α] : IsLeftCancelAdd (Additive α)
where add_left_cancel := @mul_left_cancel α _ _
instance [Add α] [IsLeftCancelAdd α] : IsLeftCancelMul (Multiplicative α)
- where mul_left_cancel := @add_left_cancel α _ _
+ where hMul_left_cancel := @add_left_cancel α _ _
instance [Mul α] [IsRightCancelMul α] : IsRightCancelAdd (Additive α)
where add_right_cancel := @mul_right_cancel α _ _
instance [Add α] [IsRightCancelAdd α] : IsRightCancelMul (Multiplicative α)
- where mul_right_cancel := @add_right_cancel α _ _
+ where hMul_right_cancel := @add_right_cancel α _ _
instance [Mul α] [IsCancelMul α] : IsCancelAdd (Additive α) :=
{ Additive.isLeftCancelAdd, Additive.isRightCancelAdd with }
@@ -451,7 +451,7 @@ instance [DivInvMonoid α] : SubNegMonoid (Additive α) :=
instance [SubNegMonoid α] : DivInvMonoid (Multiplicative α) :=
{ Multiplicative.hasInv, Multiplicative.div,
Multiplicative.monoid with
- div_eq_mul_inv := @sub_eq_add_neg α _
+ div_eq_hMul_inv := @sub_eq_add_neg α _
zpow := @SubNegMonoid.zsmul α _
zpow_zero' := SubNegMonoid.zsmul_zero'
zpow_succ' := SubNegMonoid.zsmul_succ'
@@ -467,7 +467,7 @@ instance [SubtractionMonoid α] : DivisionMonoid (Multiplicative α) :=
{ Multiplicative.divInvMonoid,
Multiplicative.hasInvolutiveInv with
mul_inv_rev := @neg_add_rev _ _
- inv_eq_of_mul := @neg_eq_of_add_eq_zero_right _ _ }
+ inv_eq_of_hMul := @neg_eq_of_add_eq_zero_right _ _ }
instance [DivisionCommMonoid α] : SubtractionCommMonoid (Additive α) :=
{ Additive.subtractionMonoid, Additive.addCommSemigroup with }
@@ -479,7 +479,7 @@ instance [Group α] : AddGroup (Additive α) :=
{ Additive.subNegMonoid with add_left_neg := @mul_left_inv α _ }
instance [AddGroup α] : Group (Multiplicative α) :=
- { Multiplicative.divInvMonoid with mul_left_inv := @add_left_neg α _ }
+ { Multiplicative.divInvMonoid with hMul_left_inv := @add_left_neg α _ }
instance [CommGroup α] : AddCommGroup (Additive α) :=
{ Additive.addGroup, Additive.addCommMonoid with }
mathlib commit https://github.com/leanprover-community/mathlib/commit/8ea5598db6caeddde6cb734aa179cc2408dbd345
@@ -2,16 +2,13 @@
Copyright (c) 2018 Mario Carneiro. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Mario Carneiro
-
-! This file was ported from Lean 3 source module algebra.group.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.Group
import Mathbin.Logic.Equiv.Defs
import Mathbin.Data.Finite.Defs
+#align_import algebra.group.type_tags from "leanprover-community/mathlib"@"448144f7ae193a8990cb7473c9e9a01990f64ac7"
+
/-!
# Type tags that turn additive structures into multiplicative, and vice versa
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -502,12 +502,8 @@ def AddMonoidHom.toMultiplicative [AddZeroClass α] [AddZeroClass β] :
where
toFun f := ⟨fun a => ofAdd (f a.toAdd), f.2, f.3⟩
invFun f := ⟨fun a => (f (ofAdd a)).toAdd, f.2, f.3⟩
- 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_monoid_hom.to_multiplicative AddMonoidHom.toMultiplicative
-/
@@ -518,12 +514,8 @@ def MonoidHom.toAdditive [MulOneClass α] [MulOneClass β] : (α →* β) ≃ (A
where
toFun f := ⟨fun a => ofMul (f a.toMul), f.2, f.3⟩
invFun f := ⟨fun a => (f (ofMul a)).toMul, f.2, f.3⟩
- 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 monoid_hom.to_additive MonoidHom.toAdditive
-/
@@ -535,12 +527,8 @@ def AddMonoidHom.toMultiplicative' [MulOneClass α] [AddZeroClass β] :
where
toFun f := ⟨fun a => ofAdd (f (ofMul a)), f.2, f.3⟩
invFun f := ⟨fun a => (f a.toMul).toAdd, f.2, f.3⟩
- 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_monoid_hom.to_multiplicative' AddMonoidHom.toMultiplicative'
-/
@@ -561,12 +549,8 @@ def AddMonoidHom.toMultiplicative'' [AddZeroClass α] [MulOneClass β] :
where
toFun f := ⟨fun a => (f a.toAdd).toMul, f.2, f.3⟩
invFun f := ⟨fun a => ofMul (f (ofAdd a)), f.2, f.3⟩
- 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_monoid_hom.to_multiplicative'' AddMonoidHom.toMultiplicative''
-/
mathlib commit https://github.com/leanprover-community/mathlib/commit/bd9851ca476957ea4549eb19b40e7b5ade9428cc
@@ -67,6 +67,12 @@ theorem toMul_symm_eq : (@toMul α).symm = ofMul :=
rfl
#align additive.to_mul_symm_eq Additive.toMul_symm_eq
+@[simp]
+protected lemma «forall» {p : Additive α → Prop} : (∀ a, p a) ↔ ∀ a, p (ofMul a) := Iff.rfl
+
+@[simp]
+protected lemma «exists» {p : Additive α → Prop} : (∃ a, p a) ↔ ∃ a, p (ofMul a) := Iff.rfl
+
end Additive
namespace Multiplicative
@@ -90,6 +96,12 @@ theorem toAdd_symm_eq : (@toAdd α).symm = ofAdd :=
rfl
#align multiplicative.to_add_symm_eq Multiplicative.toAdd_symm_eq
+@[simp]
+protected lemma «forall» {p : Multiplicative α → Prop} : (∀ a, p a) ↔ ∀ a, p (ofAdd a) := Iff.rfl
+
+@[simp]
+protected lemma «exists» {p : Multiplicative α → Prop} : (∃ a, p a) ↔ ∃ a, p (ofAdd a) := Iff.rfl
+
end Multiplicative
open Additive (ofMul toMul)
@@ -458,6 +470,10 @@ def AddMonoidHom.toMultiplicative [AddZeroClass α] [AddZeroClass β] :
#align add_monoid_hom.to_multiplicative_symm_apply_apply AddMonoidHom.toMultiplicative_symm_apply_apply
#align add_monoid_hom.to_multiplicative_apply_apply AddMonoidHom.toMultiplicative_apply_apply
+@[simp, norm_cast]
+lemma AddMonoidHom.coe_toMultiplicative [AddZeroClass α] [AddZeroClass β] (f : α →+ β) :
+ ⇑(toMultiplicative f) = ofAdd ∘ f ∘ toAdd := rfl
+
/-- Reinterpret `α →* β` as `Additive α →+ Additive β`. -/
@[simps]
def MonoidHom.toAdditive [MulOneClass α] [MulOneClass β] :
@@ -478,6 +494,10 @@ def MonoidHom.toAdditive [MulOneClass α] [MulOneClass β] :
#align monoid_hom.to_additive_symm_apply_apply MonoidHom.toAdditive_symm_apply_apply
#align monoid_hom.to_additive_apply_apply MonoidHom.toAdditive_apply_apply
+@[simp, norm_cast]
+lemma MonoidHom.coe_toMultiplicative [MulOneClass α] [MulOneClass β] (f : α →* β) :
+ ⇑(toAdditive f) = ofMul ∘ f ∘ toMul := rfl
+
/-- Reinterpret `Additive α →+ β` as `α →* Multiplicative β`. -/
@[simps]
def AddMonoidHom.toMultiplicative' [MulOneClass α] [AddZeroClass β] :
@@ -498,6 +518,10 @@ def AddMonoidHom.toMultiplicative' [MulOneClass α] [AddZeroClass β] :
#align add_monoid_hom.to_multiplicative'_apply_apply AddMonoidHom.toMultiplicative'_apply_apply
#align add_monoid_hom.to_multiplicative'_symm_apply_apply AddMonoidHom.toMultiplicative'_symm_apply_apply
+@[simp, norm_cast]
+lemma AddMonoidHom.coe_toMultiplicative' [MulOneClass α] [AddZeroClass β] (f : Additive α →+ β) :
+ ⇑(toMultiplicative' f) = ofAdd ∘ f ∘ ofMul := rfl
+
/-- Reinterpret `α →* Multiplicative β` as `Additive α →+ β`. -/
@[simps!]
def MonoidHom.toAdditive' [MulOneClass α] [AddZeroClass β] :
@@ -507,6 +531,10 @@ def MonoidHom.toAdditive' [MulOneClass α] [AddZeroClass β] :
#align monoid_hom.to_additive'_symm_apply_apply MonoidHom.toAdditive'_symm_apply_apply
#align monoid_hom.to_additive'_apply_apply MonoidHom.toAdditive'_apply_apply
+@[simp, norm_cast]
+lemma MonoidHom.coe_toAdditive' [MulOneClass α] [AddZeroClass β] (f : α →* Multiplicative β) :
+ ⇑(toAdditive' f) = toAdd ∘ f ∘ toMul := rfl
+
/-- Reinterpret `α →+ Additive β` as `Multiplicative α →* β`. -/
@[simps]
def AddMonoidHom.toMultiplicative'' [AddZeroClass α] [MulOneClass β] :
@@ -527,6 +555,10 @@ def AddMonoidHom.toMultiplicative'' [AddZeroClass α] [MulOneClass β] :
#align add_monoid_hom.to_multiplicative''_symm_apply_apply AddMonoidHom.toMultiplicative''_symm_apply_apply
#align add_monoid_hom.to_multiplicative''_apply_apply AddMonoidHom.toMultiplicative''_apply_apply
+@[simp, norm_cast]
+lemma AddMonoidHom.coe_toMultiplicative'' [AddZeroClass α] [MulOneClass β] (f : α →+ Additive β) :
+ ⇑(toMultiplicative'' f) = toMul ∘ f ∘ toAdd := rfl
+
/-- Reinterpret `Multiplicative α →* β` as `α →+ Additive β`. -/
@[simps!]
def MonoidHom.toAdditive'' [AddZeroClass α] [MulOneClass β] :
@@ -536,6 +568,10 @@ def MonoidHom.toAdditive'' [AddZeroClass α] [MulOneClass β] :
#align monoid_hom.to_additive''_symm_apply_apply MonoidHom.toAdditive''_symm_apply_apply
#align monoid_hom.to_additive''_apply_apply MonoidHom.toAdditive''_apply_apply
+@[simp, norm_cast]
+lemma MonoidHom.coe_toAdditive'' [AddZeroClass α] [MulOneClass β] (f : Multiplicative α →* β) :
+ ⇑(toAdditive'' f) = ofMul ∘ f ∘ ofAdd := rfl
+
/-- If `α` has some multiplicative structure and coerces to a function,
then `Additive α` should also coerce to the same function.
@@ -5,7 +5,6 @@ Authors: Mario Carneiro
-/
import Mathlib.Algebra.Group.Hom.Defs
import Mathlib.Data.Finite.Defs
-import Mathlib.Logic.Equiv.Defs
import Mathlib.Logic.Nontrivial.Basic
#align_import algebra.group.type_tags from "leanprover-community/mathlib"@"2e0975f6a25dd3fbfb9e41556a77f075f6269748"
@@ -142,13 +142,13 @@ instance [h : DecidableEq α] : DecidableEq (Multiplicative α) := h
instance [h : DecidableEq α] : DecidableEq (Additive α) := h
-instance instNontrivialAdditive [Nontrivial α] : Nontrivial (Additive α) :=
+instance Additive.instNontrivial [Nontrivial α] : Nontrivial (Additive α) :=
ofMul.injective.nontrivial
-#align additive.nontrivial instNontrivialAdditive
+#align additive.nontrivial Additive.instNontrivial
-instance instNontrivialMultiplicative [Nontrivial α] : Nontrivial (Multiplicative α) :=
+instance Multiplicative.instNontrivial [Nontrivial α] : Nontrivial (Multiplicative α) :=
ofAdd.injective.nontrivial
-#align multiplicative.nontrivial instNontrivialMultiplicative
+#align multiplicative.nontrivial Multiplicative.instNontrivial
instance Additive.add [Mul α] : Add (Additive α) where
add x y := ofMul (toMul x * toMul y)
@@ -116,12 +116,18 @@ theorem ofMul_toMul (x : Additive α) : ofMul (toMul x) = x :=
rfl
#align of_mul_to_mul ofMul_toMul
+instance [Subsingleton α] : Subsingleton (Additive α) := toMul.injective.subsingleton
+instance [Subsingleton α] : Subsingleton (Multiplicative α) := toAdd.injective.subsingleton
+
instance [Inhabited α] : Inhabited (Additive α) :=
⟨ofMul default⟩
instance [Inhabited α] : Inhabited (Multiplicative α) :=
⟨ofAdd default⟩
+instance [Unique α] : Unique (Additive α) := toMul.unique
+instance [Unique α] : Unique (Multiplicative α) := toAdd.unique
+
instance [Finite α] : Finite (Additive α) :=
Finite.of_equiv α (by rfl)
@@ -128,9 +128,9 @@ instance [Finite α] : Finite (Additive α) :=
instance [Finite α] : Finite (Multiplicative α) :=
Finite.of_equiv α (by rfl)
-instance [h: Infinite α] : Infinite (Additive α) := h
+instance [h : Infinite α] : Infinite (Additive α) := h
-instance [h: Infinite α] : Infinite (Multiplicative α) := h
+instance [h : Infinite α] : Infinite (Multiplicative α) := h
instance [h : DecidableEq α] : DecidableEq (Multiplicative α) := 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,10 +3,10 @@ Copyright (c) 2018 Mario Carneiro. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Mario Carneiro
-/
-import Mathlib.Algebra.Hom.Group.Defs
-import Mathlib.Logic.Nontrivial.Basic
-import Mathlib.Logic.Equiv.Defs
+import Mathlib.Algebra.Group.Hom.Defs
import Mathlib.Data.Finite.Defs
+import Mathlib.Logic.Equiv.Defs
+import Mathlib.Logic.Nontrivial.Basic
#align_import algebra.group.type_tags from "leanprover-community/mathlib"@"2e0975f6a25dd3fbfb9e41556a77f075f6269748"
@@ -132,6 +132,10 @@ instance [h: Infinite α] : Infinite (Additive α) := h
instance [h: Infinite α] : Infinite (Multiplicative α) := h
+instance [h : DecidableEq α] : DecidableEq (Multiplicative α) := h
+
+instance [h : DecidableEq α] : DecidableEq (Additive α) := h
+
instance instNontrivialAdditive [Nontrivial α] : Nontrivial (Additive α) :=
ofMul.injective.nontrivial
#align additive.nontrivial instNontrivialAdditive
Half of these lemmas already existed, but were a long way from the definition that define the operators.
For the ones that did exist, the #align
s have been kept.
The new lemmas are all @[simp]
since that matches the corresponding add
/mul
lemmas.
This makes some lemmas about Int
and Nat
not simp-normal any more (they disagree on commutativity), but that doesn't seem to matter.
@@ -267,6 +267,24 @@ instance Multiplicative.monoid [h : AddMonoid α] : Monoid (Multiplicative α) :
npow_zero := @AddMonoid.nsmul_zero α h
npow_succ := @AddMonoid.nsmul_succ α h }
+@[simp]
+theorem ofMul_pow [Monoid α] (n : ℕ) (a : α) : ofMul (a ^ n) = n • ofMul a :=
+ rfl
+#align of_mul_pow ofMul_pow
+
+@[simp]
+theorem toMul_nsmul [Monoid α] (n : ℕ) (a : Additive α) : toMul (n • a) = toMul a ^ n :=
+ rfl
+
+@[simp]
+theorem ofAdd_nsmul [AddMonoid α] (n : ℕ) (a : α) : ofAdd (n • a) = ofAdd a ^ n :=
+ rfl
+#align of_add_nsmul ofAdd_nsmul
+
+@[simp]
+theorem toAdd_pow [AddMonoid α] (a : Multiplicative α) (n : ℕ) : toAdd (a ^ n) = n • toAdd a :=
+ rfl
+
instance Additive.addLeftCancelMonoid [LeftCancelMonoid α] : AddLeftCancelMonoid (Additive α) :=
{ Additive.addMonoid, Additive.addLeftCancelSemigroup with }
@@ -363,6 +381,24 @@ instance Multiplicative.divInvMonoid [SubNegMonoid α] : DivInvMonoid (Multiplic
zpow_succ' := @SubNegMonoid.zsmul_succ' α _
zpow_neg' := @SubNegMonoid.zsmul_neg' α _ }
+@[simp]
+theorem ofMul_zpow [DivInvMonoid α] (z : ℤ) (a : α) : ofMul (a ^ z) = z • ofMul a :=
+ rfl
+#align of_mul_zpow ofMul_zpow
+
+@[simp]
+theorem toMul_zsmul [DivInvMonoid α] (z : ℤ) (a : Additive α) : toMul (z • a) = toMul a ^ z :=
+ rfl
+
+@[simp]
+theorem ofAdd_zsmul [SubNegMonoid α] (z : ℤ) (a : α) : ofAdd (z • a) = ofAdd a ^ z :=
+ rfl
+#align of_add_zsmul ofAdd_zsmul
+
+@[simp]
+theorem toAdd_zpow [SubNegMonoid α] (a : Multiplicative α) (z : ℤ) : toAdd (a ^ z) = z • toAdd a :=
+ rfl
+
instance Additive.subtractionMonoid [DivisionMonoid α] : SubtractionMonoid (Additive α) :=
{ Additive.subNegMonoid, Additive.involutiveNeg with
neg_add_rev := @mul_inv_rev α _
This removes redundant field values of the form add := add
for smaller terms and less unfolding during unification.
A list of all files containing a structure instance of the form { a1, ... with x1 := val, ... }
where some xi
is a field of some aj
was generated by modifying the structure instance elaboration algorithm to print such overlaps to stdout in a custom toolchain.
Using that toolchain, I went through each file on the list and attempted to remove algebraic fields that overlapped and were redundant, eg add := add
and not toFun
(though some other ones did creep in). If things broke (which was the case in a couple of cases), I did not push further and reverted.
It is possible that pushing harder and trying to remove all redundant overlaps will yield further improvements.
@@ -257,39 +257,35 @@ instance Multiplicative.mulOneClass [AddZeroClass α] : MulOneClass (Multiplicat
instance Additive.addMonoid [h : Monoid α] : AddMonoid (Additive α) :=
{ Additive.addZeroClass, Additive.addSemigroup with
- zero := 0
- add := (· + ·)
nsmul := @Monoid.npow α h
nsmul_zero := @Monoid.npow_zero α h
nsmul_succ := @Monoid.npow_succ α h }
instance Multiplicative.monoid [h : AddMonoid α] : Monoid (Multiplicative α) :=
{ Multiplicative.mulOneClass, Multiplicative.semigroup with
- one := 1
- mul := (· * ·)
npow := @AddMonoid.nsmul α h
npow_zero := @AddMonoid.nsmul_zero α h
npow_succ := @AddMonoid.nsmul_succ α h }
instance Additive.addLeftCancelMonoid [LeftCancelMonoid α] : AddLeftCancelMonoid (Additive α) :=
- { Additive.addMonoid, Additive.addLeftCancelSemigroup with zero := 0, add := (· + ·) }
+ { Additive.addMonoid, Additive.addLeftCancelSemigroup with }
instance Multiplicative.leftCancelMonoid [AddLeftCancelMonoid α] :
LeftCancelMonoid (Multiplicative α) :=
- { Multiplicative.monoid, Multiplicative.leftCancelSemigroup with one := 1, mul := (· * ·) }
+ { Multiplicative.monoid, Multiplicative.leftCancelSemigroup with }
instance Additive.addRightCancelMonoid [RightCancelMonoid α] : AddRightCancelMonoid (Additive α) :=
- { Additive.addMonoid, Additive.addRightCancelSemigroup with zero := 0, add := (· + ·) }
+ { Additive.addMonoid, Additive.addRightCancelSemigroup with }
instance Multiplicative.rightCancelMonoid [AddRightCancelMonoid α] :
RightCancelMonoid (Multiplicative α) :=
- { Multiplicative.monoid, Multiplicative.rightCancelSemigroup with one := 1, mul := (· * ·) }
+ { Multiplicative.monoid, Multiplicative.rightCancelSemigroup with }
instance Additive.addCommMonoid [CommMonoid α] : AddCommMonoid (Additive α) :=
- { Additive.addMonoid, Additive.addCommSemigroup with zero := 0, add := (· + ·) }
+ { Additive.addMonoid, Additive.addCommSemigroup with }
instance Multiplicative.commMonoid [AddCommMonoid α] : CommMonoid (Multiplicative α) :=
- { Multiplicative.monoid, Multiplicative.commSemigroup with one := 1, mul := (· * ·) }
+ { Multiplicative.monoid, Multiplicative.commSemigroup with }
instance Additive.neg [Inv α] : Neg (Additive α) :=
⟨fun x => ofAdd (toMul x)⁻¹⟩
@@ -3,7 +3,7 @@ Copyright (c) 2018 Mario Carneiro. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Mario Carneiro
-/
-import Mathlib.Algebra.Hom.Group
+import Mathlib.Algebra.Hom.Group.Defs
import Mathlib.Logic.Nontrivial.Basic
import Mathlib.Logic.Equiv.Defs
import Mathlib.Data.Finite.Defs
@@ -4,6 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
Authors: Mario Carneiro
-/
import Mathlib.Algebra.Hom.Group
+import Mathlib.Logic.Nontrivial.Basic
import Mathlib.Logic.Equiv.Defs
import Mathlib.Data.Finite.Defs
Type _
and Sort _
(#6499)
We remove all possible occurences of Type _
and Sort _
in favor of Type*
and Sort*
.
This has nice performance benefits.
@@ -38,12 +38,12 @@ variable {α : Type u} {β : Type v}
/-- If `α` carries some multiplicative structure, then `Additive α` carries the corresponding
additive structure. -/
-def Additive (α : Type _) := α
+def Additive (α : Type*) := α
#align additive Additive
/-- If `α` carries some additive structure, then `Multiplicative α` carries the corresponding
multiplicative structure. -/
-def Multiplicative (α : Type _) := α
+def Multiplicative (α : Type*) := α
#align multiplicative Multiplicative
namespace Additive
@@ -217,7 +217,7 @@ theorem ofMul_one [One α] : @Additive.ofMul α 1 = 0 := rfl
#align of_mul_one ofMul_one
@[simp]
-theorem ofMul_eq_zero {A : Type _} [One A] {x : A} : Additive.ofMul x = 0 ↔ x = 1 := Iff.rfl
+theorem ofMul_eq_zero {A : Type*} [One A] {x : A} : Additive.ofMul x = 0 ↔ x = 1 := Iff.rfl
#align of_mul_eq_zero ofMul_eq_zero
@[simp]
@@ -233,7 +233,7 @@ theorem ofAdd_zero [Zero α] : @Multiplicative.ofAdd α 0 = 1 :=
#align of_add_zero ofAdd_zero
@[simp]
-theorem ofAdd_eq_one {A : Type _} [Zero A] {x : A} : Multiplicative.ofAdd x = 1 ↔ x = 0 :=
+theorem ofAdd_eq_one {A : Type*} [Zero A] {x : A} : Multiplicative.ofAdd x = 1 ↔ x = 0 :=
Iff.rfl
#align of_add_eq_one ofAdd_eq_one
@@ -500,7 +500,7 @@ then `Additive α` should also coerce to the same function.
This allows `Additive` to be used on bundled function types with a multiplicative structure, which
is often used for composition, without affecting the behavior of the function itself.
-/
-instance Additive.coeToFun {α : Type _} {β : α → Sort _} [CoeFun α β] :
+instance Additive.coeToFun {α : Type*} {β : α → Sort*} [CoeFun α β] :
CoeFun (Additive α) fun a => β (toMul a) :=
⟨fun a => CoeFun.coe (toMul a)⟩
#align additive.has_coe_to_fun Additive.coeToFun
@@ -511,7 +511,7 @@ then `Multiplicative α` should also coerce to the same function.
This allows `Multiplicative` to be used on bundled function types with an additive structure, which
is often used for composition, without affecting the behavior of the function itself.
-/
-instance Multiplicative.coeToFun {α : Type _} {β : α → Sort _} [CoeFun α β] :
+instance Multiplicative.coeToFun {α : Type*} {β : α → Sort*} [CoeFun α β] :
CoeFun (Multiplicative α) fun a => β (toAdd a) :=
⟨fun a => CoeFun.coe (toAdd a)⟩
#align multiplicative.has_coe_to_fun Multiplicative.coeToFun
Per https://github.com/leanprover/lean4/issues/2343, we are going to need to change the automatic generation of instance names, as they become too long.
This PR ensures that everywhere in Mathlib that refers to an instance by name, that name is given explicitly, rather than being automatically generated.
There are four exceptions, which are now commented, with links to https://github.com/leanprover/lean4/issues/2343.
This was implemented by running Mathlib against a modified Lean that appended _ᾰ
to all automatically generated names, and fixing everything.
Co-authored-by: Scott Morrison <scott.morrison@gmail.com>
@@ -131,11 +131,11 @@ instance [h: Infinite α] : Infinite (Additive α) := h
instance [h: Infinite α] : Infinite (Multiplicative α) := h
-instance [Nontrivial α] : Nontrivial (Additive α) :=
+instance instNontrivialAdditive [Nontrivial α] : Nontrivial (Additive α) :=
ofMul.injective.nontrivial
#align additive.nontrivial instNontrivialAdditive
-instance [Nontrivial α] : Nontrivial (Multiplicative α) :=
+instance instNontrivialMultiplicative [Nontrivial α] : Nontrivial (Multiplicative α) :=
ofAdd.injective.nontrivial
#align multiplicative.nontrivial instNontrivialMultiplicative
@@ -2,16 +2,13 @@
Copyright (c) 2018 Mario Carneiro. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Mario Carneiro
-
-! This file was ported from Lean 3 source module algebra.group.type_tags
-! leanprover-community/mathlib commit 2e0975f6a25dd3fbfb9e41556a77f075f6269748
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
-/
import Mathlib.Algebra.Hom.Group
import Mathlib.Logic.Equiv.Defs
import Mathlib.Data.Finite.Defs
+#align_import algebra.group.type_tags from "leanprover-community/mathlib"@"2e0975f6a25dd3fbfb9e41556a77f075f6269748"
+
/-!
# Type tags that turn additive structures into multiplicative, and vice versa
All these changes in Mathlib 3 were backported from this repository or were forward-ported earler.
topology.basic
@8631e2d5ea77f6c13054d9151d82b83069680cb1
..bcfa726826abd57587355b4b5b7e78ad6527b7e4
topology.separation
@59694bd07f0a39c5beccba34bd9f413a160782bf
..92ca63f0fb391a9ca5f22d2409a6080e786d99f7
order.filter.basic
@996b0ff959da753a555053a480f36e5f264d4207
..24e75f1ee89ff37e99581084704f3f6a950db2ea
order.basic
@d4f69d96f3532729da8ebb763f4bc26fcf640f06
..1f0096e6caa61e9c849ec2adbd227e960e9dff58
algebra.group.type_tags
@6eb334bd8f3433d5b08ba156b8ec3e6af47e1904
..2e0975f6a25dd3fbfb9e41556a77f075f6269748
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
Authors: Mario Carneiro
! This file was ported from Lean 3 source module algebra.group.type_tags
-! leanprover-community/mathlib commit 6eb334bd8f3433d5b08ba156b8ec3e6af47e1904
+! leanprover-community/mathlib commit 2e0975f6a25dd3fbfb9e41556a77f075f6269748
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
simps
, just raises a linter error if you run simps
in a more expensive mode without writing !
.to_additive, simps
. Will do that systematically in future PR.OmegaCompletePartialOrder.ContinuousHom.ofMono
a bitCo-authored-by: Yury G. Kudryashov <urkud@urkud.name>
@@ -460,7 +460,7 @@ def AddMonoidHom.toMultiplicative' [MulOneClass α] [AddZeroClass β] :
#align add_monoid_hom.to_multiplicative'_symm_apply_apply AddMonoidHom.toMultiplicative'_symm_apply_apply
/-- Reinterpret `α →* Multiplicative β` as `Additive α →+ β`. -/
-@[simps]
+@[simps!]
def MonoidHom.toAdditive' [MulOneClass α] [AddZeroClass β] :
(α →* Multiplicative β) ≃ (Additive α →+ β) :=
AddMonoidHom.toMultiplicative'.symm
@@ -489,7 +489,7 @@ def AddMonoidHom.toMultiplicative'' [AddZeroClass α] [MulOneClass β] :
#align add_monoid_hom.to_multiplicative''_apply_apply AddMonoidHom.toMultiplicative''_apply_apply
/-- Reinterpret `Multiplicative α →* β` as `α →+ Additive β`. -/
-@[simps]
+@[simps!]
def MonoidHom.toAdditive'' [AddZeroClass α] [MulOneClass β] :
(Multiplicative α →* β) ≃ (α →+ Additive β) :=
AddMonoidHom.toMultiplicative''.symm
This PR is the result of a slight variant on the following "algorithm"
_
and make all uppercase letters into lowercase_
and make all uppercase letters into lowercase(original_lean3_name, OriginalLean4Name)
#align
statement just before the next empty line#align
statement to have been inserted too early)@@ -416,6 +416,8 @@ def AddMonoidHom.toMultiplicative [AddZeroClass α] [AddZeroClass β] :
left_inv _ := rfl
right_inv _ := rfl
#align add_monoid_hom.to_multiplicative AddMonoidHom.toMultiplicative
+#align add_monoid_hom.to_multiplicative_symm_apply_apply AddMonoidHom.toMultiplicative_symm_apply_apply
+#align add_monoid_hom.to_multiplicative_apply_apply AddMonoidHom.toMultiplicative_apply_apply
/-- Reinterpret `α →* β` as `Additive α →+ Additive β`. -/
@[simps]
@@ -434,6 +436,8 @@ def MonoidHom.toAdditive [MulOneClass α] [MulOneClass β] :
left_inv _ := rfl
right_inv _ := rfl
#align monoid_hom.to_additive MonoidHom.toAdditive
+#align monoid_hom.to_additive_symm_apply_apply MonoidHom.toAdditive_symm_apply_apply
+#align monoid_hom.to_additive_apply_apply MonoidHom.toAdditive_apply_apply
/-- Reinterpret `Additive α →+ β` as `α →* Multiplicative β`. -/
@[simps]
@@ -452,6 +456,8 @@ def AddMonoidHom.toMultiplicative' [MulOneClass α] [AddZeroClass β] :
left_inv _ := rfl
right_inv _ := rfl
#align add_monoid_hom.to_multiplicative' AddMonoidHom.toMultiplicative'
+#align add_monoid_hom.to_multiplicative'_apply_apply AddMonoidHom.toMultiplicative'_apply_apply
+#align add_monoid_hom.to_multiplicative'_symm_apply_apply AddMonoidHom.toMultiplicative'_symm_apply_apply
/-- Reinterpret `α →* Multiplicative β` as `Additive α →+ β`. -/
@[simps]
@@ -459,6 +465,8 @@ def MonoidHom.toAdditive' [MulOneClass α] [AddZeroClass β] :
(α →* Multiplicative β) ≃ (Additive α →+ β) :=
AddMonoidHom.toMultiplicative'.symm
#align monoid_hom.to_additive' MonoidHom.toAdditive'
+#align monoid_hom.to_additive'_symm_apply_apply MonoidHom.toAdditive'_symm_apply_apply
+#align monoid_hom.to_additive'_apply_apply MonoidHom.toAdditive'_apply_apply
/-- Reinterpret `α →+ Additive β` as `Multiplicative α →* β`. -/
@[simps]
@@ -477,6 +485,8 @@ def AddMonoidHom.toMultiplicative'' [AddZeroClass α] [MulOneClass β] :
left_inv _ := rfl
right_inv _ := rfl
#align add_monoid_hom.to_multiplicative'' AddMonoidHom.toMultiplicative''
+#align add_monoid_hom.to_multiplicative''_symm_apply_apply AddMonoidHom.toMultiplicative''_symm_apply_apply
+#align add_monoid_hom.to_multiplicative''_apply_apply AddMonoidHom.toMultiplicative''_apply_apply
/-- Reinterpret `Multiplicative α →* β` as `α →+ Additive β`. -/
@[simps]
@@ -484,6 +494,8 @@ def MonoidHom.toAdditive'' [AddZeroClass α] [MulOneClass β] :
(Multiplicative α →* β) ≃ (α →+ Additive β) :=
AddMonoidHom.toMultiplicative''.symm
#align monoid_hom.to_additive'' MonoidHom.toAdditive''
+#align monoid_hom.to_additive''_symm_apply_apply MonoidHom.toAdditive''_symm_apply_apply
+#align monoid_hom.to_additive''_apply_apply MonoidHom.toAdditive''_apply_apply
/-- If `α` has some multiplicative structure and coerces to a function,
then `Additive α` should also coerce to the same function.
Adds a basic version of the tauto
tactic, mostly a line-by-line translation of the Lean 3 version.
tauto
always-classical and eliminates tauto!
.andThenOnSubgoals
tactic combinator in Mathlib.Tactic.Basic
.Co-authored-by: Scott Morrison <scott.morrison@gmail.com>
@@ -130,10 +130,8 @@ instance [Finite α] : Finite (Additive α) :=
instance [Finite α] : Finite (Multiplicative α) :=
Finite.of_equiv α (by rfl)
--- Porting note: the mathlib3 proof is `by tauto`
instance [h: Infinite α] : Infinite (Additive α) := h
--- Porting note: the mathlib3 proof is `by tauto`
instance [h: Infinite α] : Infinite (Multiplicative α) := h
instance [Nontrivial α] : Nontrivial (Additive α) :=
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
@@ -2,6 +2,11 @@
Copyright (c) 2018 Mario Carneiro. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Mario Carneiro
+
+! This file was ported from Lean 3 source module algebra.group.type_tags
+! leanprover-community/mathlib commit 6eb334bd8f3433d5b08ba156b8ec3e6af47e1904
+! Please do not edit these lines, except to modify the commit id
+! if you have ported upstream changes.
-/
import Mathlib.Algebra.Hom.Group
import Mathlib.Logic.Equiv.Defs
All dependencies are ported!