algebra.group_with_zero.inj_surjMathlib.Algebra.GroupWithZero.InjSurj

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)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(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,8 +3,8 @@ Copyright (c) 2020 Johan Commelin. All rights reserved.
 Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Johan Commelin
 -/
-import Mathbin.Algebra.Group.InjSurj
-import Mathbin.Algebra.GroupWithZero.Defs
+import Algebra.Group.InjSurj
+import Algebra.GroupWithZero.Defs
 
 #align_import algebra.group_with_zero.inj_surj from "leanprover-community/mathlib"@"448144f7ae193a8990cb7473c9e9a01990f64ac7"
 
Diff
@@ -64,7 +64,7 @@ protected theorem Function.Injective.noZeroDivisors [Mul M₀] [Zero M₀] [Mul
   {
     eq_zero_or_eq_zero_of_mul_eq_zero := fun x y H =>
       have : f x * f y = 0 := by rw [← mul, H, zero]
-      (eq_zero_or_eq_zero_of_mul_eq_zero this).imp (fun H => hf <| by rwa [zero]) fun H =>
+      (eq_zero_or_eq_zero_of_hMul_eq_zero this).imp (fun H => hf <| by rwa [zero]) fun H =>
         hf <| by rwa [zero] }
 #align function.injective.no_zero_divisors Function.Injective.noZeroDivisors
 -/
@@ -192,9 +192,9 @@ protected def Function.Injective.cancelMonoidWithZero [Zero M₀'] [Mul M₀'] [
   { hf.Monoid f one mul npow,
     hf.MulZeroClass f zero
       mul with
-    mul_left_cancel_of_ne_zero := fun x y z hx H =>
+    hMul_left_cancel_of_ne_zero := fun x y z hx H =>
       hf <| mul_left_cancel₀ ((hf.ne_iff' zero).2 hx) <| by erw [← mul, ← mul, H] <;> rfl
-    mul_right_cancel_of_ne_zero := fun x y z hx H =>
+    hMul_right_cancel_of_ne_zero := fun x y z hx H =>
       hf <| mul_right_cancel₀ ((hf.ne_iff' zero).2 hx) <| by erw [← mul, ← mul, H] <;> rfl }
 #align function.injective.cancel_monoid_with_zero Function.Injective.cancelMonoidWithZero
 -/
Diff
@@ -2,15 +2,12 @@
 Copyright (c) 2020 Johan Commelin. All rights reserved.
 Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Johan Commelin
-
-! This file was ported from Lean 3 source module algebra.group_with_zero.inj_surj
-! 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.Group.InjSurj
 import Mathbin.Algebra.GroupWithZero.Defs
 
+#align_import algebra.group_with_zero.inj_surj from "leanprover-community/mathlib"@"448144f7ae193a8990cb7473c9e9a01990f64ac7"
+
 /-!
 # Lifting groups with zero along injective/surjective maps
 
Diff
@@ -27,6 +27,7 @@ section MulZeroClass
 
 variable [MulZeroClass M₀] {a b : M₀}
 
+#print Function.Injective.mulZeroClass /-
 /-- Pullback a `mul_zero_class` instance along an injective function.
 See note [reducible non-instances]. -/
 @[reducible]
@@ -38,7 +39,9 @@ protected def Function.Injective.mulZeroClass [Mul M₀'] [Zero M₀'] (f : M₀
   zero_mul a := hf <| by simp only [mul, zero, MulZeroClass.zero_mul]
   mul_zero a := hf <| by simp only [mul, zero, MulZeroClass.mul_zero]
 #align function.injective.mul_zero_class Function.Injective.mulZeroClass
+-/
 
+#print Function.Surjective.mulZeroClass /-
 /-- Pushforward a `mul_zero_class` instance along an surjective function.
 See note [reducible non-instances]. -/
 @[reducible]
@@ -50,11 +53,13 @@ protected def Function.Surjective.mulZeroClass [Mul M₀'] [Zero M₀'] (f : M
   mul_zero := hf.forall.2 fun x => by simp only [← zero, ← mul, MulZeroClass.mul_zero]
   zero_mul := hf.forall.2 fun x => by simp only [← zero, ← mul, MulZeroClass.zero_mul]
 #align function.surjective.mul_zero_class Function.Surjective.mulZeroClass
+-/
 
 end MulZeroClass
 
 section NoZeroDivisors
 
+#print Function.Injective.noZeroDivisors /-
 /-- Pushforward a `no_zero_divisors` instance along an injective function. -/
 protected theorem Function.Injective.noZeroDivisors [Mul M₀] [Zero M₀] [Mul M₀'] [Zero M₀']
     [NoZeroDivisors M₀'] (f : M₀ → M₀') (hf : Injective f) (zero : f 0 = 0)
@@ -65,6 +70,7 @@ protected theorem Function.Injective.noZeroDivisors [Mul M₀] [Zero M₀] [Mul
       (eq_zero_or_eq_zero_of_mul_eq_zero this).imp (fun H => hf <| by rwa [zero]) fun H =>
         hf <| by rwa [zero] }
 #align function.injective.no_zero_divisors Function.Injective.noZeroDivisors
+-/
 
 end NoZeroDivisors
 
@@ -72,6 +78,7 @@ section MulZeroOneClass
 
 variable [MulZeroOneClass M₀]
 
+#print Function.Injective.mulZeroOneClass /-
 /-- Pullback a `mul_zero_one_class` instance along an injective function.
 See note [reducible non-instances]. -/
 @[reducible]
@@ -80,7 +87,9 @@ protected def Function.Injective.mulZeroOneClass [Mul M₀'] [Zero M₀'] [One M
     MulZeroOneClass M₀' :=
   { hf.MulZeroClass f zero mul, hf.MulOneClass f one mul with }
 #align function.injective.mul_zero_one_class Function.Injective.mulZeroOneClass
+-/
 
+#print Function.Surjective.mulZeroOneClass /-
 /-- Pushforward a `mul_zero_one_class` instance along an surjective function.
 See note [reducible non-instances]. -/
 @[reducible]
@@ -89,11 +98,13 @@ protected def Function.Surjective.mulZeroOneClass [Mul M₀'] [Zero M₀'] [One
     MulZeroOneClass M₀' :=
   { hf.MulZeroClass f zero mul, hf.MulOneClass f one mul with }
 #align function.surjective.mul_zero_one_class Function.Surjective.mulZeroOneClass
+-/
 
 end MulZeroOneClass
 
 section SemigroupWithZero
 
+#print Function.Injective.semigroupWithZero /-
 /-- Pullback a `semigroup_with_zero` class along an injective function.
 See note [reducible non-instances]. -/
 @[reducible]
@@ -102,7 +113,9 @@ protected def Function.Injective.semigroupWithZero [Zero M₀'] [Mul M₀'] [Sem
     SemigroupWithZero M₀' :=
   { hf.MulZeroClass f zero mul, ‹Zero M₀'›, hf.Semigroup f mul with }
 #align function.injective.semigroup_with_zero Function.Injective.semigroupWithZero
+-/
 
+#print Function.Surjective.semigroupWithZero /-
 /-- Pushforward a `semigroup_with_zero` class along an surjective function.
 See note [reducible non-instances]. -/
 @[reducible]
@@ -111,11 +124,13 @@ protected def Function.Surjective.semigroupWithZero [SemigroupWithZero M₀] [Ze
     SemigroupWithZero M₀' :=
   { hf.MulZeroClass f zero mul, ‹Zero M₀'›, hf.Semigroup f mul with }
 #align function.surjective.semigroup_with_zero Function.Surjective.semigroupWithZero
+-/
 
 end SemigroupWithZero
 
 section MonoidWithZero
 
+#print Function.Injective.monoidWithZero /-
 /-- Pullback a `monoid_with_zero` class along an injective function.
 See note [reducible non-instances]. -/
 @[reducible]
@@ -125,7 +140,9 @@ protected def Function.Injective.monoidWithZero [Zero M₀'] [Mul M₀'] [One M
     MonoidWithZero M₀' :=
   { hf.Monoid f one mul npow, hf.MulZeroClass f zero mul with }
 #align function.injective.monoid_with_zero Function.Injective.monoidWithZero
+-/
 
+#print Function.Surjective.monoidWithZero /-
 /-- Pushforward a `monoid_with_zero` class along a surjective function.
 See note [reducible non-instances]. -/
 @[reducible]
@@ -135,7 +152,9 @@ protected def Function.Surjective.monoidWithZero [Zero M₀'] [Mul M₀'] [One M
     MonoidWithZero M₀' :=
   { hf.Monoid f one mul npow, hf.MulZeroClass f zero mul with }
 #align function.surjective.monoid_with_zero Function.Surjective.monoidWithZero
+-/
 
+#print Function.Injective.commMonoidWithZero /-
 /-- Pullback a `monoid_with_zero` class along an injective function.
 See note [reducible non-instances]. -/
 @[reducible]
@@ -145,7 +164,9 @@ protected def Function.Injective.commMonoidWithZero [Zero M₀'] [Mul M₀'] [On
     CommMonoidWithZero M₀' :=
   { hf.CommMonoid f one mul npow, hf.MulZeroClass f zero mul with }
 #align function.injective.comm_monoid_with_zero Function.Injective.commMonoidWithZero
+-/
 
+#print Function.Surjective.commMonoidWithZero /-
 /-- Pushforward a `monoid_with_zero` class along a surjective function.
 See note [reducible non-instances]. -/
 @[reducible]
@@ -155,6 +176,7 @@ protected def Function.Surjective.commMonoidWithZero [Zero M₀'] [Mul M₀'] [O
     CommMonoidWithZero M₀' :=
   { hf.CommMonoid f one mul npow, hf.MulZeroClass f zero mul with }
 #align function.surjective.comm_monoid_with_zero Function.Surjective.commMonoidWithZero
+-/
 
 end MonoidWithZero
 
@@ -162,6 +184,7 @@ section CancelMonoidWithZero
 
 variable [CancelMonoidWithZero M₀] {a b c : M₀}
 
+#print Function.Injective.cancelMonoidWithZero /-
 /-- Pullback a `monoid_with_zero` class along an injective function.
 See note [reducible non-instances]. -/
 @[reducible]
@@ -177,6 +200,7 @@ protected def Function.Injective.cancelMonoidWithZero [Zero M₀'] [Mul M₀'] [
     mul_right_cancel_of_ne_zero := fun x y z hx H =>
       hf <| mul_right_cancel₀ ((hf.ne_iff' zero).2 hx) <| by erw [← mul, ← mul, H] <;> rfl }
 #align function.injective.cancel_monoid_with_zero Function.Injective.cancelMonoidWithZero
+-/
 
 end CancelMonoidWithZero
 
@@ -184,6 +208,7 @@ section CancelCommMonoidWithZero
 
 variable [CancelCommMonoidWithZero M₀] {a b c : M₀}
 
+#print Function.Injective.cancelCommMonoidWithZero /-
 /-- Pullback a `cancel_comm_monoid_with_zero` class along an injective function.
 See note [reducible non-instances]. -/
 @[reducible]
@@ -193,6 +218,7 @@ protected def Function.Injective.cancelCommMonoidWithZero [Zero M₀'] [Mul M₀
     CancelCommMonoidWithZero M₀' :=
   { hf.CommMonoidWithZero f zero one mul npow, hf.CancelMonoidWithZero f zero one mul npow with }
 #align function.injective.cancel_comm_monoid_with_zero Function.Injective.cancelCommMonoidWithZero
+-/
 
 end CancelCommMonoidWithZero
 
@@ -200,6 +226,7 @@ section GroupWithZero
 
 variable [GroupWithZero G₀] {a b c g h x : G₀}
 
+#print Function.Injective.groupWithZero /-
 /-- Pullback a `group_with_zero` class along an injective function.
 See note [reducible non-instances]. -/
 @[reducible]
@@ -215,7 +242,9 @@ protected def Function.Injective.groupWithZero [Zero G₀'] [Mul G₀'] [One G
     mul_inv_cancel := fun x hx =>
       hf <| by erw [one, mul, inv, mul_inv_cancel ((hf.ne_iff' zero).2 hx)] }
 #align function.injective.group_with_zero Function.Injective.groupWithZero
+-/
 
+#print Function.Surjective.groupWithZero /-
 /-- Pushforward a `group_with_zero` class along an surjective function.
 See note [reducible non-instances]. -/
 @[reducible]
@@ -235,6 +264,7 @@ protected def Function.Surjective.groupWithZero [Zero G₀'] [Mul G₀'] [One G
           exact one
     exists_pair_ne := ⟨0, 1, h01⟩ }
 #align function.surjective.group_with_zero Function.Surjective.groupWithZero
+-/
 
 end GroupWithZero
 
@@ -242,6 +272,7 @@ section CommGroupWithZero
 
 variable [CommGroupWithZero G₀] {a b c d : G₀}
 
+#print Function.Injective.commGroupWithZero /-
 /-- Pullback a `comm_group_with_zero` class along an injective function.
 See note [reducible non-instances]. -/
 @[reducible]
@@ -252,7 +283,9 @@ protected def Function.Injective.commGroupWithZero [Zero G₀'] [Mul G₀'] [One
     (zpow : ∀ (x) (n : ℤ), f (x ^ n) = f x ^ n) : CommGroupWithZero G₀' :=
   { hf.GroupWithZero f zero one mul inv div npow zpow, hf.CommSemigroup f mul with }
 #align function.injective.comm_group_with_zero Function.Injective.commGroupWithZero
+-/
 
+#print Function.Surjective.commGroupWithZero /-
 /-- Pushforward a `comm_group_with_zero` class along a surjective function. -/
 protected def Function.Surjective.commGroupWithZero [Zero G₀'] [Mul G₀'] [One G₀'] [Inv G₀']
     [Div G₀'] [Pow G₀' ℕ] [Pow G₀' ℤ] (h01 : (0 : G₀') ≠ 1) (f : G₀ → G₀') (hf : Surjective f)
@@ -262,6 +295,7 @@ protected def Function.Surjective.commGroupWithZero [Zero G₀'] [Mul G₀'] [On
     CommGroupWithZero G₀' :=
   { hf.GroupWithZero h01 f zero one mul inv div npow zpow, hf.CommSemigroup f mul with }
 #align function.surjective.comm_group_with_zero Function.Surjective.commGroupWithZero
+-/
 
 end CommGroupWithZero
 
Diff
@@ -27,12 +27,6 @@ section MulZeroClass
 
 variable [MulZeroClass M₀] {a b : M₀}
 
-/- warning: function.injective.mul_zero_class -> Function.Injective.mulZeroClass is a dubious translation:
-lean 3 declaration is
-  forall {M₀ : Type.{u1}} {M₀' : Type.{u2}} [_inst_1 : MulZeroClass.{u1} M₀] [_inst_2 : Mul.{u2} M₀'] [_inst_3 : Zero.{u2} M₀'] (f : M₀' -> M₀), (Function.Injective.{succ u2, succ u1} M₀' M₀ f) -> (Eq.{succ u1} M₀ (f (OfNat.ofNat.{u2} M₀' 0 (OfNat.mk.{u2} M₀' 0 (Zero.zero.{u2} M₀' _inst_3)))) (OfNat.ofNat.{u1} M₀ 0 (OfNat.mk.{u1} M₀ 0 (Zero.zero.{u1} M₀ (MulZeroClass.toHasZero.{u1} M₀ _inst_1))))) -> (forall (a : M₀') (b : M₀'), Eq.{succ u1} M₀ (f (HMul.hMul.{u2, u2, u2} M₀' M₀' M₀' (instHMul.{u2} M₀' _inst_2) a b)) (HMul.hMul.{u1, u1, u1} M₀ M₀ M₀ (instHMul.{u1} M₀ (MulZeroClass.toHasMul.{u1} M₀ _inst_1)) (f a) (f b))) -> (MulZeroClass.{u2} M₀')
-but is expected to have type
-  forall {M₀ : Type.{u1}} {M₀' : Type.{u2}} [_inst_1 : MulZeroClass.{u1} M₀] [_inst_2 : Mul.{u2} M₀'] [_inst_3 : Zero.{u2} M₀'] (f : M₀' -> M₀), (Function.Injective.{succ u2, succ u1} M₀' M₀ f) -> (Eq.{succ u1} M₀ (f (OfNat.ofNat.{u2} M₀' 0 (Zero.toOfNat0.{u2} M₀' _inst_3))) (OfNat.ofNat.{u1} M₀ 0 (Zero.toOfNat0.{u1} M₀ (MulZeroClass.toZero.{u1} M₀ _inst_1)))) -> (forall (a : M₀') (b : M₀'), Eq.{succ u1} M₀ (f (HMul.hMul.{u2, u2, u2} M₀' M₀' M₀' (instHMul.{u2} M₀' _inst_2) a b)) (HMul.hMul.{u1, u1, u1} M₀ M₀ M₀ (instHMul.{u1} M₀ (MulZeroClass.toMul.{u1} M₀ _inst_1)) (f a) (f b))) -> (MulZeroClass.{u2} M₀')
-Case conversion may be inaccurate. Consider using '#align function.injective.mul_zero_class Function.Injective.mulZeroClassₓ'. -/
 /-- Pullback a `mul_zero_class` instance along an injective function.
 See note [reducible non-instances]. -/
 @[reducible]
@@ -45,12 +39,6 @@ protected def Function.Injective.mulZeroClass [Mul M₀'] [Zero M₀'] (f : M₀
   mul_zero a := hf <| by simp only [mul, zero, MulZeroClass.mul_zero]
 #align function.injective.mul_zero_class Function.Injective.mulZeroClass
 
-/- warning: function.surjective.mul_zero_class -> Function.Surjective.mulZeroClass is a dubious translation:
-lean 3 declaration is
-  forall {M₀ : Type.{u1}} {M₀' : Type.{u2}} [_inst_1 : MulZeroClass.{u1} M₀] [_inst_2 : Mul.{u2} M₀'] [_inst_3 : Zero.{u2} M₀'] (f : M₀ -> M₀'), (Function.Surjective.{succ u1, succ u2} M₀ M₀' f) -> (Eq.{succ u2} M₀' (f (OfNat.ofNat.{u1} M₀ 0 (OfNat.mk.{u1} M₀ 0 (Zero.zero.{u1} M₀ (MulZeroClass.toHasZero.{u1} M₀ _inst_1))))) (OfNat.ofNat.{u2} M₀' 0 (OfNat.mk.{u2} M₀' 0 (Zero.zero.{u2} M₀' _inst_3)))) -> (forall (a : M₀) (b : M₀), Eq.{succ u2} M₀' (f (HMul.hMul.{u1, u1, u1} M₀ M₀ M₀ (instHMul.{u1} M₀ (MulZeroClass.toHasMul.{u1} M₀ _inst_1)) a b)) (HMul.hMul.{u2, u2, u2} M₀' M₀' M₀' (instHMul.{u2} M₀' _inst_2) (f a) (f b))) -> (MulZeroClass.{u2} M₀')
-but is expected to have type
-  forall {M₀ : Type.{u1}} {M₀' : Type.{u2}} [_inst_1 : MulZeroClass.{u1} M₀] [_inst_2 : Mul.{u2} M₀'] [_inst_3 : Zero.{u2} M₀'] (f : M₀ -> M₀'), (Function.Surjective.{succ u1, succ u2} M₀ M₀' f) -> (Eq.{succ u2} M₀' (f (OfNat.ofNat.{u1} M₀ 0 (Zero.toOfNat0.{u1} M₀ (MulZeroClass.toZero.{u1} M₀ _inst_1)))) (OfNat.ofNat.{u2} M₀' 0 (Zero.toOfNat0.{u2} M₀' _inst_3))) -> (forall (a : M₀) (b : M₀), Eq.{succ u2} M₀' (f (HMul.hMul.{u1, u1, u1} M₀ M₀ M₀ (instHMul.{u1} M₀ (MulZeroClass.toMul.{u1} M₀ _inst_1)) a b)) (HMul.hMul.{u2, u2, u2} M₀' M₀' M₀' (instHMul.{u2} M₀' _inst_2) (f a) (f b))) -> (MulZeroClass.{u2} M₀')
-Case conversion may be inaccurate. Consider using '#align function.surjective.mul_zero_class Function.Surjective.mulZeroClassₓ'. -/
 /-- Pushforward a `mul_zero_class` instance along an surjective function.
 See note [reducible non-instances]. -/
 @[reducible]
@@ -67,12 +55,6 @@ end MulZeroClass
 
 section NoZeroDivisors
 
-/- warning: function.injective.no_zero_divisors -> Function.Injective.noZeroDivisors is a dubious translation:
-lean 3 declaration is
-  forall {M₀ : Type.{u1}} {M₀' : Type.{u2}} [_inst_1 : Mul.{u1} M₀] [_inst_2 : Zero.{u1} M₀] [_inst_3 : Mul.{u2} M₀'] [_inst_4 : Zero.{u2} M₀'] [_inst_5 : NoZeroDivisors.{u2} M₀' _inst_3 _inst_4] (f : M₀ -> M₀'), (Function.Injective.{succ u1, succ u2} M₀ M₀' f) -> (Eq.{succ u2} M₀' (f (OfNat.ofNat.{u1} M₀ 0 (OfNat.mk.{u1} M₀ 0 (Zero.zero.{u1} M₀ _inst_2)))) (OfNat.ofNat.{u2} M₀' 0 (OfNat.mk.{u2} M₀' 0 (Zero.zero.{u2} M₀' _inst_4)))) -> (forall (x : M₀) (y : M₀), Eq.{succ u2} M₀' (f (HMul.hMul.{u1, u1, u1} M₀ M₀ M₀ (instHMul.{u1} M₀ _inst_1) x y)) (HMul.hMul.{u2, u2, u2} M₀' M₀' M₀' (instHMul.{u2} M₀' _inst_3) (f x) (f y))) -> (NoZeroDivisors.{u1} M₀ _inst_1 _inst_2)
-but is expected to have type
-  forall {M₀ : Type.{u2}} {M₀' : Type.{u1}} [_inst_1 : Mul.{u2} M₀] [_inst_2 : Zero.{u2} M₀] [_inst_3 : Mul.{u1} M₀'] [_inst_4 : Zero.{u1} M₀'] [_inst_5 : NoZeroDivisors.{u1} M₀' _inst_3 _inst_4] (f : M₀ -> M₀'), (Function.Injective.{succ u2, succ u1} M₀ M₀' f) -> (Eq.{succ u1} M₀' (f (OfNat.ofNat.{u2} M₀ 0 (Zero.toOfNat0.{u2} M₀ _inst_2))) (OfNat.ofNat.{u1} M₀' 0 (Zero.toOfNat0.{u1} M₀' _inst_4))) -> (forall (x : M₀) (y : M₀), Eq.{succ u1} M₀' (f (HMul.hMul.{u2, u2, u2} M₀ M₀ M₀ (instHMul.{u2} M₀ _inst_1) x y)) (HMul.hMul.{u1, u1, u1} M₀' M₀' M₀' (instHMul.{u1} M₀' _inst_3) (f x) (f y))) -> (NoZeroDivisors.{u2} M₀ _inst_1 _inst_2)
-Case conversion may be inaccurate. Consider using '#align function.injective.no_zero_divisors Function.Injective.noZeroDivisorsₓ'. -/
 /-- Pushforward a `no_zero_divisors` instance along an injective function. -/
 protected theorem Function.Injective.noZeroDivisors [Mul M₀] [Zero M₀] [Mul M₀'] [Zero M₀']
     [NoZeroDivisors M₀'] (f : M₀ → M₀') (hf : Injective f) (zero : f 0 = 0)
@@ -90,12 +72,6 @@ section MulZeroOneClass
 
 variable [MulZeroOneClass M₀]
 
-/- warning: function.injective.mul_zero_one_class -> Function.Injective.mulZeroOneClass is a dubious translation:
-lean 3 declaration is
-  forall {M₀ : Type.{u1}} {M₀' : Type.{u2}} [_inst_1 : MulZeroOneClass.{u1} M₀] [_inst_2 : Mul.{u2} M₀'] [_inst_3 : Zero.{u2} M₀'] [_inst_4 : One.{u2} M₀'] (f : M₀' -> M₀), (Function.Injective.{succ u2, succ u1} M₀' M₀ f) -> (Eq.{succ u1} M₀ (f (OfNat.ofNat.{u2} M₀' 0 (OfNat.mk.{u2} M₀' 0 (Zero.zero.{u2} M₀' _inst_3)))) (OfNat.ofNat.{u1} M₀ 0 (OfNat.mk.{u1} M₀ 0 (Zero.zero.{u1} M₀ (MulZeroClass.toHasZero.{u1} M₀ (MulZeroOneClass.toMulZeroClass.{u1} M₀ _inst_1)))))) -> (Eq.{succ u1} M₀ (f (OfNat.ofNat.{u2} M₀' 1 (OfNat.mk.{u2} M₀' 1 (One.one.{u2} M₀' _inst_4)))) (OfNat.ofNat.{u1} M₀ 1 (OfNat.mk.{u1} M₀ 1 (One.one.{u1} M₀ (MulOneClass.toHasOne.{u1} M₀ (MulZeroOneClass.toMulOneClass.{u1} M₀ _inst_1)))))) -> (forall (a : M₀') (b : M₀'), Eq.{succ u1} M₀ (f (HMul.hMul.{u2, u2, u2} M₀' M₀' M₀' (instHMul.{u2} M₀' _inst_2) a b)) (HMul.hMul.{u1, u1, u1} M₀ M₀ M₀ (instHMul.{u1} M₀ (MulZeroClass.toHasMul.{u1} M₀ (MulZeroOneClass.toMulZeroClass.{u1} M₀ _inst_1))) (f a) (f b))) -> (MulZeroOneClass.{u2} M₀')
-but is expected to have type
-  forall {M₀ : Type.{u1}} {M₀' : Type.{u2}} [_inst_1 : MulZeroOneClass.{u1} M₀] [_inst_2 : Mul.{u2} M₀'] [_inst_3 : Zero.{u2} M₀'] [_inst_4 : One.{u2} M₀'] (f : M₀' -> M₀), (Function.Injective.{succ u2, succ u1} M₀' M₀ f) -> (Eq.{succ u1} M₀ (f (OfNat.ofNat.{u2} M₀' 0 (Zero.toOfNat0.{u2} M₀' _inst_3))) (OfNat.ofNat.{u1} M₀ 0 (Zero.toOfNat0.{u1} M₀ (MulZeroOneClass.toZero.{u1} M₀ _inst_1)))) -> (Eq.{succ u1} M₀ (f (OfNat.ofNat.{u2} M₀' 1 (One.toOfNat1.{u2} M₀' _inst_4))) (OfNat.ofNat.{u1} M₀ 1 (One.toOfNat1.{u1} M₀ (MulOneClass.toOne.{u1} M₀ (MulZeroOneClass.toMulOneClass.{u1} M₀ _inst_1))))) -> (forall (a : M₀') (b : M₀'), Eq.{succ u1} M₀ (f (HMul.hMul.{u2, u2, u2} M₀' M₀' M₀' (instHMul.{u2} M₀' _inst_2) a b)) (HMul.hMul.{u1, u1, u1} M₀ M₀ M₀ (instHMul.{u1} M₀ (MulZeroClass.toMul.{u1} M₀ (MulZeroOneClass.toMulZeroClass.{u1} M₀ _inst_1))) (f a) (f b))) -> (MulZeroOneClass.{u2} M₀')
-Case conversion may be inaccurate. Consider using '#align function.injective.mul_zero_one_class Function.Injective.mulZeroOneClassₓ'. -/
 /-- Pullback a `mul_zero_one_class` instance along an injective function.
 See note [reducible non-instances]. -/
 @[reducible]
@@ -105,12 +81,6 @@ protected def Function.Injective.mulZeroOneClass [Mul M₀'] [Zero M₀'] [One M
   { hf.MulZeroClass f zero mul, hf.MulOneClass f one mul with }
 #align function.injective.mul_zero_one_class Function.Injective.mulZeroOneClass
 
-/- warning: function.surjective.mul_zero_one_class -> Function.Surjective.mulZeroOneClass is a dubious translation:
-lean 3 declaration is
-  forall {M₀ : Type.{u1}} {M₀' : Type.{u2}} [_inst_1 : MulZeroOneClass.{u1} M₀] [_inst_2 : Mul.{u2} M₀'] [_inst_3 : Zero.{u2} M₀'] [_inst_4 : One.{u2} M₀'] (f : M₀ -> M₀'), (Function.Surjective.{succ u1, succ u2} M₀ M₀' f) -> (Eq.{succ u2} M₀' (f (OfNat.ofNat.{u1} M₀ 0 (OfNat.mk.{u1} M₀ 0 (Zero.zero.{u1} M₀ (MulZeroClass.toHasZero.{u1} M₀ (MulZeroOneClass.toMulZeroClass.{u1} M₀ _inst_1)))))) (OfNat.ofNat.{u2} M₀' 0 (OfNat.mk.{u2} M₀' 0 (Zero.zero.{u2} M₀' _inst_3)))) -> (Eq.{succ u2} M₀' (f (OfNat.ofNat.{u1} M₀ 1 (OfNat.mk.{u1} M₀ 1 (One.one.{u1} M₀ (MulOneClass.toHasOne.{u1} M₀ (MulZeroOneClass.toMulOneClass.{u1} M₀ _inst_1)))))) (OfNat.ofNat.{u2} M₀' 1 (OfNat.mk.{u2} M₀' 1 (One.one.{u2} M₀' _inst_4)))) -> (forall (a : M₀) (b : M₀), Eq.{succ u2} M₀' (f (HMul.hMul.{u1, u1, u1} M₀ M₀ M₀ (instHMul.{u1} M₀ (MulZeroClass.toHasMul.{u1} M₀ (MulZeroOneClass.toMulZeroClass.{u1} M₀ _inst_1))) a b)) (HMul.hMul.{u2, u2, u2} M₀' M₀' M₀' (instHMul.{u2} M₀' _inst_2) (f a) (f b))) -> (MulZeroOneClass.{u2} M₀')
-but is expected to have type
-  forall {M₀ : Type.{u1}} {M₀' : Type.{u2}} [_inst_1 : MulZeroOneClass.{u1} M₀] [_inst_2 : Mul.{u2} M₀'] [_inst_3 : Zero.{u2} M₀'] [_inst_4 : One.{u2} M₀'] (f : M₀ -> M₀'), (Function.Surjective.{succ u1, succ u2} M₀ M₀' f) -> (Eq.{succ u2} M₀' (f (OfNat.ofNat.{u1} M₀ 0 (Zero.toOfNat0.{u1} M₀ (MulZeroOneClass.toZero.{u1} M₀ _inst_1)))) (OfNat.ofNat.{u2} M₀' 0 (Zero.toOfNat0.{u2} M₀' _inst_3))) -> (Eq.{succ u2} M₀' (f (OfNat.ofNat.{u1} M₀ 1 (One.toOfNat1.{u1} M₀ (MulOneClass.toOne.{u1} M₀ (MulZeroOneClass.toMulOneClass.{u1} M₀ _inst_1))))) (OfNat.ofNat.{u2} M₀' 1 (One.toOfNat1.{u2} M₀' _inst_4))) -> (forall (a : M₀) (b : M₀), Eq.{succ u2} M₀' (f (HMul.hMul.{u1, u1, u1} M₀ M₀ M₀ (instHMul.{u1} M₀ (MulZeroClass.toMul.{u1} M₀ (MulZeroOneClass.toMulZeroClass.{u1} M₀ _inst_1))) a b)) (HMul.hMul.{u2, u2, u2} M₀' M₀' M₀' (instHMul.{u2} M₀' _inst_2) (f a) (f b))) -> (MulZeroOneClass.{u2} M₀')
-Case conversion may be inaccurate. Consider using '#align function.surjective.mul_zero_one_class Function.Surjective.mulZeroOneClassₓ'. -/
 /-- Pushforward a `mul_zero_one_class` instance along an surjective function.
 See note [reducible non-instances]. -/
 @[reducible]
@@ -124,12 +94,6 @@ end MulZeroOneClass
 
 section SemigroupWithZero
 
-/- warning: function.injective.semigroup_with_zero -> Function.Injective.semigroupWithZero is a dubious translation:
-lean 3 declaration is
-  forall {M₀ : Type.{u1}} {M₀' : Type.{u2}} [_inst_1 : Zero.{u2} M₀'] [_inst_2 : Mul.{u2} M₀'] [_inst_3 : SemigroupWithZero.{u1} M₀] (f : M₀' -> M₀), (Function.Injective.{succ u2, succ u1} M₀' M₀ f) -> (Eq.{succ u1} M₀ (f (OfNat.ofNat.{u2} M₀' 0 (OfNat.mk.{u2} M₀' 0 (Zero.zero.{u2} M₀' _inst_1)))) (OfNat.ofNat.{u1} M₀ 0 (OfNat.mk.{u1} M₀ 0 (Zero.zero.{u1} M₀ (MulZeroClass.toHasZero.{u1} M₀ (SemigroupWithZero.toMulZeroClass.{u1} M₀ _inst_3)))))) -> (forall (x : M₀') (y : M₀'), Eq.{succ u1} M₀ (f (HMul.hMul.{u2, u2, u2} M₀' M₀' M₀' (instHMul.{u2} M₀' _inst_2) x y)) (HMul.hMul.{u1, u1, u1} M₀ M₀ M₀ (instHMul.{u1} M₀ (MulZeroClass.toHasMul.{u1} M₀ (SemigroupWithZero.toMulZeroClass.{u1} M₀ _inst_3))) (f x) (f y))) -> (SemigroupWithZero.{u2} M₀')
-but is expected to have type
-  forall {M₀ : Type.{u1}} {M₀' : Type.{u2}} [_inst_1 : Zero.{u2} M₀'] [_inst_2 : Mul.{u2} M₀'] [_inst_3 : SemigroupWithZero.{u1} M₀] (f : M₀' -> M₀), (Function.Injective.{succ u2, succ u1} M₀' M₀ f) -> (Eq.{succ u1} M₀ (f (OfNat.ofNat.{u2} M₀' 0 (Zero.toOfNat0.{u2} M₀' _inst_1))) (OfNat.ofNat.{u1} M₀ 0 (Zero.toOfNat0.{u1} M₀ (SemigroupWithZero.toZero.{u1} M₀ _inst_3)))) -> (forall (x : M₀') (y : M₀'), Eq.{succ u1} M₀ (f (HMul.hMul.{u2, u2, u2} M₀' M₀' M₀' (instHMul.{u2} M₀' _inst_2) x y)) (HMul.hMul.{u1, u1, u1} M₀ M₀ M₀ (instHMul.{u1} M₀ (MulZeroClass.toMul.{u1} M₀ (SemigroupWithZero.toMulZeroClass.{u1} M₀ _inst_3))) (f x) (f y))) -> (SemigroupWithZero.{u2} M₀')
-Case conversion may be inaccurate. Consider using '#align function.injective.semigroup_with_zero Function.Injective.semigroupWithZeroₓ'. -/
 /-- Pullback a `semigroup_with_zero` class along an injective function.
 See note [reducible non-instances]. -/
 @[reducible]
@@ -139,12 +103,6 @@ protected def Function.Injective.semigroupWithZero [Zero M₀'] [Mul M₀'] [Sem
   { hf.MulZeroClass f zero mul, ‹Zero M₀'›, hf.Semigroup f mul with }
 #align function.injective.semigroup_with_zero Function.Injective.semigroupWithZero
 
-/- warning: function.surjective.semigroup_with_zero -> Function.Surjective.semigroupWithZero is a dubious translation:
-lean 3 declaration is
-  forall {M₀ : Type.{u1}} {M₀' : Type.{u2}} [_inst_1 : SemigroupWithZero.{u1} M₀] [_inst_2 : Zero.{u2} M₀'] [_inst_3 : Mul.{u2} M₀'] (f : M₀ -> M₀'), (Function.Surjective.{succ u1, succ u2} M₀ M₀' f) -> (Eq.{succ u2} M₀' (f (OfNat.ofNat.{u1} M₀ 0 (OfNat.mk.{u1} M₀ 0 (Zero.zero.{u1} M₀ (MulZeroClass.toHasZero.{u1} M₀ (SemigroupWithZero.toMulZeroClass.{u1} M₀ _inst_1)))))) (OfNat.ofNat.{u2} M₀' 0 (OfNat.mk.{u2} M₀' 0 (Zero.zero.{u2} M₀' _inst_2)))) -> (forall (x : M₀) (y : M₀), Eq.{succ u2} M₀' (f (HMul.hMul.{u1, u1, u1} M₀ M₀ M₀ (instHMul.{u1} M₀ (MulZeroClass.toHasMul.{u1} M₀ (SemigroupWithZero.toMulZeroClass.{u1} M₀ _inst_1))) x y)) (HMul.hMul.{u2, u2, u2} M₀' M₀' M₀' (instHMul.{u2} M₀' _inst_3) (f x) (f y))) -> (SemigroupWithZero.{u2} M₀')
-but is expected to have type
-  forall {M₀ : Type.{u1}} {M₀' : Type.{u2}} [_inst_1 : SemigroupWithZero.{u1} M₀] [_inst_2 : Zero.{u2} M₀'] [_inst_3 : Mul.{u2} M₀'] (f : M₀ -> M₀'), (Function.Surjective.{succ u1, succ u2} M₀ M₀' f) -> (Eq.{succ u2} M₀' (f (OfNat.ofNat.{u1} M₀ 0 (Zero.toOfNat0.{u1} M₀ (SemigroupWithZero.toZero.{u1} M₀ _inst_1)))) (OfNat.ofNat.{u2} M₀' 0 (Zero.toOfNat0.{u2} M₀' _inst_2))) -> (forall (x : M₀) (y : M₀), Eq.{succ u2} M₀' (f (HMul.hMul.{u1, u1, u1} M₀ M₀ M₀ (instHMul.{u1} M₀ (MulZeroClass.toMul.{u1} M₀ (SemigroupWithZero.toMulZeroClass.{u1} M₀ _inst_1))) x y)) (HMul.hMul.{u2, u2, u2} M₀' M₀' M₀' (instHMul.{u2} M₀' _inst_3) (f x) (f y))) -> (SemigroupWithZero.{u2} M₀')
-Case conversion may be inaccurate. Consider using '#align function.surjective.semigroup_with_zero Function.Surjective.semigroupWithZeroₓ'. -/
 /-- Pushforward a `semigroup_with_zero` class along an surjective function.
 See note [reducible non-instances]. -/
 @[reducible]
@@ -158,12 +116,6 @@ end SemigroupWithZero
 
 section MonoidWithZero
 
-/- warning: function.injective.monoid_with_zero -> Function.Injective.monoidWithZero is a dubious translation:
-lean 3 declaration is
-  forall {M₀ : Type.{u1}} {M₀' : Type.{u2}} [_inst_1 : Zero.{u2} M₀'] [_inst_2 : Mul.{u2} M₀'] [_inst_3 : One.{u2} M₀'] [_inst_4 : Pow.{u2, 0} M₀' Nat] [_inst_5 : MonoidWithZero.{u1} M₀] (f : M₀' -> M₀), (Function.Injective.{succ u2, succ u1} M₀' M₀ f) -> (Eq.{succ u1} M₀ (f (OfNat.ofNat.{u2} M₀' 0 (OfNat.mk.{u2} M₀' 0 (Zero.zero.{u2} M₀' _inst_1)))) (OfNat.ofNat.{u1} M₀ 0 (OfNat.mk.{u1} M₀ 0 (Zero.zero.{u1} M₀ (MulZeroClass.toHasZero.{u1} M₀ (MulZeroOneClass.toMulZeroClass.{u1} M₀ (MonoidWithZero.toMulZeroOneClass.{u1} M₀ _inst_5))))))) -> (Eq.{succ u1} M₀ (f (OfNat.ofNat.{u2} M₀' 1 (OfNat.mk.{u2} M₀' 1 (One.one.{u2} M₀' _inst_3)))) (OfNat.ofNat.{u1} M₀ 1 (OfNat.mk.{u1} M₀ 1 (One.one.{u1} M₀ (MulOneClass.toHasOne.{u1} M₀ (MulZeroOneClass.toMulOneClass.{u1} M₀ (MonoidWithZero.toMulZeroOneClass.{u1} M₀ _inst_5))))))) -> (forall (x : M₀') (y : M₀'), Eq.{succ u1} M₀ (f (HMul.hMul.{u2, u2, u2} M₀' M₀' M₀' (instHMul.{u2} M₀' _inst_2) x y)) (HMul.hMul.{u1, u1, u1} M₀ M₀ M₀ (instHMul.{u1} M₀ (MulZeroClass.toHasMul.{u1} M₀ (MulZeroOneClass.toMulZeroClass.{u1} M₀ (MonoidWithZero.toMulZeroOneClass.{u1} M₀ _inst_5)))) (f x) (f y))) -> (forall (x : M₀') (n : Nat), Eq.{succ u1} M₀ (f (HPow.hPow.{u2, 0, u2} M₀' Nat M₀' (instHPow.{u2, 0} M₀' Nat _inst_4) x n)) (HPow.hPow.{u1, 0, u1} M₀ Nat M₀ (instHPow.{u1, 0} M₀ Nat (Monoid.Pow.{u1} M₀ (MonoidWithZero.toMonoid.{u1} M₀ _inst_5))) (f x) n)) -> (MonoidWithZero.{u2} M₀')
-but is expected to have type
-  forall {M₀ : Type.{u1}} {M₀' : Type.{u2}} [_inst_1 : Zero.{u2} M₀'] [_inst_2 : Mul.{u2} M₀'] [_inst_3 : One.{u2} M₀'] [_inst_4 : Pow.{u2, 0} M₀' Nat] [_inst_5 : MonoidWithZero.{u1} M₀] (f : M₀' -> M₀), (Function.Injective.{succ u2, succ u1} M₀' M₀ f) -> (Eq.{succ u1} M₀ (f (OfNat.ofNat.{u2} M₀' 0 (Zero.toOfNat0.{u2} M₀' _inst_1))) (OfNat.ofNat.{u1} M₀ 0 (Zero.toOfNat0.{u1} M₀ (MonoidWithZero.toZero.{u1} M₀ _inst_5)))) -> (Eq.{succ u1} M₀ (f (OfNat.ofNat.{u2} M₀' 1 (One.toOfNat1.{u2} M₀' _inst_3))) (OfNat.ofNat.{u1} M₀ 1 (One.toOfNat1.{u1} M₀ (Monoid.toOne.{u1} M₀ (MonoidWithZero.toMonoid.{u1} M₀ _inst_5))))) -> (forall (x : M₀') (y : M₀'), Eq.{succ u1} M₀ (f (HMul.hMul.{u2, u2, u2} M₀' M₀' M₀' (instHMul.{u2} M₀' _inst_2) x y)) (HMul.hMul.{u1, u1, u1} M₀ M₀ M₀ (instHMul.{u1} M₀ (MulZeroClass.toMul.{u1} M₀ (MulZeroOneClass.toMulZeroClass.{u1} M₀ (MonoidWithZero.toMulZeroOneClass.{u1} M₀ _inst_5)))) (f x) (f y))) -> (forall (x : M₀') (n : Nat), Eq.{succ u1} M₀ (f (HPow.hPow.{u2, 0, u2} M₀' Nat M₀' (instHPow.{u2, 0} M₀' Nat _inst_4) x n)) (HPow.hPow.{u1, 0, u1} M₀ Nat M₀ (instHPow.{u1, 0} M₀ Nat (Monoid.Pow.{u1} M₀ (MonoidWithZero.toMonoid.{u1} M₀ _inst_5))) (f x) n)) -> (MonoidWithZero.{u2} M₀')
-Case conversion may be inaccurate. Consider using '#align function.injective.monoid_with_zero Function.Injective.monoidWithZeroₓ'. -/
 /-- Pullback a `monoid_with_zero` class along an injective function.
 See note [reducible non-instances]. -/
 @[reducible]
@@ -174,12 +126,6 @@ protected def Function.Injective.monoidWithZero [Zero M₀'] [Mul M₀'] [One M
   { hf.Monoid f one mul npow, hf.MulZeroClass f zero mul with }
 #align function.injective.monoid_with_zero Function.Injective.monoidWithZero
 
-/- warning: function.surjective.monoid_with_zero -> Function.Surjective.monoidWithZero is a dubious translation:
-lean 3 declaration is
-  forall {M₀ : Type.{u1}} {M₀' : Type.{u2}} [_inst_1 : Zero.{u2} M₀'] [_inst_2 : Mul.{u2} M₀'] [_inst_3 : One.{u2} M₀'] [_inst_4 : Pow.{u2, 0} M₀' Nat] [_inst_5 : MonoidWithZero.{u1} M₀] (f : M₀ -> M₀'), (Function.Surjective.{succ u1, succ u2} M₀ M₀' f) -> (Eq.{succ u2} M₀' (f (OfNat.ofNat.{u1} M₀ 0 (OfNat.mk.{u1} M₀ 0 (Zero.zero.{u1} M₀ (MulZeroClass.toHasZero.{u1} M₀ (MulZeroOneClass.toMulZeroClass.{u1} M₀ (MonoidWithZero.toMulZeroOneClass.{u1} M₀ _inst_5))))))) (OfNat.ofNat.{u2} M₀' 0 (OfNat.mk.{u2} M₀' 0 (Zero.zero.{u2} M₀' _inst_1)))) -> (Eq.{succ u2} M₀' (f (OfNat.ofNat.{u1} M₀ 1 (OfNat.mk.{u1} M₀ 1 (One.one.{u1} M₀ (MulOneClass.toHasOne.{u1} M₀ (MulZeroOneClass.toMulOneClass.{u1} M₀ (MonoidWithZero.toMulZeroOneClass.{u1} M₀ _inst_5))))))) (OfNat.ofNat.{u2} M₀' 1 (OfNat.mk.{u2} M₀' 1 (One.one.{u2} M₀' _inst_3)))) -> (forall (x : M₀) (y : M₀), Eq.{succ u2} M₀' (f (HMul.hMul.{u1, u1, u1} M₀ M₀ M₀ (instHMul.{u1} M₀ (MulZeroClass.toHasMul.{u1} M₀ (MulZeroOneClass.toMulZeroClass.{u1} M₀ (MonoidWithZero.toMulZeroOneClass.{u1} M₀ _inst_5)))) x y)) (HMul.hMul.{u2, u2, u2} M₀' M₀' M₀' (instHMul.{u2} M₀' _inst_2) (f x) (f y))) -> (forall (x : M₀) (n : Nat), Eq.{succ u2} M₀' (f (HPow.hPow.{u1, 0, u1} M₀ Nat M₀ (instHPow.{u1, 0} M₀ Nat (Monoid.Pow.{u1} M₀ (MonoidWithZero.toMonoid.{u1} M₀ _inst_5))) x n)) (HPow.hPow.{u2, 0, u2} M₀' Nat M₀' (instHPow.{u2, 0} M₀' Nat _inst_4) (f x) n)) -> (MonoidWithZero.{u2} M₀')
-but is expected to have type
-  forall {M₀ : Type.{u1}} {M₀' : Type.{u2}} [_inst_1 : Zero.{u2} M₀'] [_inst_2 : Mul.{u2} M₀'] [_inst_3 : One.{u2} M₀'] [_inst_4 : Pow.{u2, 0} M₀' Nat] [_inst_5 : MonoidWithZero.{u1} M₀] (f : M₀ -> M₀'), (Function.Surjective.{succ u1, succ u2} M₀ M₀' f) -> (Eq.{succ u2} M₀' (f (OfNat.ofNat.{u1} M₀ 0 (Zero.toOfNat0.{u1} M₀ (MonoidWithZero.toZero.{u1} M₀ _inst_5)))) (OfNat.ofNat.{u2} M₀' 0 (Zero.toOfNat0.{u2} M₀' _inst_1))) -> (Eq.{succ u2} M₀' (f (OfNat.ofNat.{u1} M₀ 1 (One.toOfNat1.{u1} M₀ (Monoid.toOne.{u1} M₀ (MonoidWithZero.toMonoid.{u1} M₀ _inst_5))))) (OfNat.ofNat.{u2} M₀' 1 (One.toOfNat1.{u2} M₀' _inst_3))) -> (forall (x : M₀) (y : M₀), Eq.{succ u2} M₀' (f (HMul.hMul.{u1, u1, u1} M₀ M₀ M₀ (instHMul.{u1} M₀ (MulZeroClass.toMul.{u1} M₀ (MulZeroOneClass.toMulZeroClass.{u1} M₀ (MonoidWithZero.toMulZeroOneClass.{u1} M₀ _inst_5)))) x y)) (HMul.hMul.{u2, u2, u2} M₀' M₀' M₀' (instHMul.{u2} M₀' _inst_2) (f x) (f y))) -> (forall (x : M₀) (n : Nat), Eq.{succ u2} M₀' (f (HPow.hPow.{u1, 0, u1} M₀ Nat M₀ (instHPow.{u1, 0} M₀ Nat (Monoid.Pow.{u1} M₀ (MonoidWithZero.toMonoid.{u1} M₀ _inst_5))) x n)) (HPow.hPow.{u2, 0, u2} M₀' Nat M₀' (instHPow.{u2, 0} M₀' Nat _inst_4) (f x) n)) -> (MonoidWithZero.{u2} M₀')
-Case conversion may be inaccurate. Consider using '#align function.surjective.monoid_with_zero Function.Surjective.monoidWithZeroₓ'. -/
 /-- Pushforward a `monoid_with_zero` class along a surjective function.
 See note [reducible non-instances]. -/
 @[reducible]
@@ -190,12 +136,6 @@ protected def Function.Surjective.monoidWithZero [Zero M₀'] [Mul M₀'] [One M
   { hf.Monoid f one mul npow, hf.MulZeroClass f zero mul with }
 #align function.surjective.monoid_with_zero Function.Surjective.monoidWithZero
 
-/- warning: function.injective.comm_monoid_with_zero -> Function.Injective.commMonoidWithZero is a dubious translation:
-lean 3 declaration is
-  forall {M₀ : Type.{u1}} {M₀' : Type.{u2}} [_inst_1 : Zero.{u2} M₀'] [_inst_2 : Mul.{u2} M₀'] [_inst_3 : One.{u2} M₀'] [_inst_4 : Pow.{u2, 0} M₀' Nat] [_inst_5 : CommMonoidWithZero.{u1} M₀] (f : M₀' -> M₀), (Function.Injective.{succ u2, succ u1} M₀' M₀ f) -> (Eq.{succ u1} M₀ (f (OfNat.ofNat.{u2} M₀' 0 (OfNat.mk.{u2} M₀' 0 (Zero.zero.{u2} M₀' _inst_1)))) (OfNat.ofNat.{u1} M₀ 0 (OfNat.mk.{u1} M₀ 0 (Zero.zero.{u1} M₀ (MulZeroClass.toHasZero.{u1} M₀ (MulZeroOneClass.toMulZeroClass.{u1} M₀ (MonoidWithZero.toMulZeroOneClass.{u1} M₀ (CommMonoidWithZero.toMonoidWithZero.{u1} M₀ _inst_5)))))))) -> (Eq.{succ u1} M₀ (f (OfNat.ofNat.{u2} M₀' 1 (OfNat.mk.{u2} M₀' 1 (One.one.{u2} M₀' _inst_3)))) (OfNat.ofNat.{u1} M₀ 1 (OfNat.mk.{u1} M₀ 1 (One.one.{u1} M₀ (MulOneClass.toHasOne.{u1} M₀ (MulZeroOneClass.toMulOneClass.{u1} M₀ (MonoidWithZero.toMulZeroOneClass.{u1} M₀ (CommMonoidWithZero.toMonoidWithZero.{u1} M₀ _inst_5)))))))) -> (forall (x : M₀') (y : M₀'), Eq.{succ u1} M₀ (f (HMul.hMul.{u2, u2, u2} M₀' M₀' M₀' (instHMul.{u2} M₀' _inst_2) x y)) (HMul.hMul.{u1, u1, u1} M₀ M₀ M₀ (instHMul.{u1} M₀ (MulZeroClass.toHasMul.{u1} M₀ (MulZeroOneClass.toMulZeroClass.{u1} M₀ (MonoidWithZero.toMulZeroOneClass.{u1} M₀ (CommMonoidWithZero.toMonoidWithZero.{u1} M₀ _inst_5))))) (f x) (f y))) -> (forall (x : M₀') (n : Nat), Eq.{succ u1} M₀ (f (HPow.hPow.{u2, 0, u2} M₀' Nat M₀' (instHPow.{u2, 0} M₀' Nat _inst_4) x n)) (HPow.hPow.{u1, 0, u1} M₀ Nat M₀ (instHPow.{u1, 0} M₀ Nat (Monoid.Pow.{u1} M₀ (MonoidWithZero.toMonoid.{u1} M₀ (CommMonoidWithZero.toMonoidWithZero.{u1} M₀ _inst_5)))) (f x) n)) -> (CommMonoidWithZero.{u2} M₀')
-but is expected to have type
-  forall {M₀ : Type.{u1}} {M₀' : Type.{u2}} [_inst_1 : Zero.{u2} M₀'] [_inst_2 : Mul.{u2} M₀'] [_inst_3 : One.{u2} M₀'] [_inst_4 : Pow.{u2, 0} M₀' Nat] [_inst_5 : CommMonoidWithZero.{u1} M₀] (f : M₀' -> M₀), (Function.Injective.{succ u2, succ u1} M₀' M₀ f) -> (Eq.{succ u1} M₀ (f (OfNat.ofNat.{u2} M₀' 0 (Zero.toOfNat0.{u2} M₀' _inst_1))) (OfNat.ofNat.{u1} M₀ 0 (Zero.toOfNat0.{u1} M₀ (CommMonoidWithZero.toZero.{u1} M₀ _inst_5)))) -> (Eq.{succ u1} M₀ (f (OfNat.ofNat.{u2} M₀' 1 (One.toOfNat1.{u2} M₀' _inst_3))) (OfNat.ofNat.{u1} M₀ 1 (One.toOfNat1.{u1} M₀ (Monoid.toOne.{u1} M₀ (MonoidWithZero.toMonoid.{u1} M₀ (CommMonoidWithZero.toMonoidWithZero.{u1} M₀ _inst_5)))))) -> (forall (x : M₀') (y : M₀'), Eq.{succ u1} M₀ (f (HMul.hMul.{u2, u2, u2} M₀' M₀' M₀' (instHMul.{u2} M₀' _inst_2) x y)) (HMul.hMul.{u1, u1, u1} M₀ M₀ M₀ (instHMul.{u1} M₀ (MulZeroClass.toMul.{u1} M₀ (MulZeroOneClass.toMulZeroClass.{u1} M₀ (MonoidWithZero.toMulZeroOneClass.{u1} M₀ (CommMonoidWithZero.toMonoidWithZero.{u1} M₀ _inst_5))))) (f x) (f y))) -> (forall (x : M₀') (n : Nat), Eq.{succ u1} M₀ (f (HPow.hPow.{u2, 0, u2} M₀' Nat M₀' (instHPow.{u2, 0} M₀' Nat _inst_4) x n)) (HPow.hPow.{u1, 0, u1} M₀ Nat M₀ (instHPow.{u1, 0} M₀ Nat (Monoid.Pow.{u1} M₀ (MonoidWithZero.toMonoid.{u1} M₀ (CommMonoidWithZero.toMonoidWithZero.{u1} M₀ _inst_5)))) (f x) n)) -> (CommMonoidWithZero.{u2} M₀')
-Case conversion may be inaccurate. Consider using '#align function.injective.comm_monoid_with_zero Function.Injective.commMonoidWithZeroₓ'. -/
 /-- Pullback a `monoid_with_zero` class along an injective function.
 See note [reducible non-instances]. -/
 @[reducible]
@@ -206,12 +146,6 @@ protected def Function.Injective.commMonoidWithZero [Zero M₀'] [Mul M₀'] [On
   { hf.CommMonoid f one mul npow, hf.MulZeroClass f zero mul with }
 #align function.injective.comm_monoid_with_zero Function.Injective.commMonoidWithZero
 
-/- warning: function.surjective.comm_monoid_with_zero -> Function.Surjective.commMonoidWithZero is a dubious translation:
-lean 3 declaration is
-  forall {M₀ : Type.{u1}} {M₀' : Type.{u2}} [_inst_1 : Zero.{u2} M₀'] [_inst_2 : Mul.{u2} M₀'] [_inst_3 : One.{u2} M₀'] [_inst_4 : Pow.{u2, 0} M₀' Nat] [_inst_5 : CommMonoidWithZero.{u1} M₀] (f : M₀ -> M₀'), (Function.Surjective.{succ u1, succ u2} M₀ M₀' f) -> (Eq.{succ u2} M₀' (f (OfNat.ofNat.{u1} M₀ 0 (OfNat.mk.{u1} M₀ 0 (Zero.zero.{u1} M₀ (MulZeroClass.toHasZero.{u1} M₀ (MulZeroOneClass.toMulZeroClass.{u1} M₀ (MonoidWithZero.toMulZeroOneClass.{u1} M₀ (CommMonoidWithZero.toMonoidWithZero.{u1} M₀ _inst_5)))))))) (OfNat.ofNat.{u2} M₀' 0 (OfNat.mk.{u2} M₀' 0 (Zero.zero.{u2} M₀' _inst_1)))) -> (Eq.{succ u2} M₀' (f (OfNat.ofNat.{u1} M₀ 1 (OfNat.mk.{u1} M₀ 1 (One.one.{u1} M₀ (MulOneClass.toHasOne.{u1} M₀ (MulZeroOneClass.toMulOneClass.{u1} M₀ (MonoidWithZero.toMulZeroOneClass.{u1} M₀ (CommMonoidWithZero.toMonoidWithZero.{u1} M₀ _inst_5)))))))) (OfNat.ofNat.{u2} M₀' 1 (OfNat.mk.{u2} M₀' 1 (One.one.{u2} M₀' _inst_3)))) -> (forall (x : M₀) (y : M₀), Eq.{succ u2} M₀' (f (HMul.hMul.{u1, u1, u1} M₀ M₀ M₀ (instHMul.{u1} M₀ (MulZeroClass.toHasMul.{u1} M₀ (MulZeroOneClass.toMulZeroClass.{u1} M₀ (MonoidWithZero.toMulZeroOneClass.{u1} M₀ (CommMonoidWithZero.toMonoidWithZero.{u1} M₀ _inst_5))))) x y)) (HMul.hMul.{u2, u2, u2} M₀' M₀' M₀' (instHMul.{u2} M₀' _inst_2) (f x) (f y))) -> (forall (x : M₀) (n : Nat), Eq.{succ u2} M₀' (f (HPow.hPow.{u1, 0, u1} M₀ Nat M₀ (instHPow.{u1, 0} M₀ Nat (Monoid.Pow.{u1} M₀ (MonoidWithZero.toMonoid.{u1} M₀ (CommMonoidWithZero.toMonoidWithZero.{u1} M₀ _inst_5)))) x n)) (HPow.hPow.{u2, 0, u2} M₀' Nat M₀' (instHPow.{u2, 0} M₀' Nat _inst_4) (f x) n)) -> (CommMonoidWithZero.{u2} M₀')
-but is expected to have type
-  forall {M₀ : Type.{u1}} {M₀' : Type.{u2}} [_inst_1 : Zero.{u2} M₀'] [_inst_2 : Mul.{u2} M₀'] [_inst_3 : One.{u2} M₀'] [_inst_4 : Pow.{u2, 0} M₀' Nat] [_inst_5 : CommMonoidWithZero.{u1} M₀] (f : M₀ -> M₀'), (Function.Surjective.{succ u1, succ u2} M₀ M₀' f) -> (Eq.{succ u2} M₀' (f (OfNat.ofNat.{u1} M₀ 0 (Zero.toOfNat0.{u1} M₀ (CommMonoidWithZero.toZero.{u1} M₀ _inst_5)))) (OfNat.ofNat.{u2} M₀' 0 (Zero.toOfNat0.{u2} M₀' _inst_1))) -> (Eq.{succ u2} M₀' (f (OfNat.ofNat.{u1} M₀ 1 (One.toOfNat1.{u1} M₀ (Monoid.toOne.{u1} M₀ (MonoidWithZero.toMonoid.{u1} M₀ (CommMonoidWithZero.toMonoidWithZero.{u1} M₀ _inst_5)))))) (OfNat.ofNat.{u2} M₀' 1 (One.toOfNat1.{u2} M₀' _inst_3))) -> (forall (x : M₀) (y : M₀), Eq.{succ u2} M₀' (f (HMul.hMul.{u1, u1, u1} M₀ M₀ M₀ (instHMul.{u1} M₀ (MulZeroClass.toMul.{u1} M₀ (MulZeroOneClass.toMulZeroClass.{u1} M₀ (MonoidWithZero.toMulZeroOneClass.{u1} M₀ (CommMonoidWithZero.toMonoidWithZero.{u1} M₀ _inst_5))))) x y)) (HMul.hMul.{u2, u2, u2} M₀' M₀' M₀' (instHMul.{u2} M₀' _inst_2) (f x) (f y))) -> (forall (x : M₀) (n : Nat), Eq.{succ u2} M₀' (f (HPow.hPow.{u1, 0, u1} M₀ Nat M₀ (instHPow.{u1, 0} M₀ Nat (Monoid.Pow.{u1} M₀ (MonoidWithZero.toMonoid.{u1} M₀ (CommMonoidWithZero.toMonoidWithZero.{u1} M₀ _inst_5)))) x n)) (HPow.hPow.{u2, 0, u2} M₀' Nat M₀' (instHPow.{u2, 0} M₀' Nat _inst_4) (f x) n)) -> (CommMonoidWithZero.{u2} M₀')
-Case conversion may be inaccurate. Consider using '#align function.surjective.comm_monoid_with_zero Function.Surjective.commMonoidWithZeroₓ'. -/
 /-- Pushforward a `monoid_with_zero` class along a surjective function.
 See note [reducible non-instances]. -/
 @[reducible]
@@ -228,12 +162,6 @@ section CancelMonoidWithZero
 
 variable [CancelMonoidWithZero M₀] {a b c : M₀}
 
-/- warning: function.injective.cancel_monoid_with_zero -> Function.Injective.cancelMonoidWithZero is a dubious translation:
-lean 3 declaration is
-  forall {M₀ : Type.{u1}} {M₀' : Type.{u2}} [_inst_1 : CancelMonoidWithZero.{u1} M₀] [_inst_2 : Zero.{u2} M₀'] [_inst_3 : Mul.{u2} M₀'] [_inst_4 : One.{u2} M₀'] [_inst_5 : Pow.{u2, 0} M₀' Nat] (f : M₀' -> M₀), (Function.Injective.{succ u2, succ u1} M₀' M₀ f) -> (Eq.{succ u1} M₀ (f (OfNat.ofNat.{u2} M₀' 0 (OfNat.mk.{u2} M₀' 0 (Zero.zero.{u2} M₀' _inst_2)))) (OfNat.ofNat.{u1} M₀ 0 (OfNat.mk.{u1} M₀ 0 (Zero.zero.{u1} M₀ (MulZeroClass.toHasZero.{u1} M₀ (MulZeroOneClass.toMulZeroClass.{u1} M₀ (MonoidWithZero.toMulZeroOneClass.{u1} M₀ (CancelMonoidWithZero.toMonoidWithZero.{u1} M₀ _inst_1)))))))) -> (Eq.{succ u1} M₀ (f (OfNat.ofNat.{u2} M₀' 1 (OfNat.mk.{u2} M₀' 1 (One.one.{u2} M₀' _inst_4)))) (OfNat.ofNat.{u1} M₀ 1 (OfNat.mk.{u1} M₀ 1 (One.one.{u1} M₀ (MulOneClass.toHasOne.{u1} M₀ (MulZeroOneClass.toMulOneClass.{u1} M₀ (MonoidWithZero.toMulZeroOneClass.{u1} M₀ (CancelMonoidWithZero.toMonoidWithZero.{u1} M₀ _inst_1)))))))) -> (forall (x : M₀') (y : M₀'), Eq.{succ u1} M₀ (f (HMul.hMul.{u2, u2, u2} M₀' M₀' M₀' (instHMul.{u2} M₀' _inst_3) x y)) (HMul.hMul.{u1, u1, u1} M₀ M₀ M₀ (instHMul.{u1} M₀ (MulZeroClass.toHasMul.{u1} M₀ (MulZeroOneClass.toMulZeroClass.{u1} M₀ (MonoidWithZero.toMulZeroOneClass.{u1} M₀ (CancelMonoidWithZero.toMonoidWithZero.{u1} M₀ _inst_1))))) (f x) (f y))) -> (forall (x : M₀') (n : Nat), Eq.{succ u1} M₀ (f (HPow.hPow.{u2, 0, u2} M₀' Nat M₀' (instHPow.{u2, 0} M₀' Nat _inst_5) x n)) (HPow.hPow.{u1, 0, u1} M₀ Nat M₀ (instHPow.{u1, 0} M₀ Nat (Monoid.Pow.{u1} M₀ (MonoidWithZero.toMonoid.{u1} M₀ (CancelMonoidWithZero.toMonoidWithZero.{u1} M₀ _inst_1)))) (f x) n)) -> (CancelMonoidWithZero.{u2} M₀')
-but is expected to have type
-  forall {M₀ : Type.{u1}} {M₀' : Type.{u2}} [_inst_1 : CancelMonoidWithZero.{u1} M₀] [_inst_2 : Zero.{u2} M₀'] [_inst_3 : Mul.{u2} M₀'] [_inst_4 : One.{u2} M₀'] [_inst_5 : Pow.{u2, 0} M₀' Nat] (f : M₀' -> M₀), (Function.Injective.{succ u2, succ u1} M₀' M₀ f) -> (Eq.{succ u1} M₀ (f (OfNat.ofNat.{u2} M₀' 0 (Zero.toOfNat0.{u2} M₀' _inst_2))) (OfNat.ofNat.{u1} M₀ 0 (Zero.toOfNat0.{u1} M₀ (MonoidWithZero.toZero.{u1} M₀ (CancelMonoidWithZero.toMonoidWithZero.{u1} M₀ _inst_1))))) -> (Eq.{succ u1} M₀ (f (OfNat.ofNat.{u2} M₀' 1 (One.toOfNat1.{u2} M₀' _inst_4))) (OfNat.ofNat.{u1} M₀ 1 (One.toOfNat1.{u1} M₀ (Monoid.toOne.{u1} M₀ (MonoidWithZero.toMonoid.{u1} M₀ (CancelMonoidWithZero.toMonoidWithZero.{u1} M₀ _inst_1)))))) -> (forall (x : M₀') (y : M₀'), Eq.{succ u1} M₀ (f (HMul.hMul.{u2, u2, u2} M₀' M₀' M₀' (instHMul.{u2} M₀' _inst_3) x y)) (HMul.hMul.{u1, u1, u1} M₀ M₀ M₀ (instHMul.{u1} M₀ (MulZeroClass.toMul.{u1} M₀ (MulZeroOneClass.toMulZeroClass.{u1} M₀ (MonoidWithZero.toMulZeroOneClass.{u1} M₀ (CancelMonoidWithZero.toMonoidWithZero.{u1} M₀ _inst_1))))) (f x) (f y))) -> (forall (x : M₀') (n : Nat), Eq.{succ u1} M₀ (f (HPow.hPow.{u2, 0, u2} M₀' Nat M₀' (instHPow.{u2, 0} M₀' Nat _inst_5) x n)) (HPow.hPow.{u1, 0, u1} M₀ Nat M₀ (instHPow.{u1, 0} M₀ Nat (Monoid.Pow.{u1} M₀ (MonoidWithZero.toMonoid.{u1} M₀ (CancelMonoidWithZero.toMonoidWithZero.{u1} M₀ _inst_1)))) (f x) n)) -> (CancelMonoidWithZero.{u2} M₀')
-Case conversion may be inaccurate. Consider using '#align function.injective.cancel_monoid_with_zero Function.Injective.cancelMonoidWithZeroₓ'. -/
 /-- Pullback a `monoid_with_zero` class along an injective function.
 See note [reducible non-instances]. -/
 @[reducible]
@@ -256,12 +184,6 @@ section CancelCommMonoidWithZero
 
 variable [CancelCommMonoidWithZero M₀] {a b c : M₀}
 
-/- warning: function.injective.cancel_comm_monoid_with_zero -> Function.Injective.cancelCommMonoidWithZero is a dubious translation:
-lean 3 declaration is
-  forall {M₀ : Type.{u1}} {M₀' : Type.{u2}} [_inst_1 : CancelCommMonoidWithZero.{u1} M₀] [_inst_2 : Zero.{u2} M₀'] [_inst_3 : Mul.{u2} M₀'] [_inst_4 : One.{u2} M₀'] [_inst_5 : Pow.{u2, 0} M₀' Nat] (f : M₀' -> M₀), (Function.Injective.{succ u2, succ u1} M₀' M₀ f) -> (Eq.{succ u1} M₀ (f (OfNat.ofNat.{u2} M₀' 0 (OfNat.mk.{u2} M₀' 0 (Zero.zero.{u2} M₀' _inst_2)))) (OfNat.ofNat.{u1} M₀ 0 (OfNat.mk.{u1} M₀ 0 (Zero.zero.{u1} M₀ (MulZeroClass.toHasZero.{u1} M₀ (MulZeroOneClass.toMulZeroClass.{u1} M₀ (MonoidWithZero.toMulZeroOneClass.{u1} M₀ (CommMonoidWithZero.toMonoidWithZero.{u1} M₀ (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} M₀ _inst_1))))))))) -> (Eq.{succ u1} M₀ (f (OfNat.ofNat.{u2} M₀' 1 (OfNat.mk.{u2} M₀' 1 (One.one.{u2} M₀' _inst_4)))) (OfNat.ofNat.{u1} M₀ 1 (OfNat.mk.{u1} M₀ 1 (One.one.{u1} M₀ (MulOneClass.toHasOne.{u1} M₀ (MulZeroOneClass.toMulOneClass.{u1} M₀ (MonoidWithZero.toMulZeroOneClass.{u1} M₀ (CommMonoidWithZero.toMonoidWithZero.{u1} M₀ (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} M₀ _inst_1))))))))) -> (forall (x : M₀') (y : M₀'), Eq.{succ u1} M₀ (f (HMul.hMul.{u2, u2, u2} M₀' M₀' M₀' (instHMul.{u2} M₀' _inst_3) x y)) (HMul.hMul.{u1, u1, u1} M₀ M₀ M₀ (instHMul.{u1} M₀ (MulZeroClass.toHasMul.{u1} M₀ (MulZeroOneClass.toMulZeroClass.{u1} M₀ (MonoidWithZero.toMulZeroOneClass.{u1} M₀ (CommMonoidWithZero.toMonoidWithZero.{u1} M₀ (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} M₀ _inst_1)))))) (f x) (f y))) -> (forall (x : M₀') (n : Nat), Eq.{succ u1} M₀ (f (HPow.hPow.{u2, 0, u2} M₀' Nat M₀' (instHPow.{u2, 0} M₀' Nat _inst_5) x n)) (HPow.hPow.{u1, 0, u1} M₀ Nat M₀ (instHPow.{u1, 0} M₀ Nat (Monoid.Pow.{u1} M₀ (MonoidWithZero.toMonoid.{u1} M₀ (CommMonoidWithZero.toMonoidWithZero.{u1} M₀ (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} M₀ _inst_1))))) (f x) n)) -> (CancelCommMonoidWithZero.{u2} M₀')
-but is expected to have type
-  forall {M₀ : Type.{u1}} {M₀' : Type.{u2}} [_inst_1 : CancelCommMonoidWithZero.{u1} M₀] [_inst_2 : Zero.{u2} M₀'] [_inst_3 : Mul.{u2} M₀'] [_inst_4 : One.{u2} M₀'] [_inst_5 : Pow.{u2, 0} M₀' Nat] (f : M₀' -> M₀), (Function.Injective.{succ u2, succ u1} M₀' M₀ f) -> (Eq.{succ u1} M₀ (f (OfNat.ofNat.{u2} M₀' 0 (Zero.toOfNat0.{u2} M₀' _inst_2))) (OfNat.ofNat.{u1} M₀ 0 (Zero.toOfNat0.{u1} M₀ (CommMonoidWithZero.toZero.{u1} M₀ (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} M₀ _inst_1))))) -> (Eq.{succ u1} M₀ (f (OfNat.ofNat.{u2} M₀' 1 (One.toOfNat1.{u2} M₀' _inst_4))) (OfNat.ofNat.{u1} M₀ 1 (One.toOfNat1.{u1} M₀ (Monoid.toOne.{u1} M₀ (MonoidWithZero.toMonoid.{u1} M₀ (CommMonoidWithZero.toMonoidWithZero.{u1} M₀ (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} M₀ _inst_1))))))) -> (forall (x : M₀') (y : M₀'), Eq.{succ u1} M₀ (f (HMul.hMul.{u2, u2, u2} M₀' M₀' M₀' (instHMul.{u2} M₀' _inst_3) x y)) (HMul.hMul.{u1, u1, u1} M₀ M₀ M₀ (instHMul.{u1} M₀ (MulZeroClass.toMul.{u1} M₀ (MulZeroOneClass.toMulZeroClass.{u1} M₀ (MonoidWithZero.toMulZeroOneClass.{u1} M₀ (CommMonoidWithZero.toMonoidWithZero.{u1} M₀ (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} M₀ _inst_1)))))) (f x) (f y))) -> (forall (x : M₀') (n : Nat), Eq.{succ u1} M₀ (f (HPow.hPow.{u2, 0, u2} M₀' Nat M₀' (instHPow.{u2, 0} M₀' Nat _inst_5) x n)) (HPow.hPow.{u1, 0, u1} M₀ Nat M₀ (instHPow.{u1, 0} M₀ Nat (Monoid.Pow.{u1} M₀ (MonoidWithZero.toMonoid.{u1} M₀ (CommMonoidWithZero.toMonoidWithZero.{u1} M₀ (CancelCommMonoidWithZero.toCommMonoidWithZero.{u1} M₀ _inst_1))))) (f x) n)) -> (CancelCommMonoidWithZero.{u2} M₀')
-Case conversion may be inaccurate. Consider using '#align function.injective.cancel_comm_monoid_with_zero Function.Injective.cancelCommMonoidWithZeroₓ'. -/
 /-- Pullback a `cancel_comm_monoid_with_zero` class along an injective function.
 See note [reducible non-instances]. -/
 @[reducible]
@@ -278,12 +200,6 @@ section GroupWithZero
 
 variable [GroupWithZero G₀] {a b c g h x : G₀}
 
-/- warning: function.injective.group_with_zero -> Function.Injective.groupWithZero is a dubious translation:
-lean 3 declaration is
-  forall {G₀ : Type.{u1}} {G₀' : Type.{u2}} [_inst_1 : GroupWithZero.{u1} G₀] [_inst_2 : Zero.{u2} G₀'] [_inst_3 : Mul.{u2} G₀'] [_inst_4 : One.{u2} G₀'] [_inst_5 : Inv.{u2} G₀'] [_inst_6 : Div.{u2} G₀'] [_inst_7 : Pow.{u2, 0} G₀' Nat] [_inst_8 : Pow.{u2, 0} G₀' Int] (f : G₀' -> G₀), (Function.Injective.{succ u2, succ u1} G₀' G₀ f) -> (Eq.{succ u1} G₀ (f (OfNat.ofNat.{u2} G₀' 0 (OfNat.mk.{u2} G₀' 0 (Zero.zero.{u2} G₀' _inst_2)))) (OfNat.ofNat.{u1} G₀ 0 (OfNat.mk.{u1} G₀ 0 (Zero.zero.{u1} G₀ (MulZeroClass.toHasZero.{u1} G₀ (MulZeroOneClass.toMulZeroClass.{u1} G₀ (MonoidWithZero.toMulZeroOneClass.{u1} G₀ (GroupWithZero.toMonoidWithZero.{u1} G₀ _inst_1)))))))) -> (Eq.{succ u1} G₀ (f (OfNat.ofNat.{u2} G₀' 1 (OfNat.mk.{u2} G₀' 1 (One.one.{u2} G₀' _inst_4)))) (OfNat.ofNat.{u1} G₀ 1 (OfNat.mk.{u1} G₀ 1 (One.one.{u1} G₀ (MulOneClass.toHasOne.{u1} G₀ (MulZeroOneClass.toMulOneClass.{u1} G₀ (MonoidWithZero.toMulZeroOneClass.{u1} G₀ (GroupWithZero.toMonoidWithZero.{u1} G₀ _inst_1)))))))) -> (forall (x : G₀') (y : G₀'), Eq.{succ u1} G₀ (f (HMul.hMul.{u2, u2, u2} G₀' G₀' G₀' (instHMul.{u2} G₀' _inst_3) x y)) (HMul.hMul.{u1, u1, u1} G₀ G₀ G₀ (instHMul.{u1} G₀ (MulZeroClass.toHasMul.{u1} G₀ (MulZeroOneClass.toMulZeroClass.{u1} G₀ (MonoidWithZero.toMulZeroOneClass.{u1} G₀ (GroupWithZero.toMonoidWithZero.{u1} G₀ _inst_1))))) (f x) (f y))) -> (forall (x : G₀'), Eq.{succ u1} G₀ (f (Inv.inv.{u2} G₀' _inst_5 x)) (Inv.inv.{u1} G₀ (DivInvMonoid.toHasInv.{u1} G₀ (GroupWithZero.toDivInvMonoid.{u1} G₀ _inst_1)) (f x))) -> (forall (x : G₀') (y : G₀'), Eq.{succ u1} G₀ (f (HDiv.hDiv.{u2, u2, u2} G₀' G₀' G₀' (instHDiv.{u2} G₀' _inst_6) x y)) (HDiv.hDiv.{u1, u1, u1} G₀ G₀ G₀ (instHDiv.{u1} G₀ (DivInvMonoid.toHasDiv.{u1} G₀ (GroupWithZero.toDivInvMonoid.{u1} G₀ _inst_1))) (f x) (f y))) -> (forall (x : G₀') (n : Nat), Eq.{succ u1} G₀ (f (HPow.hPow.{u2, 0, u2} G₀' Nat G₀' (instHPow.{u2, 0} G₀' Nat _inst_7) x n)) (HPow.hPow.{u1, 0, u1} G₀ Nat G₀ (instHPow.{u1, 0} G₀ Nat (Monoid.Pow.{u1} G₀ (MonoidWithZero.toMonoid.{u1} G₀ (GroupWithZero.toMonoidWithZero.{u1} G₀ _inst_1)))) (f x) n)) -> (forall (x : G₀') (n : Int), Eq.{succ u1} G₀ (f (HPow.hPow.{u2, 0, u2} G₀' Int G₀' (instHPow.{u2, 0} G₀' Int _inst_8) x n)) (HPow.hPow.{u1, 0, u1} G₀ Int G₀ (instHPow.{u1, 0} G₀ Int (DivInvMonoid.Pow.{u1} G₀ (GroupWithZero.toDivInvMonoid.{u1} G₀ _inst_1))) (f x) n)) -> (GroupWithZero.{u2} G₀')
-but is expected to have type
-  forall {G₀ : Type.{u1}} {G₀' : Type.{u2}} [_inst_1 : GroupWithZero.{u1} G₀] [_inst_2 : Zero.{u2} G₀'] [_inst_3 : Mul.{u2} G₀'] [_inst_4 : One.{u2} G₀'] [_inst_5 : Inv.{u2} G₀'] [_inst_6 : Div.{u2} G₀'] [_inst_7 : Pow.{u2, 0} G₀' Nat] [_inst_8 : Pow.{u2, 0} G₀' Int] (f : G₀' -> G₀), (Function.Injective.{succ u2, succ u1} G₀' G₀ f) -> (Eq.{succ u1} G₀ (f (OfNat.ofNat.{u2} G₀' 0 (Zero.toOfNat0.{u2} G₀' _inst_2))) (OfNat.ofNat.{u1} G₀ 0 (Zero.toOfNat0.{u1} G₀ (MonoidWithZero.toZero.{u1} G₀ (GroupWithZero.toMonoidWithZero.{u1} G₀ _inst_1))))) -> (Eq.{succ u1} G₀ (f (OfNat.ofNat.{u2} G₀' 1 (One.toOfNat1.{u2} G₀' _inst_4))) (OfNat.ofNat.{u1} G₀ 1 (One.toOfNat1.{u1} G₀ (Monoid.toOne.{u1} G₀ (MonoidWithZero.toMonoid.{u1} G₀ (GroupWithZero.toMonoidWithZero.{u1} G₀ _inst_1)))))) -> (forall (x : G₀') (y : G₀'), Eq.{succ u1} G₀ (f (HMul.hMul.{u2, u2, u2} G₀' G₀' G₀' (instHMul.{u2} G₀' _inst_3) x y)) (HMul.hMul.{u1, u1, u1} G₀ G₀ G₀ (instHMul.{u1} G₀ (MulZeroClass.toMul.{u1} G₀ (MulZeroOneClass.toMulZeroClass.{u1} G₀ (MonoidWithZero.toMulZeroOneClass.{u1} G₀ (GroupWithZero.toMonoidWithZero.{u1} G₀ _inst_1))))) (f x) (f y))) -> (forall (x : G₀'), Eq.{succ u1} G₀ (f (Inv.inv.{u2} G₀' _inst_5 x)) (Inv.inv.{u1} G₀ (GroupWithZero.toInv.{u1} G₀ _inst_1) (f x))) -> (forall (x : G₀') (y : G₀'), Eq.{succ u1} G₀ (f (HDiv.hDiv.{u2, u2, u2} G₀' G₀' G₀' (instHDiv.{u2} G₀' _inst_6) x y)) (HDiv.hDiv.{u1, u1, u1} G₀ G₀ G₀ (instHDiv.{u1} G₀ (GroupWithZero.toDiv.{u1} G₀ _inst_1)) (f x) (f y))) -> (forall (x : G₀') (n : Nat), Eq.{succ u1} G₀ (f (HPow.hPow.{u2, 0, u2} G₀' Nat G₀' (instHPow.{u2, 0} G₀' Nat _inst_7) x n)) (HPow.hPow.{u1, 0, u1} G₀ Nat G₀ (instHPow.{u1, 0} G₀ Nat (Monoid.Pow.{u1} G₀ (MonoidWithZero.toMonoid.{u1} G₀ (GroupWithZero.toMonoidWithZero.{u1} G₀ _inst_1)))) (f x) n)) -> (forall (x : G₀') (n : Int), Eq.{succ u1} G₀ (f (HPow.hPow.{u2, 0, u2} G₀' Int G₀' (instHPow.{u2, 0} G₀' Int _inst_8) x n)) (HPow.hPow.{u1, 0, u1} G₀ Int G₀ (instHPow.{u1, 0} G₀ Int (DivInvMonoid.Pow.{u1} G₀ (GroupWithZero.toDivInvMonoid.{u1} G₀ _inst_1))) (f x) n)) -> (GroupWithZero.{u2} G₀')
-Case conversion may be inaccurate. Consider using '#align function.injective.group_with_zero Function.Injective.groupWithZeroₓ'. -/
 /-- Pullback a `group_with_zero` class along an injective function.
 See note [reducible non-instances]. -/
 @[reducible]
@@ -300,9 +216,6 @@ protected def Function.Injective.groupWithZero [Zero G₀'] [Mul G₀'] [One G
       hf <| by erw [one, mul, inv, mul_inv_cancel ((hf.ne_iff' zero).2 hx)] }
 #align function.injective.group_with_zero Function.Injective.groupWithZero
 
-/- warning: function.surjective.group_with_zero -> Function.Surjective.groupWithZero is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align function.surjective.group_with_zero Function.Surjective.groupWithZeroₓ'. -/
 /-- Pushforward a `group_with_zero` class along an surjective function.
 See note [reducible non-instances]. -/
 @[reducible]
@@ -329,12 +242,6 @@ section CommGroupWithZero
 
 variable [CommGroupWithZero G₀] {a b c d : G₀}
 
-/- warning: function.injective.comm_group_with_zero -> Function.Injective.commGroupWithZero is a dubious translation:
-lean 3 declaration is
-  forall {G₀ : Type.{u1}} {G₀' : Type.{u2}} [_inst_1 : CommGroupWithZero.{u1} G₀] [_inst_2 : Zero.{u2} G₀'] [_inst_3 : Mul.{u2} G₀'] [_inst_4 : One.{u2} G₀'] [_inst_5 : Inv.{u2} G₀'] [_inst_6 : Div.{u2} G₀'] [_inst_7 : Pow.{u2, 0} G₀' Nat] [_inst_8 : Pow.{u2, 0} G₀' Int] (f : G₀' -> G₀), (Function.Injective.{succ u2, succ u1} G₀' G₀ f) -> (Eq.{succ u1} G₀ (f (OfNat.ofNat.{u2} G₀' 0 (OfNat.mk.{u2} G₀' 0 (Zero.zero.{u2} G₀' _inst_2)))) (OfNat.ofNat.{u1} G₀ 0 (OfNat.mk.{u1} G₀ 0 (Zero.zero.{u1} G₀ (MulZeroClass.toHasZero.{u1} G₀ (MulZeroOneClass.toMulZeroClass.{u1} G₀ (MonoidWithZero.toMulZeroOneClass.{u1} G₀ (GroupWithZero.toMonoidWithZero.{u1} G₀ (CommGroupWithZero.toGroupWithZero.{u1} G₀ _inst_1))))))))) -> (Eq.{succ u1} G₀ (f (OfNat.ofNat.{u2} G₀' 1 (OfNat.mk.{u2} G₀' 1 (One.one.{u2} G₀' _inst_4)))) (OfNat.ofNat.{u1} G₀ 1 (OfNat.mk.{u1} G₀ 1 (One.one.{u1} G₀ (MulOneClass.toHasOne.{u1} G₀ (MulZeroOneClass.toMulOneClass.{u1} G₀ (MonoidWithZero.toMulZeroOneClass.{u1} G₀ (GroupWithZero.toMonoidWithZero.{u1} G₀ (CommGroupWithZero.toGroupWithZero.{u1} G₀ _inst_1))))))))) -> (forall (x : G₀') (y : G₀'), Eq.{succ u1} G₀ (f (HMul.hMul.{u2, u2, u2} G₀' G₀' G₀' (instHMul.{u2} G₀' _inst_3) x y)) (HMul.hMul.{u1, u1, u1} G₀ G₀ G₀ (instHMul.{u1} G₀ (MulZeroClass.toHasMul.{u1} G₀ (MulZeroOneClass.toMulZeroClass.{u1} G₀ (MonoidWithZero.toMulZeroOneClass.{u1} G₀ (GroupWithZero.toMonoidWithZero.{u1} G₀ (CommGroupWithZero.toGroupWithZero.{u1} G₀ _inst_1)))))) (f x) (f y))) -> (forall (x : G₀'), Eq.{succ u1} G₀ (f (Inv.inv.{u2} G₀' _inst_5 x)) (Inv.inv.{u1} G₀ (DivInvMonoid.toHasInv.{u1} G₀ (GroupWithZero.toDivInvMonoid.{u1} G₀ (CommGroupWithZero.toGroupWithZero.{u1} G₀ _inst_1))) (f x))) -> (forall (x : G₀') (y : G₀'), Eq.{succ u1} G₀ (f (HDiv.hDiv.{u2, u2, u2} G₀' G₀' G₀' (instHDiv.{u2} G₀' _inst_6) x y)) (HDiv.hDiv.{u1, u1, u1} G₀ G₀ G₀ (instHDiv.{u1} G₀ (DivInvMonoid.toHasDiv.{u1} G₀ (GroupWithZero.toDivInvMonoid.{u1} G₀ (CommGroupWithZero.toGroupWithZero.{u1} G₀ _inst_1)))) (f x) (f y))) -> (forall (x : G₀') (n : Nat), Eq.{succ u1} G₀ (f (HPow.hPow.{u2, 0, u2} G₀' Nat G₀' (instHPow.{u2, 0} G₀' Nat _inst_7) x n)) (HPow.hPow.{u1, 0, u1} G₀ Nat G₀ (instHPow.{u1, 0} G₀ Nat (Monoid.Pow.{u1} G₀ (MonoidWithZero.toMonoid.{u1} G₀ (GroupWithZero.toMonoidWithZero.{u1} G₀ (CommGroupWithZero.toGroupWithZero.{u1} G₀ _inst_1))))) (f x) n)) -> (forall (x : G₀') (n : Int), Eq.{succ u1} G₀ (f (HPow.hPow.{u2, 0, u2} G₀' Int G₀' (instHPow.{u2, 0} G₀' Int _inst_8) x n)) (HPow.hPow.{u1, 0, u1} G₀ Int G₀ (instHPow.{u1, 0} G₀ Int (DivInvMonoid.Pow.{u1} G₀ (GroupWithZero.toDivInvMonoid.{u1} G₀ (CommGroupWithZero.toGroupWithZero.{u1} G₀ _inst_1)))) (f x) n)) -> (CommGroupWithZero.{u2} G₀')
-but is expected to have type
-  forall {G₀ : Type.{u1}} {G₀' : Type.{u2}} [_inst_1 : CommGroupWithZero.{u1} G₀] [_inst_2 : Zero.{u2} G₀'] [_inst_3 : Mul.{u2} G₀'] [_inst_4 : One.{u2} G₀'] [_inst_5 : Inv.{u2} G₀'] [_inst_6 : Div.{u2} G₀'] [_inst_7 : Pow.{u2, 0} G₀' Nat] [_inst_8 : Pow.{u2, 0} G₀' Int] (f : G₀' -> G₀), (Function.Injective.{succ u2, succ u1} G₀' G₀ f) -> (Eq.{succ u1} G₀ (f (OfNat.ofNat.{u2} G₀' 0 (Zero.toOfNat0.{u2} G₀' _inst_2))) (OfNat.ofNat.{u1} G₀ 0 (Zero.toOfNat0.{u1} G₀ (CommMonoidWithZero.toZero.{u1} G₀ (CommGroupWithZero.toCommMonoidWithZero.{u1} G₀ _inst_1))))) -> (Eq.{succ u1} G₀ (f (OfNat.ofNat.{u2} G₀' 1 (One.toOfNat1.{u2} G₀' _inst_4))) (OfNat.ofNat.{u1} G₀ 1 (One.toOfNat1.{u1} G₀ (Monoid.toOne.{u1} G₀ (MonoidWithZero.toMonoid.{u1} G₀ (GroupWithZero.toMonoidWithZero.{u1} G₀ (CommGroupWithZero.toGroupWithZero.{u1} G₀ _inst_1))))))) -> (forall (x : G₀') (y : G₀'), Eq.{succ u1} G₀ (f (HMul.hMul.{u2, u2, u2} G₀' G₀' G₀' (instHMul.{u2} G₀' _inst_3) x y)) (HMul.hMul.{u1, u1, u1} G₀ G₀ G₀ (instHMul.{u1} G₀ (MulZeroClass.toMul.{u1} G₀ (MulZeroOneClass.toMulZeroClass.{u1} G₀ (MonoidWithZero.toMulZeroOneClass.{u1} G₀ (GroupWithZero.toMonoidWithZero.{u1} G₀ (CommGroupWithZero.toGroupWithZero.{u1} G₀ _inst_1)))))) (f x) (f y))) -> (forall (x : G₀'), Eq.{succ u1} G₀ (f (Inv.inv.{u2} G₀' _inst_5 x)) (Inv.inv.{u1} G₀ (CommGroupWithZero.toInv.{u1} G₀ _inst_1) (f x))) -> (forall (x : G₀') (y : G₀'), Eq.{succ u1} G₀ (f (HDiv.hDiv.{u2, u2, u2} G₀' G₀' G₀' (instHDiv.{u2} G₀' _inst_6) x y)) (HDiv.hDiv.{u1, u1, u1} G₀ G₀ G₀ (instHDiv.{u1} G₀ (CommGroupWithZero.toDiv.{u1} G₀ _inst_1)) (f x) (f y))) -> (forall (x : G₀') (n : Nat), Eq.{succ u1} G₀ (f (HPow.hPow.{u2, 0, u2} G₀' Nat G₀' (instHPow.{u2, 0} G₀' Nat _inst_7) x n)) (HPow.hPow.{u1, 0, u1} G₀ Nat G₀ (instHPow.{u1, 0} G₀ Nat (Monoid.Pow.{u1} G₀ (MonoidWithZero.toMonoid.{u1} G₀ (GroupWithZero.toMonoidWithZero.{u1} G₀ (CommGroupWithZero.toGroupWithZero.{u1} G₀ _inst_1))))) (f x) n)) -> (forall (x : G₀') (n : Int), Eq.{succ u1} G₀ (f (HPow.hPow.{u2, 0, u2} G₀' Int G₀' (instHPow.{u2, 0} G₀' Int _inst_8) x n)) (HPow.hPow.{u1, 0, u1} G₀ Int G₀ (instHPow.{u1, 0} G₀ Int (DivInvMonoid.Pow.{u1} G₀ (GroupWithZero.toDivInvMonoid.{u1} G₀ (CommGroupWithZero.toGroupWithZero.{u1} G₀ _inst_1)))) (f x) n)) -> (CommGroupWithZero.{u2} G₀')
-Case conversion may be inaccurate. Consider using '#align function.injective.comm_group_with_zero Function.Injective.commGroupWithZeroₓ'. -/
 /-- Pullback a `comm_group_with_zero` class along an injective function.
 See note [reducible non-instances]. -/
 @[reducible]
@@ -346,9 +253,6 @@ protected def Function.Injective.commGroupWithZero [Zero G₀'] [Mul G₀'] [One
   { hf.GroupWithZero f zero one mul inv div npow zpow, hf.CommSemigroup f mul with }
 #align function.injective.comm_group_with_zero Function.Injective.commGroupWithZero
 
-/- warning: function.surjective.comm_group_with_zero -> Function.Surjective.commGroupWithZero is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align function.surjective.comm_group_with_zero Function.Surjective.commGroupWithZeroₓ'. -/
 /-- Pushforward a `comm_group_with_zero` class along a surjective function. -/
 protected def Function.Surjective.commGroupWithZero [Zero G₀'] [Mul G₀'] [One G₀'] [Inv G₀']
     [Div G₀'] [Pow G₀' ℕ] [Pow G₀' ℤ] (h01 : (0 : G₀') ≠ 1) (f : G₀ → G₀') (hf : Surjective f)
Diff
@@ -301,10 +301,7 @@ protected def Function.Injective.groupWithZero [Zero G₀'] [Mul G₀'] [One G
 #align function.injective.group_with_zero Function.Injective.groupWithZero
 
 /- warning: function.surjective.group_with_zero -> Function.Surjective.groupWithZero is a dubious translation:
-lean 3 declaration is
-  forall {G₀ : Type.{u1}} {G₀' : Type.{u2}} [_inst_1 : GroupWithZero.{u1} G₀] [_inst_2 : Zero.{u2} G₀'] [_inst_3 : Mul.{u2} G₀'] [_inst_4 : One.{u2} G₀'] [_inst_5 : Inv.{u2} G₀'] [_inst_6 : Div.{u2} G₀'] [_inst_7 : Pow.{u2, 0} G₀' Nat] [_inst_8 : Pow.{u2, 0} G₀' Int], (Ne.{succ u2} G₀' (OfNat.ofNat.{u2} G₀' 0 (OfNat.mk.{u2} G₀' 0 (Zero.zero.{u2} G₀' _inst_2))) (OfNat.ofNat.{u2} G₀' 1 (OfNat.mk.{u2} G₀' 1 (One.one.{u2} G₀' _inst_4)))) -> (forall (f : G₀ -> G₀'), (Function.Surjective.{succ u1, succ u2} G₀ G₀' f) -> (Eq.{succ u2} G₀' (f (OfNat.ofNat.{u1} G₀ 0 (OfNat.mk.{u1} G₀ 0 (Zero.zero.{u1} G₀ (MulZeroClass.toHasZero.{u1} G₀ (MulZeroOneClass.toMulZeroClass.{u1} G₀ (MonoidWithZero.toMulZeroOneClass.{u1} G₀ (GroupWithZero.toMonoidWithZero.{u1} G₀ _inst_1)))))))) (OfNat.ofNat.{u2} G₀' 0 (OfNat.mk.{u2} G₀' 0 (Zero.zero.{u2} G₀' _inst_2)))) -> (Eq.{succ u2} G₀' (f (OfNat.ofNat.{u1} G₀ 1 (OfNat.mk.{u1} G₀ 1 (One.one.{u1} G₀ (MulOneClass.toHasOne.{u1} G₀ (MulZeroOneClass.toMulOneClass.{u1} G₀ (MonoidWithZero.toMulZeroOneClass.{u1} G₀ (GroupWithZero.toMonoidWithZero.{u1} G₀ _inst_1)))))))) (OfNat.ofNat.{u2} G₀' 1 (OfNat.mk.{u2} G₀' 1 (One.one.{u2} G₀' _inst_4)))) -> (forall (x : G₀) (y : G₀), Eq.{succ u2} G₀' (f (HMul.hMul.{u1, u1, u1} G₀ G₀ G₀ (instHMul.{u1} G₀ (MulZeroClass.toHasMul.{u1} G₀ (MulZeroOneClass.toMulZeroClass.{u1} G₀ (MonoidWithZero.toMulZeroOneClass.{u1} G₀ (GroupWithZero.toMonoidWithZero.{u1} G₀ _inst_1))))) x y)) (HMul.hMul.{u2, u2, u2} G₀' G₀' G₀' (instHMul.{u2} G₀' _inst_3) (f x) (f y))) -> (forall (x : G₀), Eq.{succ u2} G₀' (f (Inv.inv.{u1} G₀ (DivInvMonoid.toHasInv.{u1} G₀ (GroupWithZero.toDivInvMonoid.{u1} G₀ _inst_1)) x)) (Inv.inv.{u2} G₀' _inst_5 (f x))) -> (forall (x : G₀) (y : G₀), Eq.{succ u2} G₀' (f (HDiv.hDiv.{u1, u1, u1} G₀ G₀ G₀ (instHDiv.{u1} G₀ (DivInvMonoid.toHasDiv.{u1} G₀ (GroupWithZero.toDivInvMonoid.{u1} G₀ _inst_1))) x y)) (HDiv.hDiv.{u2, u2, u2} G₀' G₀' G₀' (instHDiv.{u2} G₀' _inst_6) (f x) (f y))) -> (forall (x : G₀) (n : Nat), Eq.{succ u2} G₀' (f (HPow.hPow.{u1, 0, u1} G₀ Nat G₀ (instHPow.{u1, 0} G₀ Nat (Monoid.Pow.{u1} G₀ (MonoidWithZero.toMonoid.{u1} G₀ (GroupWithZero.toMonoidWithZero.{u1} G₀ _inst_1)))) x n)) (HPow.hPow.{u2, 0, u2} G₀' Nat G₀' (instHPow.{u2, 0} G₀' Nat _inst_7) (f x) n)) -> (forall (x : G₀) (n : Int), Eq.{succ u2} G₀' (f (HPow.hPow.{u1, 0, u1} G₀ Int G₀ (instHPow.{u1, 0} G₀ Int (DivInvMonoid.Pow.{u1} G₀ (GroupWithZero.toDivInvMonoid.{u1} G₀ _inst_1))) x n)) (HPow.hPow.{u2, 0, u2} G₀' Int G₀' (instHPow.{u2, 0} G₀' Int _inst_8) (f x) n)) -> (GroupWithZero.{u2} G₀'))
-but is expected to have type
-  forall {G₀ : Type.{u1}} {G₀' : Type.{u2}} [_inst_1 : GroupWithZero.{u1} G₀] [_inst_2 : Zero.{u2} G₀'] [_inst_3 : Mul.{u2} G₀'] [_inst_4 : One.{u2} G₀'] [_inst_5 : Inv.{u2} G₀'] [_inst_6 : Div.{u2} G₀'] [_inst_7 : Pow.{u2, 0} G₀' Nat] [_inst_8 : Pow.{u2, 0} G₀' Int], (Ne.{succ u2} G₀' (OfNat.ofNat.{u2} G₀' 0 (Zero.toOfNat0.{u2} G₀' _inst_2)) (OfNat.ofNat.{u2} G₀' 1 (One.toOfNat1.{u2} G₀' _inst_4))) -> (forall (f : G₀ -> G₀'), (Function.Surjective.{succ u1, succ u2} G₀ G₀' f) -> (Eq.{succ u2} G₀' (f (OfNat.ofNat.{u1} G₀ 0 (Zero.toOfNat0.{u1} G₀ (MonoidWithZero.toZero.{u1} G₀ (GroupWithZero.toMonoidWithZero.{u1} G₀ _inst_1))))) (OfNat.ofNat.{u2} G₀' 0 (Zero.toOfNat0.{u2} G₀' _inst_2))) -> (Eq.{succ u2} G₀' (f (OfNat.ofNat.{u1} G₀ 1 (One.toOfNat1.{u1} G₀ (Monoid.toOne.{u1} G₀ (MonoidWithZero.toMonoid.{u1} G₀ (GroupWithZero.toMonoidWithZero.{u1} G₀ _inst_1)))))) (OfNat.ofNat.{u2} G₀' 1 (One.toOfNat1.{u2} G₀' _inst_4))) -> (forall (x : G₀) (y : G₀), Eq.{succ u2} G₀' (f (HMul.hMul.{u1, u1, u1} G₀ G₀ G₀ (instHMul.{u1} G₀ (MulZeroClass.toMul.{u1} G₀ (MulZeroOneClass.toMulZeroClass.{u1} G₀ (MonoidWithZero.toMulZeroOneClass.{u1} G₀ (GroupWithZero.toMonoidWithZero.{u1} G₀ _inst_1))))) x y)) (HMul.hMul.{u2, u2, u2} G₀' G₀' G₀' (instHMul.{u2} G₀' _inst_3) (f x) (f y))) -> (forall (x : G₀), Eq.{succ u2} G₀' (f (Inv.inv.{u1} G₀ (GroupWithZero.toInv.{u1} G₀ _inst_1) x)) (Inv.inv.{u2} G₀' _inst_5 (f x))) -> (forall (x : G₀) (y : G₀), Eq.{succ u2} G₀' (f (HDiv.hDiv.{u1, u1, u1} G₀ G₀ G₀ (instHDiv.{u1} G₀ (GroupWithZero.toDiv.{u1} G₀ _inst_1)) x y)) (HDiv.hDiv.{u2, u2, u2} G₀' G₀' G₀' (instHDiv.{u2} G₀' _inst_6) (f x) (f y))) -> (forall (x : G₀) (n : Nat), Eq.{succ u2} G₀' (f (HPow.hPow.{u1, 0, u1} G₀ Nat G₀ (instHPow.{u1, 0} G₀ Nat (Monoid.Pow.{u1} G₀ (MonoidWithZero.toMonoid.{u1} G₀ (GroupWithZero.toMonoidWithZero.{u1} G₀ _inst_1)))) x n)) (HPow.hPow.{u2, 0, u2} G₀' Nat G₀' (instHPow.{u2, 0} G₀' Nat _inst_7) (f x) n)) -> (forall (x : G₀) (n : Int), Eq.{succ u2} G₀' (f (HPow.hPow.{u1, 0, u1} G₀ Int G₀ (instHPow.{u1, 0} G₀ Int (DivInvMonoid.Pow.{u1} G₀ (GroupWithZero.toDivInvMonoid.{u1} G₀ _inst_1))) x n)) (HPow.hPow.{u2, 0, u2} G₀' Int G₀' (instHPow.{u2, 0} G₀' Int _inst_8) (f x) n)) -> (GroupWithZero.{u2} G₀'))
+<too large>
 Case conversion may be inaccurate. Consider using '#align function.surjective.group_with_zero Function.Surjective.groupWithZeroₓ'. -/
 /-- Pushforward a `group_with_zero` class along an surjective function.
 See note [reducible non-instances]. -/
@@ -350,10 +347,7 @@ protected def Function.Injective.commGroupWithZero [Zero G₀'] [Mul G₀'] [One
 #align function.injective.comm_group_with_zero Function.Injective.commGroupWithZero
 
 /- warning: function.surjective.comm_group_with_zero -> Function.Surjective.commGroupWithZero is a dubious translation:
-lean 3 declaration is
-  forall {G₀ : Type.{u1}} {G₀' : Type.{u2}} [_inst_1 : CommGroupWithZero.{u1} G₀] [_inst_2 : Zero.{u2} G₀'] [_inst_3 : Mul.{u2} G₀'] [_inst_4 : One.{u2} G₀'] [_inst_5 : Inv.{u2} G₀'] [_inst_6 : Div.{u2} G₀'] [_inst_7 : Pow.{u2, 0} G₀' Nat] [_inst_8 : Pow.{u2, 0} G₀' Int], (Ne.{succ u2} G₀' (OfNat.ofNat.{u2} G₀' 0 (OfNat.mk.{u2} G₀' 0 (Zero.zero.{u2} G₀' _inst_2))) (OfNat.ofNat.{u2} G₀' 1 (OfNat.mk.{u2} G₀' 1 (One.one.{u2} G₀' _inst_4)))) -> (forall (f : G₀ -> G₀'), (Function.Surjective.{succ u1, succ u2} G₀ G₀' f) -> (Eq.{succ u2} G₀' (f (OfNat.ofNat.{u1} G₀ 0 (OfNat.mk.{u1} G₀ 0 (Zero.zero.{u1} G₀ (MulZeroClass.toHasZero.{u1} G₀ (MulZeroOneClass.toMulZeroClass.{u1} G₀ (MonoidWithZero.toMulZeroOneClass.{u1} G₀ (GroupWithZero.toMonoidWithZero.{u1} G₀ (CommGroupWithZero.toGroupWithZero.{u1} G₀ _inst_1))))))))) (OfNat.ofNat.{u2} G₀' 0 (OfNat.mk.{u2} G₀' 0 (Zero.zero.{u2} G₀' _inst_2)))) -> (Eq.{succ u2} G₀' (f (OfNat.ofNat.{u1} G₀ 1 (OfNat.mk.{u1} G₀ 1 (One.one.{u1} G₀ (MulOneClass.toHasOne.{u1} G₀ (MulZeroOneClass.toMulOneClass.{u1} G₀ (MonoidWithZero.toMulZeroOneClass.{u1} G₀ (GroupWithZero.toMonoidWithZero.{u1} G₀ (CommGroupWithZero.toGroupWithZero.{u1} G₀ _inst_1))))))))) (OfNat.ofNat.{u2} G₀' 1 (OfNat.mk.{u2} G₀' 1 (One.one.{u2} G₀' _inst_4)))) -> (forall (x : G₀) (y : G₀), Eq.{succ u2} G₀' (f (HMul.hMul.{u1, u1, u1} G₀ G₀ G₀ (instHMul.{u1} G₀ (MulZeroClass.toHasMul.{u1} G₀ (MulZeroOneClass.toMulZeroClass.{u1} G₀ (MonoidWithZero.toMulZeroOneClass.{u1} G₀ (GroupWithZero.toMonoidWithZero.{u1} G₀ (CommGroupWithZero.toGroupWithZero.{u1} G₀ _inst_1)))))) x y)) (HMul.hMul.{u2, u2, u2} G₀' G₀' G₀' (instHMul.{u2} G₀' _inst_3) (f x) (f y))) -> (forall (x : G₀), Eq.{succ u2} G₀' (f (Inv.inv.{u1} G₀ (DivInvMonoid.toHasInv.{u1} G₀ (GroupWithZero.toDivInvMonoid.{u1} G₀ (CommGroupWithZero.toGroupWithZero.{u1} G₀ _inst_1))) x)) (Inv.inv.{u2} G₀' _inst_5 (f x))) -> (forall (x : G₀) (y : G₀), Eq.{succ u2} G₀' (f (HDiv.hDiv.{u1, u1, u1} G₀ G₀ G₀ (instHDiv.{u1} G₀ (DivInvMonoid.toHasDiv.{u1} G₀ (GroupWithZero.toDivInvMonoid.{u1} G₀ (CommGroupWithZero.toGroupWithZero.{u1} G₀ _inst_1)))) x y)) (HDiv.hDiv.{u2, u2, u2} G₀' G₀' G₀' (instHDiv.{u2} G₀' _inst_6) (f x) (f y))) -> (forall (x : G₀) (n : Nat), Eq.{succ u2} G₀' (f (HPow.hPow.{u1, 0, u1} G₀ Nat G₀ (instHPow.{u1, 0} G₀ Nat (Monoid.Pow.{u1} G₀ (MonoidWithZero.toMonoid.{u1} G₀ (GroupWithZero.toMonoidWithZero.{u1} G₀ (CommGroupWithZero.toGroupWithZero.{u1} G₀ _inst_1))))) x n)) (HPow.hPow.{u2, 0, u2} G₀' Nat G₀' (instHPow.{u2, 0} G₀' Nat _inst_7) (f x) n)) -> (forall (x : G₀) (n : Int), Eq.{succ u2} G₀' (f (HPow.hPow.{u1, 0, u1} G₀ Int G₀ (instHPow.{u1, 0} G₀ Int (DivInvMonoid.Pow.{u1} G₀ (GroupWithZero.toDivInvMonoid.{u1} G₀ (CommGroupWithZero.toGroupWithZero.{u1} G₀ _inst_1)))) x n)) (HPow.hPow.{u2, 0, u2} G₀' Int G₀' (instHPow.{u2, 0} G₀' Int _inst_8) (f x) n)) -> (CommGroupWithZero.{u2} G₀'))
-but is expected to have type
-  forall {G₀ : Type.{u1}} {G₀' : Type.{u2}} [_inst_1 : CommGroupWithZero.{u1} G₀] [_inst_2 : Zero.{u2} G₀'] [_inst_3 : Mul.{u2} G₀'] [_inst_4 : One.{u2} G₀'] [_inst_5 : Inv.{u2} G₀'] [_inst_6 : Div.{u2} G₀'] [_inst_7 : Pow.{u2, 0} G₀' Nat] [_inst_8 : Pow.{u2, 0} G₀' Int], (Ne.{succ u2} G₀' (OfNat.ofNat.{u2} G₀' 0 (Zero.toOfNat0.{u2} G₀' _inst_2)) (OfNat.ofNat.{u2} G₀' 1 (One.toOfNat1.{u2} G₀' _inst_4))) -> (forall (f : G₀ -> G₀'), (Function.Surjective.{succ u1, succ u2} G₀ G₀' f) -> (Eq.{succ u2} G₀' (f (OfNat.ofNat.{u1} G₀ 0 (Zero.toOfNat0.{u1} G₀ (CommMonoidWithZero.toZero.{u1} G₀ (CommGroupWithZero.toCommMonoidWithZero.{u1} G₀ _inst_1))))) (OfNat.ofNat.{u2} G₀' 0 (Zero.toOfNat0.{u2} G₀' _inst_2))) -> (Eq.{succ u2} G₀' (f (OfNat.ofNat.{u1} G₀ 1 (One.toOfNat1.{u1} G₀ (Monoid.toOne.{u1} G₀ (MonoidWithZero.toMonoid.{u1} G₀ (GroupWithZero.toMonoidWithZero.{u1} G₀ (CommGroupWithZero.toGroupWithZero.{u1} G₀ _inst_1))))))) (OfNat.ofNat.{u2} G₀' 1 (One.toOfNat1.{u2} G₀' _inst_4))) -> (forall (x : G₀) (y : G₀), Eq.{succ u2} G₀' (f (HMul.hMul.{u1, u1, u1} G₀ G₀ G₀ (instHMul.{u1} G₀ (MulZeroClass.toMul.{u1} G₀ (MulZeroOneClass.toMulZeroClass.{u1} G₀ (MonoidWithZero.toMulZeroOneClass.{u1} G₀ (GroupWithZero.toMonoidWithZero.{u1} G₀ (CommGroupWithZero.toGroupWithZero.{u1} G₀ _inst_1)))))) x y)) (HMul.hMul.{u2, u2, u2} G₀' G₀' G₀' (instHMul.{u2} G₀' _inst_3) (f x) (f y))) -> (forall (x : G₀), Eq.{succ u2} G₀' (f (Inv.inv.{u1} G₀ (CommGroupWithZero.toInv.{u1} G₀ _inst_1) x)) (Inv.inv.{u2} G₀' _inst_5 (f x))) -> (forall (x : G₀) (y : G₀), Eq.{succ u2} G₀' (f (HDiv.hDiv.{u1, u1, u1} G₀ G₀ G₀ (instHDiv.{u1} G₀ (CommGroupWithZero.toDiv.{u1} G₀ _inst_1)) x y)) (HDiv.hDiv.{u2, u2, u2} G₀' G₀' G₀' (instHDiv.{u2} G₀' _inst_6) (f x) (f y))) -> (forall (x : G₀) (n : Nat), Eq.{succ u2} G₀' (f (HPow.hPow.{u1, 0, u1} G₀ Nat G₀ (instHPow.{u1, 0} G₀ Nat (Monoid.Pow.{u1} G₀ (MonoidWithZero.toMonoid.{u1} G₀ (GroupWithZero.toMonoidWithZero.{u1} G₀ (CommGroupWithZero.toGroupWithZero.{u1} G₀ _inst_1))))) x n)) (HPow.hPow.{u2, 0, u2} G₀' Nat G₀' (instHPow.{u2, 0} G₀' Nat _inst_7) (f x) n)) -> (forall (x : G₀) (n : Int), Eq.{succ u2} G₀' (f (HPow.hPow.{u1, 0, u1} G₀ Int G₀ (instHPow.{u1, 0} G₀ Int (DivInvMonoid.Pow.{u1} G₀ (GroupWithZero.toDivInvMonoid.{u1} G₀ (CommGroupWithZero.toGroupWithZero.{u1} G₀ _inst_1)))) x n)) (HPow.hPow.{u2, 0, u2} G₀' Int G₀' (instHPow.{u2, 0} G₀' Int _inst_8) (f x) n)) -> (CommGroupWithZero.{u2} G₀'))
+<too large>
 Case conversion may be inaccurate. Consider using '#align function.surjective.comm_group_with_zero Function.Surjective.commGroupWithZeroₓ'. -/
 /-- Pushforward a `comm_group_with_zero` class along a surjective function. -/
 protected def Function.Surjective.commGroupWithZero [Zero G₀'] [Mul G₀'] [One G₀'] [Inv G₀']
Diff
@@ -41,8 +41,8 @@ protected def Function.Injective.mulZeroClass [Mul M₀'] [Zero M₀'] (f : M₀
     where
   mul := (· * ·)
   zero := 0
-  zero_mul a := hf <| by simp only [mul, zero, zero_mul]
-  mul_zero a := hf <| by simp only [mul, zero, mul_zero]
+  zero_mul a := hf <| by simp only [mul, zero, MulZeroClass.zero_mul]
+  mul_zero a := hf <| by simp only [mul, zero, MulZeroClass.mul_zero]
 #align function.injective.mul_zero_class Function.Injective.mulZeroClass
 
 /- warning: function.surjective.mul_zero_class -> Function.Surjective.mulZeroClass is a dubious translation:
@@ -59,8 +59,8 @@ protected def Function.Surjective.mulZeroClass [Mul M₀'] [Zero M₀'] (f : M
     where
   mul := (· * ·)
   zero := 0
-  mul_zero := hf.forall.2 fun x => by simp only [← zero, ← mul, mul_zero]
-  zero_mul := hf.forall.2 fun x => by simp only [← zero, ← mul, zero_mul]
+  mul_zero := hf.forall.2 fun x => by simp only [← zero, ← mul, MulZeroClass.mul_zero]
+  zero_mul := hf.forall.2 fun x => by simp only [← zero, ← mul, MulZeroClass.zero_mul]
 #align function.surjective.mul_zero_class Function.Surjective.mulZeroClass
 
 end MulZeroClass

Changes in mathlib4

mathlib3
mathlib4
chore(*): drop $/<| before fun (#9361)

Subset of #9319

Diff
@@ -234,7 +234,7 @@ protected def Function.Surjective.groupWithZero [Zero G₀'] [Mul G₀'] [One G
   { hf.monoidWithZero f zero one mul npow, hf.divInvMonoid f one mul inv div npow zpow with
     inv_zero := by erw [← zero, ← inv, inv_zero],
     mul_inv_cancel := hf.forall.2 fun x hx => by
-        erw [← inv, ← mul, mul_inv_cancel (mt (congr_arg f) <| fun h ↦ hx (h.trans zero)), one]
+        erw [← inv, ← mul, mul_inv_cancel (mt (congr_arg f) fun h ↦ hx (h.trans zero)), one]
     exists_pair_ne := ⟨0, 1, h01⟩ }
 #align function.surjective.group_with_zero Function.Surjective.groupWithZero
 
chore: delay import of NeZero until after basic hierarchy (#6970)

Co-authored-by: Scott Morrison <scott.morrison@gmail.com>

Diff
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Johan Commelin
 -/
 import Mathlib.Algebra.Group.InjSurj
-import Mathlib.Algebra.GroupWithZero.Defs
+import Mathlib.Algebra.GroupWithZero.NeZero
 
 #align_import algebra.group_with_zero.inj_surj from "leanprover-community/mathlib"@"a148d797a1094ab554ad4183a4ad6f130358ef64"
 
feat: generalize algebraic pullback instances (#6536)

Generalizes RingEquiv.noZeroDivisors and RingEquiv.isDomain to MulEquiv

Adds Function.Injective.isLeft/RightCancelMulZero, MulEquiv.toZeroHomClass, and MulEquiv.isField (the last one is useful for #6309)

Co-authored-by: Junyan Xu <junyanxu.math@gmail.com>

Diff
@@ -22,7 +22,7 @@ section MulZeroClass
 
 variable [MulZeroClass M₀] {a b : M₀}
 
-/-- Pullback a `MulZeroClass` instance along an injective function.
+/-- Pull back a `MulZeroClass` instance along an injective function.
 See note [reducible non-instances]. -/
 @[reducible]
 protected def Function.Injective.mulZeroClass [Mul M₀'] [Zero M₀'] (f : M₀' → M₀) (hf : Injective f)
@@ -33,7 +33,7 @@ protected def Function.Injective.mulZeroClass [Mul M₀'] [Zero M₀'] (f : M₀
   mul_zero a := hf <| by simp only [mul, zero, mul_zero]
 #align function.injective.mul_zero_class Function.Injective.mulZeroClass
 
-/-- Pushforward a `MulZeroClass` instance along a surjective function.
+/-- Push forward a `MulZeroClass` instance along a surjective function.
 See note [reducible non-instances]. -/
 @[reducible]
 protected def Function.Surjective.mulZeroClass [Mul M₀'] [Zero M₀'] (f : M₀ → M₀')
@@ -49,23 +49,38 @@ end MulZeroClass
 
 section NoZeroDivisors
 
-/-- Pushforward a `NoZeroDivisors` instance along an injective function. -/
-protected theorem Function.Injective.noZeroDivisors [Mul M₀] [Zero M₀] [Mul M₀'] [Zero M₀']
-    [NoZeroDivisors M₀'] (f : M₀ → M₀') (hf : Injective f) (zero : f 0 = 0)
-    (mul : ∀ x y, f (x * y) = f x * f y) : NoZeroDivisors M₀ :=
+variable [Mul M₀] [Zero M₀] [Mul M₀'] [Zero M₀']
+  (f : M₀ → M₀') (hf : Injective f) (zero : f 0 = 0) (mul : ∀ x y, f (x * y) = f x * f y)
+
+/-- Pull back a `NoZeroDivisors` instance along an injective function. -/
+protected theorem Function.Injective.noZeroDivisors [NoZeroDivisors M₀'] : NoZeroDivisors M₀ :=
   { eq_zero_or_eq_zero_of_mul_eq_zero := fun H =>
       have : f _ * f _ = 0 := by rw [← mul, H, zero]
       (eq_zero_or_eq_zero_of_mul_eq_zero this).imp
         (fun H => hf <| by rwa [zero]) fun H => hf <| by rwa [zero] }
 #align function.injective.no_zero_divisors Function.Injective.noZeroDivisors
 
+protected theorem Function.Injective.isLeftCancelMulZero
+    [IsLeftCancelMulZero M₀'] : IsLeftCancelMulZero M₀ :=
+  { mul_left_cancel_of_ne_zero := fun Hne He => by
+      have := congr_arg f He
+      rw [mul, mul] at this
+      exact hf (mul_left_cancel₀ (fun Hfa => Hne <| hf <| by rw [Hfa, zero]) this) }
+
+protected theorem Function.Injective.isRightCancelMulZero
+    [IsRightCancelMulZero M₀'] : IsRightCancelMulZero M₀ :=
+  { mul_right_cancel_of_ne_zero := fun Hne He => by
+      have := congr_arg f He
+      rw [mul, mul] at this
+      exact hf (mul_right_cancel₀ (fun Hfa => Hne <| hf <| by rw [Hfa, zero]) this) }
+
 end NoZeroDivisors
 
 section MulZeroOneClass
 
 variable [MulZeroOneClass M₀]
 
-/-- Pullback a `MulZeroOneClass` instance along an injective function.
+/-- Pull back a `MulZeroOneClass` instance along an injective function.
 See note [reducible non-instances]. -/
 @[reducible]
 protected def Function.Injective.mulZeroOneClass [Mul M₀'] [Zero M₀'] [One M₀'] (f : M₀' → M₀)
@@ -74,7 +89,7 @@ protected def Function.Injective.mulZeroOneClass [Mul M₀'] [Zero M₀'] [One M
   { hf.mulZeroClass f zero mul, hf.mulOneClass f one mul with }
 #align function.injective.mul_zero_one_class Function.Injective.mulZeroOneClass
 
-/-- Pushforward a `MulZeroOneClass` instance along a surjective function.
+/-- Push forward a `MulZeroOneClass` instance along a surjective function.
 See note [reducible non-instances]. -/
 @[reducible]
 protected def Function.Surjective.mulZeroOneClass [Mul M₀'] [Zero M₀'] [One M₀'] (f : M₀ → M₀')
@@ -87,7 +102,7 @@ end MulZeroOneClass
 
 section SemigroupWithZero
 
-/-- Pullback a `SemigroupWithZero` along an injective function.
+/-- Pull back a `SemigroupWithZero` along an injective function.
 See note [reducible non-instances]. -/
 @[reducible]
 protected def Function.Injective.semigroupWithZero [Zero M₀'] [Mul M₀'] [SemigroupWithZero M₀]
@@ -96,7 +111,7 @@ protected def Function.Injective.semigroupWithZero [Zero M₀'] [Mul M₀'] [Sem
   { hf.mulZeroClass f zero mul, ‹Zero M₀'›, hf.semigroup f mul with }
 #align function.injective.semigroup_with_zero Function.Injective.semigroupWithZero
 
-/-- Pushforward a `SemigroupWithZero` along a surjective function.
+/-- Push forward a `SemigroupWithZero` along a surjective function.
 See note [reducible non-instances]. -/
 @[reducible]
 protected def Function.Surjective.semigroupWithZero [SemigroupWithZero M₀] [Zero M₀'] [Mul M₀']
@@ -109,7 +124,7 @@ end SemigroupWithZero
 
 section MonoidWithZero
 
-/-- Pullback a `MonoidWithZero` along an injective function.
+/-- Pull back a `MonoidWithZero` along an injective function.
 See note [reducible non-instances]. -/
 @[reducible]
 protected def Function.Injective.monoidWithZero [Zero M₀'] [Mul M₀'] [One M₀'] [Pow M₀' ℕ]
@@ -119,7 +134,7 @@ protected def Function.Injective.monoidWithZero [Zero M₀'] [Mul M₀'] [One M
   { hf.monoid f one mul npow, hf.mulZeroClass f zero mul with }
 #align function.injective.monoid_with_zero Function.Injective.monoidWithZero
 
-/-- Pushforward a `MonoidWithZero` along a surjective function.
+/-- Push forward a `MonoidWithZero` along a surjective function.
 See note [reducible non-instances]. -/
 @[reducible]
 protected def Function.Surjective.monoidWithZero [Zero M₀'] [Mul M₀'] [One M₀'] [Pow M₀' ℕ]
@@ -129,7 +144,7 @@ protected def Function.Surjective.monoidWithZero [Zero M₀'] [Mul M₀'] [One M
   { hf.monoid f one mul npow, hf.mulZeroClass f zero mul with }
 #align function.surjective.monoid_with_zero Function.Surjective.monoidWithZero
 
-/-- Pullback a `CommMonoidWithZero` along an injective function.
+/-- Pull back a `CommMonoidWithZero` along an injective function.
 See note [reducible non-instances]. -/
 @[reducible]
 protected def Function.Injective.commMonoidWithZero [Zero M₀'] [Mul M₀'] [One M₀'] [Pow M₀' ℕ]
@@ -139,7 +154,7 @@ protected def Function.Injective.commMonoidWithZero [Zero M₀'] [Mul M₀'] [On
   { hf.commMonoid f one mul npow, hf.mulZeroClass f zero mul with }
 #align function.injective.comm_monoid_with_zero Function.Injective.commMonoidWithZero
 
-/-- Pushforward a `CommMonoidWithZero` along a surjective function.
+/-- Push forward a `CommMonoidWithZero` along a surjective function.
 See note [reducible non-instances]. -/
 @[reducible]
 protected def Function.Surjective.commMonoidWithZero [Zero M₀'] [Mul M₀'] [One M₀'] [Pow M₀' ℕ]
@@ -155,7 +170,7 @@ section CancelMonoidWithZero
 
 variable [CancelMonoidWithZero M₀] {a b c : M₀}
 
-/-- Pullback a `CancelMonoidWithZero` along an injective function.
+/-- Pull back a `CancelMonoidWithZero` along an injective function.
 See note [reducible non-instances]. -/
 @[reducible]
 protected def Function.Injective.cancelMonoidWithZero [Zero M₀'] [Mul M₀'] [One M₀'] [Pow M₀' ℕ]
@@ -175,7 +190,7 @@ section CancelCommMonoidWithZero
 
 variable [CancelCommMonoidWithZero M₀] {a b c : M₀}
 
-/-- Pullback a `CancelCommMonoidWithZero` along an injective function.
+/-- Pull back a `CancelCommMonoidWithZero` along an injective function.
 See note [reducible non-instances]. -/
 @[reducible]
 protected def Function.Injective.cancelCommMonoidWithZero [Zero M₀'] [Mul M₀'] [One M₀'] [Pow M₀' ℕ]
@@ -191,7 +206,7 @@ section GroupWithZero
 
 variable [GroupWithZero G₀] {a b c g h x : G₀}
 
-/-- Pullback a `GroupWithZero` along an injective function.
+/-- Pull back a `GroupWithZero` along an injective function.
 See note [reducible non-instances]. -/
 @[reducible]
 protected def Function.Injective.groupWithZero [Zero G₀'] [Mul G₀'] [One G₀'] [Inv G₀'] [Div G₀']
@@ -207,7 +222,7 @@ protected def Function.Injective.groupWithZero [Zero G₀'] [Mul G₀'] [One G
       erw [one, mul, inv, mul_inv_cancel ((hf.ne_iff' zero).2 hx)] }
 #align function.injective.group_with_zero Function.Injective.groupWithZero
 
-/-- Pushforward a `GroupWithZero` along a surjective function.
+/-- Push forward a `GroupWithZero` along a surjective function.
 See note [reducible non-instances]. -/
 @[reducible]
 protected def Function.Surjective.groupWithZero [Zero G₀'] [Mul G₀'] [One G₀'] [Inv G₀'] [Div G₀']
@@ -229,7 +244,7 @@ section CommGroupWithZero
 
 variable [CommGroupWithZero G₀] {a b c d : G₀}
 
-/-- Pullback a `CommGroupWithZero` along an injective function.
+/-- Pull back a `CommGroupWithZero` along an injective function.
 See note [reducible non-instances]. -/
 @[reducible]
 protected def Function.Injective.commGroupWithZero [Zero G₀'] [Mul G₀'] [One G₀'] [Inv G₀']
@@ -240,7 +255,7 @@ protected def Function.Injective.commGroupWithZero [Zero G₀'] [Mul G₀'] [One
   { hf.groupWithZero f zero one mul inv div npow zpow, hf.commSemigroup f mul with }
 #align function.injective.comm_group_with_zero Function.Injective.commGroupWithZero
 
-/-- Pushforward a `CommGroupWithZero` along a surjective function.
+/-- Push forward a `CommGroupWithZero` along a surjective function.
 See note [reducible non-instances]. -/
 protected def Function.Surjective.commGroupWithZero [Zero G₀'] [Mul G₀'] [One G₀'] [Inv G₀']
     [Div G₀'] [Pow G₀' ℕ] [Pow G₀' ℤ] (h01 : (0 : G₀') ≠ 1) (f : G₀ → G₀') (hf : Surjective f)
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
@@ -16,7 +16,7 @@ import Mathlib.Algebra.GroupWithZero.Defs
 
 open Function
 
-variable {M₀ G₀ M₀' G₀' : Type _}
+variable {M₀ G₀ M₀' G₀' : Type*}
 
 section MulZeroClass
 
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
@@ -2,15 +2,12 @@
 Copyright (c) 2020 Johan Commelin. All rights reserved.
 Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Johan Commelin
-
-! This file was ported from Lean 3 source module algebra.group_with_zero.inj_surj
-! leanprover-community/mathlib commit a148d797a1094ab554ad4183a4ad6f130358ef64
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
 -/
 import Mathlib.Algebra.Group.InjSurj
 import Mathlib.Algebra.GroupWithZero.Defs
 
+#align_import algebra.group_with_zero.inj_surj from "leanprover-community/mathlib"@"a148d797a1094ab554ad4183a4ad6f130358ef64"
+
 /-!
 # Lifting groups with zero along injective/surjective maps
 
chore: fix grammar 1/3 (#5001)

All of these are doc fixes

Diff
@@ -36,7 +36,7 @@ protected def Function.Injective.mulZeroClass [Mul M₀'] [Zero M₀'] (f : M₀
   mul_zero a := hf <| by simp only [mul, zero, mul_zero]
 #align function.injective.mul_zero_class Function.Injective.mulZeroClass
 
-/-- Pushforward a `MulZeroClass` instance along an surjective function.
+/-- Pushforward a `MulZeroClass` instance along a surjective function.
 See note [reducible non-instances]. -/
 @[reducible]
 protected def Function.Surjective.mulZeroClass [Mul M₀'] [Zero M₀'] (f : M₀ → M₀')
@@ -77,7 +77,7 @@ protected def Function.Injective.mulZeroOneClass [Mul M₀'] [Zero M₀'] [One M
   { hf.mulZeroClass f zero mul, hf.mulOneClass f one mul with }
 #align function.injective.mul_zero_one_class Function.Injective.mulZeroOneClass
 
-/-- Pushforward a `MulZeroOneClass` instance along an surjective function.
+/-- Pushforward a `MulZeroOneClass` instance along a surjective function.
 See note [reducible non-instances]. -/
 @[reducible]
 protected def Function.Surjective.mulZeroOneClass [Mul M₀'] [Zero M₀'] [One M₀'] (f : M₀ → M₀')
@@ -99,7 +99,7 @@ protected def Function.Injective.semigroupWithZero [Zero M₀'] [Mul M₀'] [Sem
   { hf.mulZeroClass f zero mul, ‹Zero M₀'›, hf.semigroup f mul with }
 #align function.injective.semigroup_with_zero Function.Injective.semigroupWithZero
 
-/-- Pushforward a `SemigroupWithZero` along an surjective function.
+/-- Pushforward a `SemigroupWithZero` along a surjective function.
 See note [reducible non-instances]. -/
 @[reducible]
 protected def Function.Surjective.semigroupWithZero [SemigroupWithZero M₀] [Zero M₀'] [Mul M₀']
@@ -210,7 +210,7 @@ protected def Function.Injective.groupWithZero [Zero G₀'] [Mul G₀'] [One G
       erw [one, mul, inv, mul_inv_cancel ((hf.ne_iff' zero).2 hx)] }
 #align function.injective.group_with_zero Function.Injective.groupWithZero
 
-/-- Pushforward a `GroupWithZero` along an surjective function.
+/-- Pushforward a `GroupWithZero` along a surjective function.
 See note [reducible non-instances]. -/
 @[reducible]
 protected def Function.Surjective.groupWithZero [Zero G₀'] [Mul G₀'] [One G₀'] [Inv G₀'] [Div G₀']
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
@@ -2,6 +2,11 @@
 Copyright (c) 2020 Johan Commelin. All rights reserved.
 Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Johan Commelin
+
+! This file was ported from Lean 3 source module algebra.group_with_zero.inj_surj
+! leanprover-community/mathlib commit a148d797a1094ab554ad4183a4ad6f130358ef64
+! Please do not edit these lines, except to modify the commit id
+! if you have ported upstream changes.
 -/
 import Mathlib.Algebra.Group.InjSurj
 import Mathlib.Algebra.GroupWithZero.Defs

Dependencies 17

18 files ported (100.0%)
7010 lines ported (100.0%)

All dependencies are ported!