algebra.hom.groupMathlib.Algebra.GroupWithZero.Hom

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)

chore(*): revert #17048 (#17733)

This had merge conflicts which I've been rather reckless about resolving. Let's see what CI says.

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

Diff
@@ -28,15 +28,6 @@ building blocks for other homomorphisms:
 * `mul_hom`
 * `monoid_with_zero_hom`
 
-Finally, we define classes that state the coercion operator `↑` (a.k.a. `coe`) is a homomorphism:
- * `coe_is_one_hom`/`coe_is_zero_hom`
- * `coe_is_mul_hom`/`coe_is_add_monoid_hom`
- * `coe_is_monoid_hom`/`coe_is_add_monoid_hom`
- * `coe_is_monoid_with_zero_hom`
-These come with a selection of `simp` lemmas stating that `↑` preserves the corresponding operation:
-`coe_add`, `coe_mul`, `coe_zero`, `coe_one`, `coe_pow`, `coe_nsmul`, `coe_zpow`, `coe_zsmul`,
-`coe_bit0`, `coe_bit1`, `coe_sub`, `coe_neg`, ..., etc.
-
 ## Notations
 
 * `→+`: Bundled `add_monoid` homs. Also use for `add_group` homs.
@@ -1255,151 +1246,3 @@ instance {M N} {hM : mul_zero_one_class M} [comm_monoid_with_zero N] : has_mul (
   { to_fun := λ a, f a * g a,
     map_zero' := by rw [map_zero, zero_mul],
     ..(f * g : M →* N) }⟩
-
-section coe
-
-/-! ### Coercions as bundled morphisms
-
-The classes `coe_is_mul_hom`, `coe_is_monoid_hom`, etc. state that the coercion map `↑`
-(a.k.a. `coe`) is a homomorphism.
-
-These classes are unbundled (they take an instance of `has_lift_t R S` as a parameter, rather than
-extending `has_lift_t` or one of its subclasses) for two reasons:
- * We wouldn't have to introduce new classes that handle transitivity (and probably cause diamonds)
- * It doesn't matter whether a coercion is written with `has_coe` or `has_lift`, you can give it
-   a homomorphism structure in exactly the same way.
--/
-
-variables (M N) [has_lift_t M N]
-
-/-- `coe_is_zero_hom M N` is a class stating that the coercion map `↑ : M → N` (a.k.a. `coe`)
-is an zero-preserving homomorphism.
--/
-class coe_is_zero_hom [has_zero M] [has_zero N] : Prop :=
-(coe_zero : (↑(0 : M) : N) = 0)
-export coe_is_zero_hom (coe_zero)
-
-attribute [simp, norm_cast] coe_zero
-
-/-- `coe_is_one_hom M N` is a class stating that the coercion map `↑ : M → N` (a.k.a. `coe`)
-is a one-preserving homomorphism.
--/
-@[to_additive]
-class coe_is_one_hom [has_one M] [has_one N] : Prop :=
-(coe_one : (↑(1 : M) : N) = 1)
-export coe_is_one_hom (coe_one)
-
-attribute [simp, norm_cast] coe_one
-
-/-- `one_hom.coe M N` is the map `↑ : M → N` (a.k.a. `coe`),
-bundled as a one-preserving homomorphism. -/
-@[to_additive "`zero_hom.coe M N` is the map `↑ : M → N` (a.k.a. `coe`),
-bundled as a zero-preserving homomorphism.", simps { fully_applied := ff }]
-protected def one_hom.coe [has_one M] [has_one N] [coe_is_one_hom M N] : one_hom M N :=
-{ to_fun := coe,
-  map_one' := coe_one }
-
-/-- `coe_is_add_hom M N` is a class stating that the coercion map `↑ : M → N` (a.k.a. `coe`)
-is an additive homomorphism.
--/
-class coe_is_add_hom [has_add M] [has_add N] : Prop :=
-(coe_add : ∀ (x y : M), (↑(x + y) : N) = ↑x + ↑y)
-export coe_is_add_hom (coe_add)
-
-attribute [simp, norm_cast] coe_add
-
-/-- `coe_is_mul_hom M N` is a class stating that the coercion map `↑ : M → N` (a.k.a. `coe`)
-is a multiplicative homomorphism.
--/
-@[to_additive]
-class coe_is_mul_hom [has_mul M] [has_mul N] : Prop :=
-(coe_mul : ∀ (x y : M), (↑(x * y) : N) = ↑x * ↑y)
-export coe_is_mul_hom (coe_mul)
-
-attribute [simp, norm_cast] coe_mul
-
-/-- `mul_hom.coe M N` is the map `↑ : M → N` (a.k.a. `coe`),
-bundled as a multiplicative homomorphism. -/
-@[to_additive "`add_hom.coe M N` is the map `↑ : M → N` (a.k.a. `coe`),
-bundled as an additive homomorphism.", simps { fully_applied := ff }]
-protected def mul_hom.coe [has_mul M] [has_mul N] [coe_is_mul_hom M N] : mul_hom M N :=
-{ to_fun := coe,
-  map_mul' := coe_mul }
-
-@[simp, norm_cast]
-lemma coe_bit0 [has_add M] [has_add N] [coe_is_add_hom M N]
-  (x : M) : ↑(bit0 x) = bit0 (↑x : N) :=
-coe_add _ _
-
-@[simp, norm_cast]
-lemma coe_bit1 [has_one M] [has_add M] [has_one N] [has_add N] [coe_is_one_hom M N]
-  [coe_is_add_hom M N] (x : M) :
-  ↑(bit1 x) = bit1 (↑x : N) :=
-by simp [bit1]
-
-/-- `coe_is_add_monoid_hom M N` is a class stating that the coercion map `↑ : M → N` (a.k.a. `coe`)
-is an additive monoid homomorphism.
--/
-class coe_is_add_monoid_hom [add_zero_class M] [add_zero_class N]
-  extends coe_is_zero_hom M N, coe_is_add_hom M N
-
-/-- `coe_is_monoid_hom M N` is a class stating that the coercion map `↑ : M → N` (a.k.a. `coe`)
-is a monoid homomorphism.
--/
-@[to_additive]
-class coe_is_monoid_hom [mul_one_class M] [mul_one_class N]
-  extends coe_is_one_hom M N, coe_is_mul_hom M N
-
--- `to_additive` doesn't seem to map these correctly...
-attribute [to_additive coe_is_add_monoid_hom.to_coe_is_zero_hom] coe_is_monoid_hom.to_coe_is_one_hom
-attribute [to_additive coe_is_add_monoid_hom.to_coe_is_add_hom] coe_is_monoid_hom.to_coe_is_mul_hom
-
-/-- `monoid_hom.coe M N` is the map `↑ : M → N` (a.k.a. `coe`),
-bundled as a monoid homomorphism. -/
-@[to_additive "`add_monoid_hom.coe M N` is the map `↑ : M → N` (a.k.a. `coe`),
-bundled as an additive monoid homomorphism.", simps { fully_applied := ff }]
-protected def monoid_hom.coe [mul_one_class M] [mul_one_class N] [coe_is_monoid_hom M N] : M →* N :=
-{ to_fun := coe,
-  .. one_hom.coe M N,
-  .. mul_hom.coe M N }
-
-variables {M N}
-
-@[simp, norm_cast, to_additive]
-lemma coe_pow [monoid M] [monoid N] [coe_is_monoid_hom M N]
-  (a : M) (n : ℕ) : ↑(a ^ n) = (↑a : N) ^ n :=
-map_pow (monoid_hom.coe M N) a n
-
-@[simp, norm_cast, to_additive]
-lemma coe_zpow [group M] [group N] [coe_is_monoid_hom M N]
-  (a : M) (n : ℤ) : ↑(a ^ n) = (↑a : N) ^ n :=
-map_zpow (monoid_hom.coe M N) a n
-
-@[simp, norm_cast, to_additive]
-lemma coe_inv [group G] [division_monoid H] [has_lift_t G H] [coe_is_monoid_hom G H]
-  (a : G) : ↑(a⁻¹) = (↑a : H)⁻¹ :=
-map_inv (monoid_hom.coe G H) a
-
-@[simp, norm_cast, to_additive]
-lemma coe_div [group G] [division_monoid H] [has_lift_t G H] [coe_is_monoid_hom G H]
-  (a b : G) : ↑(a / b) = (↑a : H) / ↑b :=
-map_div (monoid_hom.coe G H) a b
-
-variables (M N)
-
-/-- `coe_monoid_with-zero_hom M N` is a class stating that the coercion map `↑ : M → N`
-(a.k.a. `coe`) is a monoid with zero homomorphism.
--/
-class coe_is_monoid_with_zero_hom [monoid_with_zero M] [monoid_with_zero N]
-  extends coe_is_monoid_hom M N, coe_is_zero_hom M N
-
-/-- `monoid_with_zero_hom.coe M N` is the map `↑ : M → N` (a.k.a. `coe`),
-bundled as a monoid with zero homomorphism. -/
-@[simps { fully_applied := ff }]
-protected def monoid_with_zero_hom.coe [monoid_with_zero M] [monoid_with_zero N]
-  [coe_is_monoid_with_zero_hom M N] : M →*₀ N :=
-{ to_fun := coe,
-  .. monoid_hom.coe M N,
-  .. zero_hom.coe M N }
-
-end coe

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

chore(*): add missing coe_copy and copy_eq (#17615)
Diff
@@ -654,6 +654,14 @@ protected def one_hom.copy {hM : has_one M} {hN : has_one N} (f : one_hom M N) (
 { to_fun := f',
   map_one' := h.symm ▸ f.map_one' }
 
+@[simp, to_additive] lemma one_hom.coe_copy {hM : has_one M} {hN : has_one N} (f : one_hom M N)
+  (f' : M → N) (h : f' = f) : ⇑(f.copy f' h) = f' :=
+rfl
+
+@[to_additive] lemma one_hom.coe_copy_eq {hM : has_one M} {hN : has_one N} (f : one_hom M N)
+  (f' : M → N) (h : f' = f) : f.copy f' h = f :=
+fun_like.ext' h
+
 /-- Copy of a `mul_hom` with a new `to_fun` equal to the old one. Useful to fix definitional
 equalities. -/
 @[to_additive "Copy of an `add_hom` with a new `to_fun` equal to the old one. Useful to fix
@@ -663,6 +671,14 @@ protected def mul_hom.copy {hM : has_mul M} {hN : has_mul N} (f : M →ₙ* N) (
 { to_fun := f',
   map_mul' := h.symm ▸ f.map_mul' }
 
+@[simp, to_additive]
+lemma mul_hom.coe_copy {hM : has_mul M} {hN : has_mul N} (f : M →ₙ* N) (f' : M → N)
+  (h : f' = f) : ⇑(f.copy f' h) = f' := rfl
+
+@[to_additive] lemma mul_hom.coe_copy_eq {hM : has_mul M} {hN : has_mul N} (f : M →ₙ* N)
+  (f' : M → N) (h : f' = f) : f.copy f' h = f :=
+fun_like.ext' h
+
 /-- Copy of a `monoid_hom` with a new `to_fun` equal to the old one. Useful to fix
 definitional equalities. -/
 @[to_additive "Copy of an `add_monoid_hom` with a new `to_fun` equal to the old one. Useful to fix
@@ -671,12 +687,28 @@ protected def monoid_hom.copy {hM : mul_one_class M} {hN : mul_one_class N} (f :
   (f' : M → N) (h : f' = f) : M →* N :=
 { ..f.to_one_hom.copy f' h, ..f.to_mul_hom.copy f' h }
 
+@[simp, to_additive] lemma monoid_hom.coe_copy {hM : mul_one_class M} {hN : mul_one_class N}
+  (f : M →* N) (f' : M → N) (h : f' = f) : ⇑(f.copy f' h) = f' :=
+rfl
+
+@[to_additive] lemma monoid_hom.copy_eq {hM : mul_one_class M} {hN : mul_one_class N}
+  (f : M →* N) (f' : M → N) (h : f' = f) : f.copy f' h = f :=
+fun_like.ext' h
+
 /-- Copy of a `monoid_hom` with a new `to_fun` equal to the old one. Useful to fix
 definitional equalities. -/
 protected def monoid_with_zero_hom.copy {hM : mul_zero_one_class M} {hN : mul_zero_one_class N}
   (f : M →*₀ N) (f' : M → N) (h : f' = f) : M →* N :=
 { ..f.to_zero_hom.copy f' h, ..f.to_monoid_hom.copy f' h }
 
+@[simp] lemma monoid_with_zero_hom.coe_copy {hM : mul_zero_one_class M} {hN : mul_zero_one_class N}
+  (f : M →*₀ N) (f' : M → N) (h : f' = f) : ⇑(f.copy f' h) = f' :=
+rfl
+
+lemma monoid_with_zero_hom.copy_eq {hM : mul_zero_one_class M} {hN : mul_zero_one_class N}
+  (f : M →*₀ N) (f' : M → N) (h : f' = f) : f.copy f' h = f :=
+fun_like.ext' h
+
 @[to_additive]
 protected lemma one_hom.map_one [has_one M] [has_one N] (f : one_hom M N) : f 1 = 1 := f.map_one'
 /-- If `f` is a monoid homomorphism then `f 1 = 1`. -/

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(no changes)

(first ported)

Changes in mathlib3port

mathlib3
mathlib3port
Diff
@@ -471,7 +471,7 @@ theorem map_div [Group G] [DivisionMonoid H] [MonoidHomClass F G H] (f : F) :
 theorem map_pow [Monoid G] [Monoid H] [MonoidHomClass F G H] (f : F) (a : G) :
     ∀ n : ℕ, f (a ^ n) = f a ^ n
   | 0 => by rw [pow_zero, pow_zero, map_one]
-  | n + 1 => by rw [pow_succ, pow_succ, map_mul, map_pow]
+  | n + 1 => by rw [pow_succ', pow_succ', map_mul, map_pow]
 #align map_pow map_pow
 #align map_nsmul map_nsmul
 -/
@@ -490,7 +490,7 @@ attribute [to_additive_reorder 8, to_additive] map_pow
 @[to_additive]
 theorem map_zpow' [DivInvMonoid G] [DivInvMonoid H] [MonoidHomClass F G H] (f : F)
     (hf : ∀ x : G, f x⁻¹ = (f x)⁻¹) (a : G) : ∀ n : ℤ, f (a ^ n) = f a ^ n
-  | (n : ℕ) => by rw [zpow_coe_nat, map_pow, zpow_coe_nat]
+  | (n : ℕ) => by rw [zpow_natCast, map_pow, zpow_natCast]
   | -[n+1] => by rw [zpow_negSucc, hf, map_pow, ← zpow_negSucc]
 #align map_zpow' map_zpow'
 #align map_zsmul' map_zsmul'
Diff
@@ -490,7 +490,7 @@ attribute [to_additive_reorder 8, to_additive] map_pow
 @[to_additive]
 theorem map_zpow' [DivInvMonoid G] [DivInvMonoid H] [MonoidHomClass F G H] (f : F)
     (hf : ∀ x : G, f x⁻¹ = (f x)⁻¹) (a : G) : ∀ n : ℤ, f (a ^ n) = f a ^ n
-  | (n : ℕ) => by rw [zpow_ofNat, map_pow, zpow_ofNat]
+  | (n : ℕ) => by rw [zpow_coe_nat, map_pow, zpow_coe_nat]
   | -[n+1] => by rw [zpow_negSucc, hf, map_pow, ← zpow_negSucc]
 #align map_zpow' map_zpow'
 #align map_zsmul' map_zsmul'
Diff
@@ -391,16 +391,16 @@ class MonoidHomClass (F : Type _) (M N : outParam <| Type _) [MulOneClass M] [Mu
 #align add_monoid_hom_class AddMonoidHomClass
 -/
 
-#print MonoidHom.monoidHomClass /-
+#print MonoidHom.instMonoidHomClass /-
 @[to_additive]
-instance MonoidHom.monoidHomClass : MonoidHomClass (M →* N) M N
+instance MonoidHom.instMonoidHomClass : MonoidHomClass (M →* N) M N
     where
   coe := MonoidHom.toFun
   coe_injective' f g h := by cases f <;> cases g <;> congr
   map_hMul := MonoidHom.map_mul'
   map_one := MonoidHom.map_one'
-#align monoid_hom.monoid_hom_class MonoidHom.monoidHomClass
-#align add_monoid_hom.add_monoid_hom_class AddMonoidHom.addMonoidHomClass
+#align monoid_hom.monoid_hom_class MonoidHom.instMonoidHomClass
+#align add_monoid_hom.add_monoid_hom_class AddMonoidHom.instAddMonoidHomClass
 -/
 
 @[to_additive]
@@ -1667,7 +1667,7 @@ instance : Inhabited (Monoid.End M) :=
   ⟨1⟩
 
 instance : MonoidHomClass (Monoid.End M) M M :=
-  MonoidHom.monoidHomClass
+  MonoidHom.instMonoidHomClass
 
 end End
 
@@ -1712,7 +1712,7 @@ instance : Inhabited (AddMonoid.End A) :=
   ⟨1⟩
 
 instance : AddMonoidHomClass (AddMonoid.End A) A A :=
-  AddMonoidHom.addMonoidHomClass
+  AddMonoidHom.instAddMonoidHomClass
 
 end End
 
Diff
@@ -97,7 +97,7 @@ structure ZeroHom (M : Type _) (N : Type _) [Zero M] [Zero N] where
 You should extend this typeclass when you extend `zero_hom`.
 -/
 class ZeroHomClass (F : Type _) (M N : outParam <| Type _) [Zero M] [Zero N] extends
-    FunLike F M fun _ => N where
+    DFunLike F M fun _ => N where
   map_zero : ∀ f : F, f 0 = 0
 #align zero_hom_class ZeroHomClass
 -/
@@ -144,7 +144,7 @@ structure AddHom (M : Type _) (N : Type _) [Add M] [Add N] where
 You should declare an instance of this typeclass when you extend `add_hom`.
 -/
 class AddHomClass (F : Type _) (M N : outParam <| Type _) [Add M] [Add N] extends
-    FunLike F M fun _ => N where
+    DFunLike F M fun _ => N where
   map_add : ∀ (f : F) (x y : M), f (x + y) = f x + f y
 #align add_hom_class AddHomClass
 -/
@@ -215,7 +215,7 @@ You should extend this typeclass when you extend `one_hom`.
 -/
 @[to_additive]
 class OneHomClass (F : Type _) (M N : outParam <| Type _) [One M] [One N] extends
-    FunLike F M fun _ => N where
+    DFunLike F M fun _ => N where
   map_one : ∀ f : F, f 1 = 1
 #align one_hom_class OneHomClass
 #align zero_hom_class ZeroHomClass
@@ -313,7 +313,7 @@ You should declare an instance of this typeclass when you extend `mul_hom`.
 -/
 @[to_additive]
 class MulHomClass (F : Type _) (M N : outParam <| Type _) [Mul M] [Mul N] extends
-    FunLike F M fun _ => N where
+    DFunLike F M fun _ => N where
   map_hMul : ∀ (f : F) (x y : M), f (x * y) = f x * f y
 #align mul_hom_class MulHomClass
 #align add_hom_class AddHomClass
@@ -784,7 +784,7 @@ theorem MonoidWithZeroHom.toMonoidHom_coe [MulZeroOneClass M] [MulZeroOneClass N
 #print OneHom.ext /-
 @[ext, to_additive]
 theorem OneHom.ext [One M] [One N] ⦃f g : OneHom M N⦄ (h : ∀ x, f x = g x) : f = g :=
-  FunLike.ext _ _ h
+  DFunLike.ext _ _ h
 #align one_hom.ext OneHom.ext
 #align zero_hom.ext ZeroHom.ext
 -/
@@ -792,7 +792,7 @@ theorem OneHom.ext [One M] [One N] ⦃f g : OneHom M N⦄ (h : ∀ x, f x = g x)
 #print MulHom.ext /-
 @[ext, to_additive]
 theorem MulHom.ext [Mul M] [Mul N] ⦃f g : M →ₙ* N⦄ (h : ∀ x, f x = g x) : f = g :=
-  FunLike.ext _ _ h
+  DFunLike.ext _ _ h
 #align mul_hom.ext MulHom.ext
 #align add_hom.ext AddHom.ext
 -/
@@ -800,7 +800,7 @@ theorem MulHom.ext [Mul M] [Mul N] ⦃f g : M →ₙ* N⦄ (h : ∀ x, f x = g x
 #print MonoidHom.ext /-
 @[ext, to_additive]
 theorem MonoidHom.ext [MulOneClass M] [MulOneClass N] ⦃f g : M →* N⦄ (h : ∀ x, f x = g x) : f = g :=
-  FunLike.ext _ _ h
+  DFunLike.ext _ _ h
 #align monoid_hom.ext MonoidHom.ext
 #align add_monoid_hom.ext AddMonoidHom.ext
 -/
@@ -809,7 +809,7 @@ theorem MonoidHom.ext [MulOneClass M] [MulOneClass N] ⦃f g : M →* N⦄ (h :
 @[ext]
 theorem MonoidWithZeroHom.ext [MulZeroOneClass M] [MulZeroOneClass N] ⦃f g : M →*₀ N⦄
     (h : ∀ x, f x = g x) : f = g :=
-  FunLike.ext _ _ h
+  DFunLike.ext _ _ h
 #align monoid_with_zero_hom.ext MonoidWithZeroHom.ext
 -/
 
@@ -819,7 +819,7 @@ section Deprecated
 /-- Deprecated: use `fun_like.congr_fun` instead. -/
 @[to_additive "Deprecated: use `fun_like.congr_fun` instead."]
 theorem OneHom.congr_fun [One M] [One N] {f g : OneHom M N} (h : f = g) (x : M) : f x = g x :=
-  FunLike.congr_fun h x
+  DFunLike.congr_fun h x
 #align one_hom.congr_fun OneHom.congr_fun
 #align zero_hom.congr_fun ZeroHom.congr_fun
 -/
@@ -828,7 +828,7 @@ theorem OneHom.congr_fun [One M] [One N] {f g : OneHom M N} (h : f = g) (x : M)
 /-- Deprecated: use `fun_like.congr_fun` instead. -/
 @[to_additive "Deprecated: use `fun_like.congr_fun` instead."]
 theorem MulHom.congr_fun [Mul M] [Mul N] {f g : M →ₙ* N} (h : f = g) (x : M) : f x = g x :=
-  FunLike.congr_fun h x
+  DFunLike.congr_fun h x
 #align mul_hom.congr_fun MulHom.congr_fun
 #align add_hom.congr_fun AddHom.congr_fun
 -/
@@ -838,7 +838,7 @@ theorem MulHom.congr_fun [Mul M] [Mul N] {f g : M →ₙ* N} (h : f = g) (x : M)
 @[to_additive "Deprecated: use `fun_like.congr_fun` instead."]
 theorem MonoidHom.congr_fun [MulOneClass M] [MulOneClass N] {f g : M →* N} (h : f = g) (x : M) :
     f x = g x :=
-  FunLike.congr_fun h x
+  DFunLike.congr_fun h x
 #align monoid_hom.congr_fun MonoidHom.congr_fun
 #align add_monoid_hom.congr_fun AddMonoidHom.congr_fun
 -/
@@ -847,7 +847,7 @@ theorem MonoidHom.congr_fun [MulOneClass M] [MulOneClass N] {f g : M →* N} (h
 /-- Deprecated: use `fun_like.congr_fun` instead. -/
 theorem MonoidWithZeroHom.congr_fun [MulZeroOneClass M] [MulZeroOneClass N] {f g : M →*₀ N}
     (h : f = g) (x : M) : f x = g x :=
-  FunLike.congr_fun h x
+  DFunLike.congr_fun h x
 #align monoid_with_zero_hom.congr_fun MonoidWithZeroHom.congr_fun
 -/
 
@@ -855,7 +855,7 @@ theorem MonoidWithZeroHom.congr_fun [MulZeroOneClass M] [MulZeroOneClass N] {f g
 /-- Deprecated: use `fun_like.congr_arg` instead. -/
 @[to_additive "Deprecated: use `fun_like.congr_arg` instead."]
 theorem OneHom.congr_arg [One M] [One N] (f : OneHom M N) {x y : M} (h : x = y) : f x = f y :=
-  FunLike.congr_arg f h
+  DFunLike.congr_arg f h
 #align one_hom.congr_arg OneHom.congr_arg
 #align zero_hom.congr_arg ZeroHom.congr_arg
 -/
@@ -864,7 +864,7 @@ theorem OneHom.congr_arg [One M] [One N] (f : OneHom M N) {x y : M} (h : x = y)
 /-- Deprecated: use `fun_like.congr_arg` instead. -/
 @[to_additive "Deprecated: use `fun_like.congr_arg` instead."]
 theorem MulHom.congr_arg [Mul M] [Mul N] (f : M →ₙ* N) {x y : M} (h : x = y) : f x = f y :=
-  FunLike.congr_arg f h
+  DFunLike.congr_arg f h
 #align mul_hom.congr_arg MulHom.congr_arg
 #align add_hom.congr_arg AddHom.congr_arg
 -/
@@ -874,7 +874,7 @@ theorem MulHom.congr_arg [Mul M] [Mul N] (f : M →ₙ* N) {x y : M} (h : x = y)
 @[to_additive "Deprecated: use `fun_like.congr_arg` instead."]
 theorem MonoidHom.congr_arg [MulOneClass M] [MulOneClass N] (f : M →* N) {x y : M} (h : x = y) :
     f x = f y :=
-  FunLike.congr_arg f h
+  DFunLike.congr_arg f h
 #align monoid_hom.congr_arg MonoidHom.congr_arg
 #align add_monoid_hom.congr_arg AddMonoidHom.congr_arg
 -/
@@ -883,7 +883,7 @@ theorem MonoidHom.congr_arg [MulOneClass M] [MulOneClass N] (f : M →* N) {x y
 /-- Deprecated: use `fun_like.congr_arg` instead. -/
 theorem MonoidWithZeroHom.congr_arg [MulZeroOneClass M] [MulZeroOneClass N] (f : M →*₀ N) {x y : M}
     (h : x = y) : f x = f y :=
-  FunLike.congr_arg f h
+  DFunLike.congr_arg f h
 #align monoid_with_zero_hom.congr_arg MonoidWithZeroHom.congr_arg
 -/
 
@@ -891,7 +891,7 @@ theorem MonoidWithZeroHom.congr_arg [MulZeroOneClass M] [MulZeroOneClass N] (f :
 /-- Deprecated: use `fun_like.coe_injective` instead. -/
 @[to_additive "Deprecated: use `fun_like.coe_injective` instead."]
 theorem OneHom.coe_inj [One M] [One N] ⦃f g : OneHom M N⦄ (h : (f : M → N) = g) : f = g :=
-  FunLike.coe_injective h
+  DFunLike.coe_injective h
 #align one_hom.coe_inj OneHom.coe_inj
 #align zero_hom.coe_inj ZeroHom.coe_inj
 -/
@@ -900,7 +900,7 @@ theorem OneHom.coe_inj [One M] [One N] ⦃f g : OneHom M N⦄ (h : (f : M → N)
 /-- Deprecated: use `fun_like.coe_injective` instead. -/
 @[to_additive "Deprecated: use `fun_like.coe_injective` instead."]
 theorem MulHom.coe_inj [Mul M] [Mul N] ⦃f g : M →ₙ* N⦄ (h : (f : M → N) = g) : f = g :=
-  FunLike.coe_injective h
+  DFunLike.coe_injective h
 #align mul_hom.coe_inj MulHom.coe_inj
 #align add_hom.coe_inj AddHom.coe_inj
 -/
@@ -910,7 +910,7 @@ theorem MulHom.coe_inj [Mul M] [Mul N] ⦃f g : M →ₙ* N⦄ (h : (f : M → N
 @[to_additive "Deprecated: use `fun_like.coe_injective` instead."]
 theorem MonoidHom.coe_inj [MulOneClass M] [MulOneClass N] ⦃f g : M →* N⦄ (h : (f : M → N) = g) :
     f = g :=
-  FunLike.coe_injective h
+  DFunLike.coe_injective h
 #align monoid_hom.coe_inj MonoidHom.coe_inj
 #align add_monoid_hom.coe_inj AddMonoidHom.coe_inj
 -/
@@ -919,7 +919,7 @@ theorem MonoidHom.coe_inj [MulOneClass M] [MulOneClass N] ⦃f g : M →* N⦄ (
 /-- Deprecated: use `fun_like.coe_injective` instead. -/
 theorem MonoidWithZeroHom.coe_inj [MulZeroOneClass M] [MulZeroOneClass N] ⦃f g : M →*₀ N⦄
     (h : (f : M → N) = g) : f = g :=
-  FunLike.coe_injective h
+  DFunLike.coe_injective h
 #align monoid_with_zero_hom.coe_inj MonoidWithZeroHom.coe_inj
 -/
 
@@ -927,7 +927,7 @@ theorem MonoidWithZeroHom.coe_inj [MulZeroOneClass M] [MulZeroOneClass N] ⦃f g
 /-- Deprecated: use `fun_like.ext_iff` instead. -/
 @[to_additive "Deprecated: use `fun_like.ext_iff` instead."]
 theorem OneHom.ext_iff [One M] [One N] {f g : OneHom M N} : f = g ↔ ∀ x, f x = g x :=
-  FunLike.ext_iff
+  DFunLike.ext_iff
 #align one_hom.ext_iff OneHom.ext_iff
 #align zero_hom.ext_iff ZeroHom.ext_iff
 -/
@@ -936,7 +936,7 @@ theorem OneHom.ext_iff [One M] [One N] {f g : OneHom M N} : f = g ↔ ∀ x, f x
 /-- Deprecated: use `fun_like.ext_iff` instead. -/
 @[to_additive "Deprecated: use `fun_like.ext_iff` instead."]
 theorem MulHom.ext_iff [Mul M] [Mul N] {f g : M →ₙ* N} : f = g ↔ ∀ x, f x = g x :=
-  FunLike.ext_iff
+  DFunLike.ext_iff
 #align mul_hom.ext_iff MulHom.ext_iff
 #align add_hom.ext_iff AddHom.ext_iff
 -/
@@ -945,7 +945,7 @@ theorem MulHom.ext_iff [Mul M] [Mul N] {f g : M →ₙ* N} : f = g ↔ ∀ x, f
 /-- Deprecated: use `fun_like.ext_iff` instead. -/
 @[to_additive "Deprecated: use `fun_like.ext_iff` instead."]
 theorem MonoidHom.ext_iff [MulOneClass M] [MulOneClass N] {f g : M →* N} : f = g ↔ ∀ x, f x = g x :=
-  FunLike.ext_iff
+  DFunLike.ext_iff
 #align monoid_hom.ext_iff MonoidHom.ext_iff
 #align add_monoid_hom.ext_iff AddMonoidHom.ext_iff
 -/
@@ -954,7 +954,7 @@ theorem MonoidHom.ext_iff [MulOneClass M] [MulOneClass N] {f g : M →* N} : f =
 /-- Deprecated: use `fun_like.ext_iff` instead. -/
 theorem MonoidWithZeroHom.ext_iff [MulZeroOneClass M] [MulZeroOneClass N] {f g : M →*₀ N} :
     f = g ↔ ∀ x, f x = g x :=
-  FunLike.ext_iff
+  DFunLike.ext_iff
 #align monoid_with_zero_hom.ext_iff MonoidWithZeroHom.ext_iff
 -/
 
@@ -1021,7 +1021,7 @@ theorem OneHom.coe_copy {hM : One M} {hN : One N} (f : OneHom M N) (f' : M → N
 @[to_additive]
 theorem OneHom.coe_copy_eq {hM : One M} {hN : One N} (f : OneHom M N) (f' : M → N) (h : f' = f) :
     f.copy f' h = f :=
-  FunLike.ext' h
+  DFunLike.ext' h
 #align one_hom.coe_copy_eq OneHom.coe_copy_eq
 #align zero_hom.coe_copy_eq ZeroHom.coe_copy_eq
 -/
@@ -1052,7 +1052,7 @@ theorem MulHom.coe_copy {hM : Mul M} {hN : Mul N} (f : M →ₙ* N) (f' : M →
 @[to_additive]
 theorem MulHom.coe_copy_eq {hM : Mul M} {hN : Mul N} (f : M →ₙ* N) (f' : M → N) (h : f' = f) :
     f.copy f' h = f :=
-  FunLike.ext' h
+  DFunLike.ext' h
 #align mul_hom.coe_copy_eq MulHom.coe_copy_eq
 #align add_hom.coe_copy_eq AddHom.coe_copy_eq
 -/
@@ -1082,7 +1082,7 @@ theorem MonoidHom.coe_copy {hM : MulOneClass M} {hN : MulOneClass N} (f : M →*
 @[to_additive]
 theorem MonoidHom.copy_eq {hM : MulOneClass M} {hN : MulOneClass N} (f : M →* N) (f' : M → N)
     (h : f' = f) : f.copy f' h = f :=
-  FunLike.ext' h
+  DFunLike.ext' h
 #align monoid_hom.copy_eq MonoidHom.copy_eq
 #align add_monoid_hom.copy_eq AddMonoidHom.copy_eq
 -/
@@ -1107,7 +1107,7 @@ theorem MonoidWithZeroHom.coe_copy {hM : MulZeroOneClass M} {hN : MulZeroOneClas
 #print MonoidWithZeroHom.copy_eq /-
 theorem MonoidWithZeroHom.copy_eq {hM : MulZeroOneClass M} {hN : MulZeroOneClass N} (f : M →*₀ N)
     (f' : M → N) (h : f' = f) : f.copy f' h = f :=
-  FunLike.ext' h
+  DFunLike.ext' h
 #align monoid_with_zero_hom.copy_eq MonoidWithZeroHom.copy_eq
 -/
 
Diff
@@ -4,10 +4,10 @@ Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Patrick Massot, Kevin Buzzard, Scott Morrison, Johan Commelin, Chris Hughes,
   Johannes Hölzl, Yury Kudryashov
 -/
-import Mathbin.Algebra.NeZero
-import Mathbin.Algebra.Group.Basic
-import Mathbin.Algebra.GroupWithZero.Defs
-import Mathbin.Data.FunLike.Basic
+import Algebra.NeZero
+import Algebra.Group.Basic
+import Algebra.GroupWithZero.Defs
+import Data.FunLike.Basic
 
 #align_import algebra.hom.group from "leanprover-community/mathlib"@"448144f7ae193a8990cb7473c9e9a01990f64ac7"
 
Diff
@@ -314,7 +314,7 @@ You should declare an instance of this typeclass when you extend `mul_hom`.
 @[to_additive]
 class MulHomClass (F : Type _) (M N : outParam <| Type _) [Mul M] [Mul N] extends
     FunLike F M fun _ => N where
-  map_mul : ∀ (f : F) (x y : M), f (x * y) = f x * f y
+  map_hMul : ∀ (f : F) (x y : M), f (x * y) = f x * f y
 #align mul_hom_class MulHomClass
 #align add_hom_class AddHomClass
 -/
@@ -325,7 +325,7 @@ instance MulHom.mulHomClass : MulHomClass (M →ₙ* N) M N
     where
   coe := MulHom.toFun
   coe_injective' f g h := by cases f <;> cases g <;> congr
-  map_mul := MulHom.map_mul'
+  map_hMul := MulHom.map_mul'
 #align mul_hom.mul_hom_class MulHom.mulHomClass
 #align add_hom.add_hom_class AddHom.addHomClass
 -/
@@ -333,7 +333,7 @@ instance MulHom.mulHomClass : MulHomClass (M →ₙ* N) M N
 #print map_mul /-
 @[simp, to_additive]
 theorem map_mul [MulHomClass F M N] (f : F) (x y : M) : f (x * y) = f x * f y :=
-  MulHomClass.map_mul f x y
+  MulHomClass.map_hMul f x y
 #align map_mul map_mul
 #align map_add map_add
 -/
@@ -397,7 +397,7 @@ instance MonoidHom.monoidHomClass : MonoidHomClass (M →* N) M N
     where
   coe := MonoidHom.toFun
   coe_injective' f g h := by cases f <;> cases g <;> congr
-  map_mul := MonoidHom.map_mul'
+  map_hMul := MonoidHom.map_mul'
   map_one := MonoidHom.map_one'
 #align monoid_hom.monoid_hom_class MonoidHom.monoidHomClass
 #align add_monoid_hom.add_monoid_hom_class AddMonoidHom.addMonoidHomClass
@@ -562,7 +562,7 @@ instance MonoidWithZeroHom.monoidWithZeroHomClass : MonoidWithZeroHomClass (M 
     where
   coe := MonoidWithZeroHom.toFun
   coe_injective' f g h := by cases f <;> cases g <;> congr
-  map_mul := MonoidWithZeroHom.map_mul'
+  map_hMul := MonoidWithZeroHom.map_mul'
   map_one := MonoidWithZeroHom.map_one'
   map_zero := MonoidWithZeroHom.map_zero'
 #align monoid_with_zero_hom.monoid_with_zero_hom_class MonoidWithZeroHom.monoidWithZeroHomClass
Diff
@@ -3,17 +3,14 @@ Copyright (c) 2018 Patrick Massot. All rights reserved.
 Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Patrick Massot, Kevin Buzzard, Scott Morrison, Johan Commelin, Chris Hughes,
   Johannes Hölzl, Yury Kudryashov
-
-! This file was ported from Lean 3 source module algebra.hom.group
-! 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.NeZero
 import Mathbin.Algebra.Group.Basic
 import Mathbin.Algebra.GroupWithZero.Defs
 import Mathbin.Data.FunLike.Basic
 
+#align_import algebra.hom.group from "leanprover-community/mathlib"@"448144f7ae193a8990cb7473c9e9a01990f64ac7"
+
 /-!
 # Monoid and group homomorphisms
 
Diff
@@ -110,15 +110,19 @@ end Zero
 
 namespace NeZero
 
+#print NeZero.of_map /-
 theorem of_map {R M} [Zero R] [Zero M] [ZeroHomClass F R M] (f : F) {r : R} [NeZero (f r)] :
     NeZero r :=
   ⟨fun h => ne (f r) <| by convert ZeroHomClass.map_zero f⟩
 #align ne_zero.of_map NeZero.of_map
+-/
 
+#print NeZero.of_injective /-
 theorem of_injective {R M} [Zero R] {r : R} [NeZero r] [Zero M] [ZeroHomClass F R M] {f : F}
     (hf : Function.Injective f) : NeZero (f r) :=
   ⟨by rw [← ZeroHomClass.map_zero f]; exact hf.ne (Ne r)⟩
 #align ne_zero.of_injective NeZero.of_injective
+-/
 
 end NeZero
 
@@ -172,7 +176,6 @@ attribute [nolint doc_blame] AddMonoidHom.toAddHom
 
 attribute [nolint doc_blame] AddMonoidHom.toZeroHom
 
--- mathport name: «expr →+ »
 infixr:25 " →+ " => AddMonoidHom
 
 #print AddMonoidHomClass /-
@@ -232,32 +235,40 @@ instance OneHom.oneHomClass : OneHomClass (OneHom M N) M N
 #align zero_hom.zero_hom_class ZeroHom.zeroHomClass
 -/
 
+#print map_one /-
 @[simp, to_additive]
 theorem map_one [OneHomClass F M N] (f : F) : f 1 = 1 :=
   OneHomClass.map_one f
 #align map_one map_one
 #align map_zero map_zero
+-/
 
+#print map_eq_one_iff /-
 @[to_additive]
 theorem map_eq_one_iff [OneHomClass F M N] (f : F) (hf : Function.Injective f) {x : M} :
     f x = 1 ↔ x = 1 :=
   hf.eq_iff' (map_one f)
 #align map_eq_one_iff map_eq_one_iff
 #align map_eq_zero_iff map_eq_zero_iff
+-/
 
+#print map_ne_one_iff /-
 @[to_additive]
 theorem map_ne_one_iff {R S F : Type _} [One R] [One S] [OneHomClass F R S] (f : F)
     (hf : Function.Injective f) {x : R} : f x ≠ 1 ↔ x ≠ 1 :=
   (map_eq_one_iff f hf).Not
 #align map_ne_one_iff map_ne_one_iff
 #align map_ne_zero_iff map_ne_zero_iff
+-/
 
+#print ne_one_of_map /-
 @[to_additive]
 theorem ne_one_of_map {R S F : Type _} [One R] [One S] [OneHomClass F R S] {f : F} {x : R}
     (hx : f x ≠ 1) : x ≠ 1 :=
   ne_of_apply_ne f <| ne_of_ne_of_eq hx (map_one f).symm
 #align ne_one_of_map ne_one_of_map
 #align ne_zero_of_map ne_zero_of_map
+-/
 
 @[to_additive]
 instance [OneHomClass F M N] : CoeTC F (OneHom M N) :=
@@ -265,11 +276,13 @@ instance [OneHomClass F M N] : CoeTC F (OneHom M N) :=
     { toFun := f
       map_one' := map_one f }⟩
 
+#print OneHom.coe_coe /-
 @[simp, to_additive]
 theorem OneHom.coe_coe [OneHomClass F M N] (f : F) : ((f : OneHom M N) : M → N) = f :=
   rfl
 #align one_hom.coe_coe OneHom.coe_coe
 #align zero_hom.coe_coe ZeroHom.coe_coe
+-/
 
 end One
 
@@ -294,7 +307,6 @@ structure MulHom (M : Type _) (N : Type _) [Mul M] [Mul N] where
 #align add_hom AddHom
 -/
 
--- mathport name: «expr →ₙ* »
 infixr:25 " →ₙ* " => MulHom
 
 #print MulHomClass /-
@@ -321,11 +333,13 @@ instance MulHom.mulHomClass : MulHomClass (M →ₙ* N) M N
 #align add_hom.add_hom_class AddHom.addHomClass
 -/
 
+#print map_mul /-
 @[simp, to_additive]
 theorem map_mul [MulHomClass F M N] (f : F) (x y : M) : f (x * y) = f x * f y :=
   MulHomClass.map_mul f x y
 #align map_mul map_mul
 #align map_add map_add
+-/
 
 @[to_additive]
 instance [MulHomClass F M N] : CoeTC F (M →ₙ* N) :=
@@ -333,11 +347,13 @@ instance [MulHomClass F M N] : CoeTC F (M →ₙ* N) :=
     { toFun := f
       map_mul' := map_mul f }⟩
 
+#print MulHom.coe_coe /-
 @[simp, to_additive]
 theorem MulHom.coe_coe [MulHomClass F M N] (f : F) : ((f : MulHom M N) : M → N) = f :=
   rfl
 #align mul_hom.coe_coe MulHom.coe_coe
 #align add_hom.coe_coe AddHom.coe_coe
+-/
 
 end Mul
 
@@ -365,7 +381,6 @@ attribute [nolint doc_blame] MonoidHom.toMulHom
 
 attribute [nolint doc_blame] MonoidHom.toOneHom
 
--- mathport name: «expr →* »
 infixr:25 " →* " => MonoidHom
 
 #print MonoidHomClass /-
@@ -398,25 +413,32 @@ instance [MonoidHomClass F M N] : CoeTC F (M →* N) :=
       map_one' := map_one f
       map_mul' := map_mul f }⟩
 
+#print MonoidHom.coe_coe /-
 @[simp, to_additive]
 theorem MonoidHom.coe_coe [MonoidHomClass F M N] (f : F) : ((f : M →* N) : M → N) = f :=
   rfl
 #align monoid_hom.coe_coe MonoidHom.coe_coe
 #align add_monoid_hom.coe_coe AddMonoidHom.coe_coe
+-/
 
+#print map_mul_eq_one /-
 @[to_additive]
 theorem map_mul_eq_one [MonoidHomClass F M N] (f : F) {a b : M} (h : a * b = 1) : f a * f b = 1 :=
   by rw [← map_mul, h, map_one]
 #align map_mul_eq_one map_mul_eq_one
 #align map_add_eq_zero map_add_eq_zero
+-/
 
+#print map_div' /-
 @[to_additive]
 theorem map_div' [DivInvMonoid G] [DivInvMonoid H] [MonoidHomClass F G H] (f : F)
     (hf : ∀ a, f a⁻¹ = (f a)⁻¹) (a b : G) : f (a / b) = f a / f b := by
   rw [div_eq_mul_inv, div_eq_mul_inv, map_mul, hf]
 #align map_div' map_div'
 #align map_sub' map_sub'
+-/
 
+#print map_inv /-
 /-- Group homomorphisms preserve inverse. -/
 @[simp, to_additive "Additive group homomorphisms preserve negation."]
 theorem map_inv [Group G] [DivisionMonoid H] [MonoidHomClass F G H] (f : F) (a : G) :
@@ -424,14 +446,18 @@ theorem map_inv [Group G] [DivisionMonoid H] [MonoidHomClass F G H] (f : F) (a :
   eq_inv_of_mul_eq_one_left <| map_mul_eq_one f <| inv_mul_self _
 #align map_inv map_inv
 #align map_neg map_neg
+-/
 
+#print map_mul_inv /-
 /-- Group homomorphisms preserve division. -/
 @[simp, to_additive "Additive group homomorphisms preserve subtraction."]
 theorem map_mul_inv [Group G] [DivisionMonoid H] [MonoidHomClass F G H] (f : F) (a b : G) :
     f (a * b⁻¹) = f a * (f b)⁻¹ := by rw [map_mul, map_inv]
 #align map_mul_inv map_mul_inv
 #align map_add_neg map_add_neg
+-/
 
+#print map_div /-
 /-- Group homomorphisms preserve division. -/
 @[simp, to_additive "Additive group homomorphisms preserve subtraction."]
 theorem map_div [Group G] [DivisionMonoid H] [MonoidHomClass F G H] (f : F) :
@@ -439,7 +465,9 @@ theorem map_div [Group G] [DivisionMonoid H] [MonoidHomClass F G H] (f : F) :
   map_div' _ <| map_inv f
 #align map_div map_div
 #align map_sub map_sub
+-/
 
+#print map_pow /-
 -- to_additive puts the arguments in the wrong order, so generate an auxiliary lemma, then
 -- swap its arguments.
 @[to_additive map_nsmul.aux, simp]
@@ -449,15 +477,19 @@ theorem map_pow [Monoid G] [Monoid H] [MonoidHomClass F G H] (f : F) (a : G) :
   | n + 1 => by rw [pow_succ, pow_succ, map_mul, map_pow]
 #align map_pow map_pow
 #align map_nsmul map_nsmul
+-/
 
+#print map_nsmul /-
 @[simp]
 theorem map_nsmul [AddMonoid G] [AddMonoid H] [AddMonoidHomClass F G H] (f : F) (n : ℕ) (a : G) :
     f (n • a) = n • f a :=
   map_nsmul.aux f a n
 #align map_nsmul map_nsmul
+-/
 
 attribute [to_additive_reorder 8, to_additive] map_pow
 
+#print map_zpow' /-
 @[to_additive]
 theorem map_zpow' [DivInvMonoid G] [DivInvMonoid H] [MonoidHomClass F G H] (f : F)
     (hf : ∀ x : G, f x⁻¹ = (f x)⁻¹) (a : G) : ∀ n : ℤ, f (a ^ n) = f a ^ n
@@ -465,7 +497,9 @@ theorem map_zpow' [DivInvMonoid G] [DivInvMonoid H] [MonoidHomClass F G H] (f :
   | -[n+1] => by rw [zpow_negSucc, hf, map_pow, ← zpow_negSucc]
 #align map_zpow' map_zpow'
 #align map_zsmul' map_zsmul'
+-/
 
+#print map_zpow /-
 -- to_additive puts the arguments in the wrong order, so generate an auxiliary lemma, then
 -- swap its arguments.
 /-- Group homomorphisms preserve integer power. -/
@@ -475,12 +509,15 @@ theorem map_zpow [Group G] [DivisionMonoid H] [MonoidHomClass F G H] (f : F) (g
   map_zpow' f (map_inv f) g n
 #align map_zpow map_zpow
 #align map_zsmul map_zsmul
+-/
 
+#print map_zsmul /-
 /-- Additive group homomorphisms preserve integer scaling. -/
 theorem map_zsmul [AddGroup G] [SubtractionMonoid H] [AddMonoidHomClass F G H] (f : F) (n : ℤ)
     (g : G) : f (n • g) = n • f g :=
   map_zsmul.aux f g n
 #align map_zsmul map_zsmul
+-/
 
 attribute [to_additive_reorder 8, to_additive] map_zpow
 
@@ -510,7 +547,6 @@ attribute [nolint doc_blame] MonoidWithZeroHom.toMonoidHom
 
 attribute [nolint doc_blame] MonoidWithZeroHom.toZeroHom
 
--- mathport name: «expr →*₀ »
 infixr:25 " →*₀ " => MonoidWithZeroHom
 
 #print MonoidWithZeroHomClass /-
@@ -542,11 +578,13 @@ instance [MonoidWithZeroHomClass F M N] : CoeTC F (M →*₀ N) :=
       map_zero' := map_zero f
       map_mul' := map_mul f }⟩
 
+#print MonoidWithZeroHom.coe_coe /-
 @[simp]
 theorem MonoidWithZeroHom.coe_coe [MonoidWithZeroHomClass F M N] (f : F) :
     ((f : M →*₀ N) : M → N) = f :=
   rfl
 #align monoid_with_zero_hom.coe_coe MonoidWithZeroHom.coe_coe
+-/
 
 end MulZeroOne
 
@@ -556,18 +594,22 @@ section Coes
 /-! Bundled morphisms can be down-cast to weaker bundlings -/
 
 
+#print MonoidHom.coeToOneHom /-
 @[to_additive]
 instance MonoidHom.coeToOneHom {mM : MulOneClass M} {mN : MulOneClass N} :
     Coe (M →* N) (OneHom M N) :=
   ⟨MonoidHom.toOneHom⟩
 #align monoid_hom.has_coe_to_one_hom MonoidHom.coeToOneHom
 #align add_monoid_hom.has_coe_to_zero_hom AddMonoidHom.coeToZeroHom
+-/
 
+#print MonoidHom.coeToMulHom /-
 @[to_additive]
 instance MonoidHom.coeToMulHom {mM : MulOneClass M} {mN : MulOneClass N} : Coe (M →* N) (M →ₙ* N) :=
   ⟨MonoidHom.toMulHom⟩
 #align monoid_hom.has_coe_to_mul_hom MonoidHom.coeToMulHom
 #align add_monoid_hom.has_coe_to_add_hom AddMonoidHom.coeToAddHom
+-/
 
 #print MonoidWithZeroHom.coeToMonoidHom /-
 instance MonoidWithZeroHom.coeToMonoidHom {mM : MulZeroOneClass M} {mN : MulZeroOneClass N} :
@@ -576,10 +618,12 @@ instance MonoidWithZeroHom.coeToMonoidHom {mM : MulZeroOneClass M} {mN : MulZero
 #align monoid_with_zero_hom.has_coe_to_monoid_hom MonoidWithZeroHom.coeToMonoidHom
 -/
 
+#print MonoidWithZeroHom.coeToZeroHom /-
 instance MonoidWithZeroHom.coeToZeroHom {mM : MulZeroOneClass M} {mN : MulZeroOneClass N} :
     Coe (M →*₀ N) (ZeroHom M N) :=
   ⟨MonoidWithZeroHom.toZeroHom⟩
 #align monoid_with_zero_hom.has_coe_to_zero_hom MonoidWithZeroHom.coeToZeroHom
+-/
 
 /-! The simp-normal form of morphism coercion is `f.to_..._hom`. This choice is primarily because
 this is the way things were before the above coercions were introduced. Bundled morphisms defined
@@ -643,23 +687,29 @@ initialize_simps_projections MonoidHom (toFun → apply)
 
 initialize_simps_projections MonoidWithZeroHom (toFun → apply)
 
+#print OneHom.toFun_eq_coe /-
 @[simp, to_additive]
 theorem OneHom.toFun_eq_coe [One M] [One N] (f : OneHom M N) : f.toFun = f :=
   rfl
 #align one_hom.to_fun_eq_coe OneHom.toFun_eq_coe
 #align zero_hom.to_fun_eq_coe ZeroHom.toFun_eq_coe
+-/
 
+#print MulHom.toFun_eq_coe /-
 @[simp, to_additive]
 theorem MulHom.toFun_eq_coe [Mul M] [Mul N] (f : M →ₙ* N) : f.toFun = f :=
   rfl
 #align mul_hom.to_fun_eq_coe MulHom.toFun_eq_coe
 #align add_hom.to_fun_eq_coe AddHom.toFun_eq_coe
+-/
 
+#print MonoidHom.toFun_eq_coe /-
 @[simp, to_additive]
 theorem MonoidHom.toFun_eq_coe [MulOneClass M] [MulOneClass N] (f : M →* N) : f.toFun = f :=
   rfl
 #align monoid_hom.to_fun_eq_coe MonoidHom.toFun_eq_coe
 #align add_monoid_hom.to_fun_eq_coe AddMonoidHom.toFun_eq_coe
+-/
 
 @[simp]
 theorem MonoidWithZeroHom.toFun_eq_coe [MulZeroOneClass M] [MulZeroOneClass N] (f : M →*₀ N) :
@@ -667,97 +717,126 @@ theorem MonoidWithZeroHom.toFun_eq_coe [MulZeroOneClass M] [MulZeroOneClass N] (
   rfl
 #align monoid_with_zero_hom.to_fun_eq_coe MonoidWithZeroHom.toFun_eq_coe
 
+#print OneHom.coe_mk /-
 @[simp, to_additive]
 theorem OneHom.coe_mk [One M] [One N] (f : M → N) (h1) : (OneHom.mk f h1 : M → N) = f :=
   rfl
 #align one_hom.coe_mk OneHom.coe_mk
 #align zero_hom.coe_mk ZeroHom.coe_mk
+-/
 
+#print MulHom.coe_mk /-
 @[simp, to_additive]
 theorem MulHom.coe_mk [Mul M] [Mul N] (f : M → N) (hmul) : (MulHom.mk f hmul : M → N) = f :=
   rfl
 #align mul_hom.coe_mk MulHom.coe_mk
 #align add_hom.coe_mk AddHom.coe_mk
+-/
 
+#print MonoidHom.coe_mk /-
 @[simp, to_additive]
 theorem MonoidHom.coe_mk [MulOneClass M] [MulOneClass N] (f : M → N) (h1 hmul) :
     (MonoidHom.mk f h1 hmul : M → N) = f :=
   rfl
 #align monoid_hom.coe_mk MonoidHom.coe_mk
 #align add_monoid_hom.coe_mk AddMonoidHom.coe_mk
+-/
 
+#print MonoidWithZeroHom.coe_mk /-
 @[simp]
 theorem MonoidWithZeroHom.coe_mk [MulZeroOneClass M] [MulZeroOneClass N] (f : M → N) (h0 h1 hmul) :
     (MonoidWithZeroHom.mk f h0 h1 hmul : M → N) = f :=
   rfl
 #align monoid_with_zero_hom.coe_mk MonoidWithZeroHom.coe_mk
+-/
 
+#print MonoidHom.toOneHom_coe /-
 @[simp, to_additive]
 theorem MonoidHom.toOneHom_coe [MulOneClass M] [MulOneClass N] (f : M →* N) :
     (f.toOneHom : M → N) = f :=
   rfl
 #align monoid_hom.to_one_hom_coe MonoidHom.toOneHom_coe
 #align add_monoid_hom.to_zero_hom_coe AddMonoidHom.toZeroHom_coe
+-/
 
+#print MonoidHom.toMulHom_coe /-
 @[simp, to_additive]
 theorem MonoidHom.toMulHom_coe [MulOneClass M] [MulOneClass N] (f : M →* N) :
     (f.toMulHom : M → N) = f :=
   rfl
 #align monoid_hom.to_mul_hom_coe MonoidHom.toMulHom_coe
 #align add_monoid_hom.to_add_hom_coe AddMonoidHom.toAddHom_coe
+-/
 
+#print MonoidWithZeroHom.toZeroHom_coe /-
 @[simp]
 theorem MonoidWithZeroHom.toZeroHom_coe [MulZeroOneClass M] [MulZeroOneClass N] (f : M →*₀ N) :
     (f.toZeroHom : M → N) = f :=
   rfl
 #align monoid_with_zero_hom.to_zero_hom_coe MonoidWithZeroHom.toZeroHom_coe
+-/
 
+#print MonoidWithZeroHom.toMonoidHom_coe /-
 @[simp]
 theorem MonoidWithZeroHom.toMonoidHom_coe [MulZeroOneClass M] [MulZeroOneClass N] (f : M →*₀ N) :
     (f.toMonoidHom : M → N) = f :=
   rfl
 #align monoid_with_zero_hom.to_monoid_hom_coe MonoidWithZeroHom.toMonoidHom_coe
+-/
 
+#print OneHom.ext /-
 @[ext, to_additive]
 theorem OneHom.ext [One M] [One N] ⦃f g : OneHom M N⦄ (h : ∀ x, f x = g x) : f = g :=
   FunLike.ext _ _ h
 #align one_hom.ext OneHom.ext
 #align zero_hom.ext ZeroHom.ext
+-/
 
+#print MulHom.ext /-
 @[ext, to_additive]
 theorem MulHom.ext [Mul M] [Mul N] ⦃f g : M →ₙ* N⦄ (h : ∀ x, f x = g x) : f = g :=
   FunLike.ext _ _ h
 #align mul_hom.ext MulHom.ext
 #align add_hom.ext AddHom.ext
+-/
 
+#print MonoidHom.ext /-
 @[ext, to_additive]
 theorem MonoidHom.ext [MulOneClass M] [MulOneClass N] ⦃f g : M →* N⦄ (h : ∀ x, f x = g x) : f = g :=
   FunLike.ext _ _ h
 #align monoid_hom.ext MonoidHom.ext
 #align add_monoid_hom.ext AddMonoidHom.ext
+-/
 
+#print MonoidWithZeroHom.ext /-
 @[ext]
 theorem MonoidWithZeroHom.ext [MulZeroOneClass M] [MulZeroOneClass N] ⦃f g : M →*₀ N⦄
     (h : ∀ x, f x = g x) : f = g :=
   FunLike.ext _ _ h
 #align monoid_with_zero_hom.ext MonoidWithZeroHom.ext
+-/
 
 section Deprecated
 
+#print OneHom.congr_fun /-
 /-- Deprecated: use `fun_like.congr_fun` instead. -/
 @[to_additive "Deprecated: use `fun_like.congr_fun` instead."]
 theorem OneHom.congr_fun [One M] [One N] {f g : OneHom M N} (h : f = g) (x : M) : f x = g x :=
   FunLike.congr_fun h x
 #align one_hom.congr_fun OneHom.congr_fun
 #align zero_hom.congr_fun ZeroHom.congr_fun
+-/
 
+#print MulHom.congr_fun /-
 /-- Deprecated: use `fun_like.congr_fun` instead. -/
 @[to_additive "Deprecated: use `fun_like.congr_fun` instead."]
 theorem MulHom.congr_fun [Mul M] [Mul N] {f g : M →ₙ* N} (h : f = g) (x : M) : f x = g x :=
   FunLike.congr_fun h x
 #align mul_hom.congr_fun MulHom.congr_fun
 #align add_hom.congr_fun AddHom.congr_fun
+-/
 
+#print MonoidHom.congr_fun /-
 /-- Deprecated: use `fun_like.congr_fun` instead. -/
 @[to_additive "Deprecated: use `fun_like.congr_fun` instead."]
 theorem MonoidHom.congr_fun [MulOneClass M] [MulOneClass N] {f g : M →* N} (h : f = g) (x : M) :
@@ -765,27 +844,35 @@ theorem MonoidHom.congr_fun [MulOneClass M] [MulOneClass N] {f g : M →* N} (h
   FunLike.congr_fun h x
 #align monoid_hom.congr_fun MonoidHom.congr_fun
 #align add_monoid_hom.congr_fun AddMonoidHom.congr_fun
+-/
 
+#print MonoidWithZeroHom.congr_fun /-
 /-- Deprecated: use `fun_like.congr_fun` instead. -/
 theorem MonoidWithZeroHom.congr_fun [MulZeroOneClass M] [MulZeroOneClass N] {f g : M →*₀ N}
     (h : f = g) (x : M) : f x = g x :=
   FunLike.congr_fun h x
 #align monoid_with_zero_hom.congr_fun MonoidWithZeroHom.congr_fun
+-/
 
+#print OneHom.congr_arg /-
 /-- Deprecated: use `fun_like.congr_arg` instead. -/
 @[to_additive "Deprecated: use `fun_like.congr_arg` instead."]
 theorem OneHom.congr_arg [One M] [One N] (f : OneHom M N) {x y : M} (h : x = y) : f x = f y :=
   FunLike.congr_arg f h
 #align one_hom.congr_arg OneHom.congr_arg
 #align zero_hom.congr_arg ZeroHom.congr_arg
+-/
 
+#print MulHom.congr_arg /-
 /-- Deprecated: use `fun_like.congr_arg` instead. -/
 @[to_additive "Deprecated: use `fun_like.congr_arg` instead."]
 theorem MulHom.congr_arg [Mul M] [Mul N] (f : M →ₙ* N) {x y : M} (h : x = y) : f x = f y :=
   FunLike.congr_arg f h
 #align mul_hom.congr_arg MulHom.congr_arg
 #align add_hom.congr_arg AddHom.congr_arg
+-/
 
+#print MonoidHom.congr_arg /-
 /-- Deprecated: use `fun_like.congr_arg` instead. -/
 @[to_additive "Deprecated: use `fun_like.congr_arg` instead."]
 theorem MonoidHom.congr_arg [MulOneClass M] [MulOneClass N] (f : M →* N) {x y : M} (h : x = y) :
@@ -793,27 +880,35 @@ theorem MonoidHom.congr_arg [MulOneClass M] [MulOneClass N] (f : M →* N) {x y
   FunLike.congr_arg f h
 #align monoid_hom.congr_arg MonoidHom.congr_arg
 #align add_monoid_hom.congr_arg AddMonoidHom.congr_arg
+-/
 
+#print MonoidWithZeroHom.congr_arg /-
 /-- Deprecated: use `fun_like.congr_arg` instead. -/
 theorem MonoidWithZeroHom.congr_arg [MulZeroOneClass M] [MulZeroOneClass N] (f : M →*₀ N) {x y : M}
     (h : x = y) : f x = f y :=
   FunLike.congr_arg f h
 #align monoid_with_zero_hom.congr_arg MonoidWithZeroHom.congr_arg
+-/
 
+#print OneHom.coe_inj /-
 /-- Deprecated: use `fun_like.coe_injective` instead. -/
 @[to_additive "Deprecated: use `fun_like.coe_injective` instead."]
 theorem OneHom.coe_inj [One M] [One N] ⦃f g : OneHom M N⦄ (h : (f : M → N) = g) : f = g :=
   FunLike.coe_injective h
 #align one_hom.coe_inj OneHom.coe_inj
 #align zero_hom.coe_inj ZeroHom.coe_inj
+-/
 
+#print MulHom.coe_inj /-
 /-- Deprecated: use `fun_like.coe_injective` instead. -/
 @[to_additive "Deprecated: use `fun_like.coe_injective` instead."]
 theorem MulHom.coe_inj [Mul M] [Mul N] ⦃f g : M →ₙ* N⦄ (h : (f : M → N) = g) : f = g :=
   FunLike.coe_injective h
 #align mul_hom.coe_inj MulHom.coe_inj
 #align add_hom.coe_inj AddHom.coe_inj
+-/
 
+#print MonoidHom.coe_inj /-
 /-- Deprecated: use `fun_like.coe_injective` instead. -/
 @[to_additive "Deprecated: use `fun_like.coe_injective` instead."]
 theorem MonoidHom.coe_inj [MulOneClass M] [MulOneClass N] ⦃f g : M →* N⦄ (h : (f : M → N) = g) :
@@ -821,66 +916,85 @@ theorem MonoidHom.coe_inj [MulOneClass M] [MulOneClass N] ⦃f g : M →* N⦄ (
   FunLike.coe_injective h
 #align monoid_hom.coe_inj MonoidHom.coe_inj
 #align add_monoid_hom.coe_inj AddMonoidHom.coe_inj
+-/
 
+#print MonoidWithZeroHom.coe_inj /-
 /-- Deprecated: use `fun_like.coe_injective` instead. -/
 theorem MonoidWithZeroHom.coe_inj [MulZeroOneClass M] [MulZeroOneClass N] ⦃f g : M →*₀ N⦄
     (h : (f : M → N) = g) : f = g :=
   FunLike.coe_injective h
 #align monoid_with_zero_hom.coe_inj MonoidWithZeroHom.coe_inj
+-/
 
+#print OneHom.ext_iff /-
 /-- Deprecated: use `fun_like.ext_iff` instead. -/
 @[to_additive "Deprecated: use `fun_like.ext_iff` instead."]
 theorem OneHom.ext_iff [One M] [One N] {f g : OneHom M N} : f = g ↔ ∀ x, f x = g x :=
   FunLike.ext_iff
 #align one_hom.ext_iff OneHom.ext_iff
 #align zero_hom.ext_iff ZeroHom.ext_iff
+-/
 
+#print MulHom.ext_iff /-
 /-- Deprecated: use `fun_like.ext_iff` instead. -/
 @[to_additive "Deprecated: use `fun_like.ext_iff` instead."]
 theorem MulHom.ext_iff [Mul M] [Mul N] {f g : M →ₙ* N} : f = g ↔ ∀ x, f x = g x :=
   FunLike.ext_iff
 #align mul_hom.ext_iff MulHom.ext_iff
 #align add_hom.ext_iff AddHom.ext_iff
+-/
 
+#print MonoidHom.ext_iff /-
 /-- Deprecated: use `fun_like.ext_iff` instead. -/
 @[to_additive "Deprecated: use `fun_like.ext_iff` instead."]
 theorem MonoidHom.ext_iff [MulOneClass M] [MulOneClass N] {f g : M →* N} : f = g ↔ ∀ x, f x = g x :=
   FunLike.ext_iff
 #align monoid_hom.ext_iff MonoidHom.ext_iff
 #align add_monoid_hom.ext_iff AddMonoidHom.ext_iff
+-/
 
+#print MonoidWithZeroHom.ext_iff /-
 /-- Deprecated: use `fun_like.ext_iff` instead. -/
 theorem MonoidWithZeroHom.ext_iff [MulZeroOneClass M] [MulZeroOneClass N] {f g : M →*₀ N} :
     f = g ↔ ∀ x, f x = g x :=
   FunLike.ext_iff
 #align monoid_with_zero_hom.ext_iff MonoidWithZeroHom.ext_iff
+-/
 
 end Deprecated
 
+#print OneHom.mk_coe /-
 @[simp, to_additive]
 theorem OneHom.mk_coe [One M] [One N] (f : OneHom M N) (h1) : OneHom.mk f h1 = f :=
   OneHom.ext fun _ => rfl
 #align one_hom.mk_coe OneHom.mk_coe
 #align zero_hom.mk_coe ZeroHom.mk_coe
+-/
 
+#print MulHom.mk_coe /-
 @[simp, to_additive]
 theorem MulHom.mk_coe [Mul M] [Mul N] (f : M →ₙ* N) (hmul) : MulHom.mk f hmul = f :=
   MulHom.ext fun _ => rfl
 #align mul_hom.mk_coe MulHom.mk_coe
 #align add_hom.mk_coe AddHom.mk_coe
+-/
 
+#print MonoidHom.mk_coe /-
 @[simp, to_additive]
 theorem MonoidHom.mk_coe [MulOneClass M] [MulOneClass N] (f : M →* N) (h1 hmul) :
     MonoidHom.mk f h1 hmul = f :=
   MonoidHom.ext fun _ => rfl
 #align monoid_hom.mk_coe MonoidHom.mk_coe
 #align add_monoid_hom.mk_coe AddMonoidHom.mk_coe
+-/
 
+#print MonoidWithZeroHom.mk_coe /-
 @[simp]
 theorem MonoidWithZeroHom.mk_coe [MulZeroOneClass M] [MulZeroOneClass N] (f : M →*₀ N)
     (h0 h1 hmul) : MonoidWithZeroHom.mk f h0 h1 hmul = f :=
   MonoidWithZeroHom.ext fun _ => rfl
 #align monoid_with_zero_hom.mk_coe MonoidWithZeroHom.mk_coe
+-/
 
 end Coes
 
@@ -897,19 +1011,23 @@ protected def OneHom.copy {hM : One M} {hN : One N} (f : OneHom M N) (f' : M →
 #align zero_hom.copy ZeroHom.copy
 -/
 
+#print OneHom.coe_copy /-
 @[simp, to_additive]
 theorem OneHom.coe_copy {hM : One M} {hN : One N} (f : OneHom M N) (f' : M → N) (h : f' = f) :
     ⇑(f.copy f' h) = f' :=
   rfl
 #align one_hom.coe_copy OneHom.coe_copy
 #align zero_hom.coe_copy ZeroHom.coe_copy
+-/
 
+#print OneHom.coe_copy_eq /-
 @[to_additive]
 theorem OneHom.coe_copy_eq {hM : One M} {hN : One N} (f : OneHom M N) (f' : M → N) (h : f' = f) :
     f.copy f' h = f :=
   FunLike.ext' h
 #align one_hom.coe_copy_eq OneHom.coe_copy_eq
 #align zero_hom.coe_copy_eq ZeroHom.coe_copy_eq
+-/
 
 #print MulHom.copy /-
 /-- Copy of a `mul_hom` with a new `to_fun` equal to the old one. Useful to fix definitional
@@ -924,20 +1042,25 @@ protected def MulHom.copy {hM : Mul M} {hN : Mul N} (f : M →ₙ* N) (f' : M 
 #align add_hom.copy AddHom.copy
 -/
 
+#print MulHom.coe_copy /-
 @[simp, to_additive]
 theorem MulHom.coe_copy {hM : Mul M} {hN : Mul N} (f : M →ₙ* N) (f' : M → N) (h : f' = f) :
     ⇑(f.copy f' h) = f' :=
   rfl
 #align mul_hom.coe_copy MulHom.coe_copy
 #align add_hom.coe_copy AddHom.coe_copy
+-/
 
+#print MulHom.coe_copy_eq /-
 @[to_additive]
 theorem MulHom.coe_copy_eq {hM : Mul M} {hN : Mul N} (f : M →ₙ* N) (f' : M → N) (h : f' = f) :
     f.copy f' h = f :=
   FunLike.ext' h
 #align mul_hom.coe_copy_eq MulHom.coe_copy_eq
 #align add_hom.coe_copy_eq AddHom.coe_copy_eq
+-/
 
+#print MonoidHom.copy /-
 /-- Copy of a `monoid_hom` with a new `to_fun` equal to the old one. Useful to fix
 definitional equalities. -/
 @[to_additive
@@ -947,71 +1070,93 @@ protected def MonoidHom.copy {hM : MulOneClass M} {hN : MulOneClass N} (f : M 
   { f.toOneHom.copy f' h, f.toMulHom.copy f' h with }
 #align monoid_hom.copy MonoidHom.copy
 #align add_monoid_hom.copy AddMonoidHom.copy
+-/
 
+#print MonoidHom.coe_copy /-
 @[simp, to_additive]
 theorem MonoidHom.coe_copy {hM : MulOneClass M} {hN : MulOneClass N} (f : M →* N) (f' : M → N)
     (h : f' = f) : ⇑(f.copy f' h) = f' :=
   rfl
 #align monoid_hom.coe_copy MonoidHom.coe_copy
 #align add_monoid_hom.coe_copy AddMonoidHom.coe_copy
+-/
 
+#print MonoidHom.copy_eq /-
 @[to_additive]
 theorem MonoidHom.copy_eq {hM : MulOneClass M} {hN : MulOneClass N} (f : M →* N) (f' : M → N)
     (h : f' = f) : f.copy f' h = f :=
   FunLike.ext' h
 #align monoid_hom.copy_eq MonoidHom.copy_eq
 #align add_monoid_hom.copy_eq AddMonoidHom.copy_eq
+-/
 
+#print MonoidWithZeroHom.copy /-
 /-- Copy of a `monoid_hom` with a new `to_fun` equal to the old one. Useful to fix
 definitional equalities. -/
 protected def MonoidWithZeroHom.copy {hM : MulZeroOneClass M} {hN : MulZeroOneClass N} (f : M →*₀ N)
     (f' : M → N) (h : f' = f) : M →* N :=
   { f.toZeroHom.copy f' h, f.toMonoidHom.copy f' h with }
 #align monoid_with_zero_hom.copy MonoidWithZeroHom.copy
+-/
 
+#print MonoidWithZeroHom.coe_copy /-
 @[simp]
 theorem MonoidWithZeroHom.coe_copy {hM : MulZeroOneClass M} {hN : MulZeroOneClass N} (f : M →*₀ N)
     (f' : M → N) (h : f' = f) : ⇑(f.copy f' h) = f' :=
   rfl
 #align monoid_with_zero_hom.coe_copy MonoidWithZeroHom.coe_copy
+-/
 
+#print MonoidWithZeroHom.copy_eq /-
 theorem MonoidWithZeroHom.copy_eq {hM : MulZeroOneClass M} {hN : MulZeroOneClass N} (f : M →*₀ N)
     (f' : M → N) (h : f' = f) : f.copy f' h = f :=
   FunLike.ext' h
 #align monoid_with_zero_hom.copy_eq MonoidWithZeroHom.copy_eq
+-/
 
+#print OneHom.map_one /-
 @[to_additive]
 protected theorem OneHom.map_one [One M] [One N] (f : OneHom M N) : f 1 = 1 :=
   f.map_one'
 #align one_hom.map_one OneHom.map_one
 #align zero_hom.map_zero ZeroHom.map_zero
+-/
 
+#print MonoidHom.map_one /-
 /-- If `f` is a monoid homomorphism then `f 1 = 1`. -/
 @[to_additive]
 protected theorem MonoidHom.map_one [MulOneClass M] [MulOneClass N] (f : M →* N) : f 1 = 1 :=
   f.map_one'
 #align monoid_hom.map_one MonoidHom.map_one
 #align add_monoid_hom.map_zero AddMonoidHom.map_zero
+-/
 
+#print MonoidWithZeroHom.map_one /-
 protected theorem MonoidWithZeroHom.map_one [MulZeroOneClass M] [MulZeroOneClass N] (f : M →*₀ N) :
     f 1 = 1 :=
   f.map_one'
 #align monoid_with_zero_hom.map_one MonoidWithZeroHom.map_one
+-/
 
 /-- If `f` is an additive monoid homomorphism then `f 0 = 0`. -/
 add_decl_doc AddMonoidHom.map_zero
 
+#print MonoidWithZeroHom.map_zero /-
 protected theorem MonoidWithZeroHom.map_zero [MulZeroOneClass M] [MulZeroOneClass N] (f : M →*₀ N) :
     f 0 = 0 :=
   f.map_zero'
 #align monoid_with_zero_hom.map_zero MonoidWithZeroHom.map_zero
+-/
 
+#print MulHom.map_mul /-
 @[to_additive]
 protected theorem MulHom.map_mul [Mul M] [Mul N] (f : M →ₙ* N) (a b : M) : f (a * b) = f a * f b :=
   f.map_mul' a b
 #align mul_hom.map_mul MulHom.map_mul
 #align add_hom.map_add AddHom.map_add
+-/
 
+#print MonoidHom.map_mul /-
 /-- If `f` is a monoid homomorphism then `f (a * b) = f a * f b`. -/
 @[to_additive]
 protected theorem MonoidHom.map_mul [MulOneClass M] [MulOneClass N] (f : M →* N) (a b : M) :
@@ -1019,11 +1164,14 @@ protected theorem MonoidHom.map_mul [MulOneClass M] [MulOneClass N] (f : M →*
   f.map_mul' a b
 #align monoid_hom.map_mul MonoidHom.map_mul
 #align add_monoid_hom.map_add AddMonoidHom.map_add
+-/
 
+#print MonoidWithZeroHom.map_mul /-
 protected theorem MonoidWithZeroHom.map_mul [MulZeroOneClass M] [MulZeroOneClass N] (f : M →*₀ N)
     (a b : M) : f (a * b) = f a * f b :=
   f.map_mul' a b
 #align monoid_with_zero_hom.map_mul MonoidWithZeroHom.map_mul
+-/
 
 /-- If `f` is an additive monoid homomorphism then `f (a + b) = f a + f b`. -/
 add_decl_doc AddMonoidHom.map_add
@@ -1032,8 +1180,7 @@ namespace MonoidHom
 
 variable {mM : MulOneClass M} {mN : MulOneClass N} [MonoidHomClass F M N]
 
-include mM mN
-
+#print MonoidHom.map_exists_right_inv /-
 /-- Given a monoid homomorphism `f : M →* N` and an element `x : M`, if `x` has a right inverse,
 then `f x` has a right inverse too. For elements invertible on both sides see `is_unit.map`. -/
 @[to_additive
@@ -1043,7 +1190,9 @@ theorem map_exists_right_inv (f : F) {x : M} (hx : ∃ y, x * y = 1) : ∃ y, f
   ⟨f y, map_mul_eq_one f hy⟩
 #align monoid_hom.map_exists_right_inv MonoidHom.map_exists_right_inv
 #align add_monoid_hom.map_exists_right_neg AddMonoidHom.map_exists_right_neg
+-/
 
+#print MonoidHom.map_exists_left_inv /-
 /-- Given a monoid homomorphism `f : M →* N` and an element `x : M`, if `x` has a left inverse,
 then `f x` has a left inverse too. For elements invertible on both sides see `is_unit.map`. -/
 @[to_additive
@@ -1053,6 +1202,7 @@ theorem map_exists_left_inv (f : F) {x : M} (hx : ∃ y, y * x = 1) : ∃ y, y *
   ⟨f y, map_mul_eq_one f hy⟩
 #align monoid_hom.map_exists_left_inv MonoidHom.map_exists_left_inv
 #align add_monoid_hom.map_exists_left_neg AddMonoidHom.map_exists_left_neg
+-/
 
 end MonoidHom
 
@@ -1072,15 +1222,19 @@ def invMonoidHom : α →* α where
 #align neg_add_monoid_hom negAddMonoidHom
 -/
 
+#print coe_invMonoidHom /-
 @[simp]
 theorem coe_invMonoidHom : (invMonoidHom : α → α) = Inv.inv :=
   rfl
 #align coe_inv_monoid_hom coe_invMonoidHom
+-/
 
+#print invMonoidHom_apply /-
 @[simp]
 theorem invMonoidHom_apply (a : α) : invMonoidHom a = a⁻¹ :=
   rfl
 #align inv_monoid_hom_apply invMonoidHom_apply
+-/
 
 end DivisionCommMonoid
 
@@ -1194,58 +1348,75 @@ add_decl_doc AddHom.comp
 /-- Composition of additive monoid morphisms as an additive monoid morphism. -/
 add_decl_doc AddMonoidHom.comp
 
+#print OneHom.coe_comp /-
 @[simp, to_additive]
 theorem OneHom.coe_comp [One M] [One N] [One P] (g : OneHom N P) (f : OneHom M N) :
     ⇑(g.comp f) = g ∘ f :=
   rfl
 #align one_hom.coe_comp OneHom.coe_comp
 #align zero_hom.coe_comp ZeroHom.coe_comp
+-/
 
+#print MulHom.coe_comp /-
 @[simp, to_additive]
 theorem MulHom.coe_comp [Mul M] [Mul N] [Mul P] (g : N →ₙ* P) (f : M →ₙ* N) : ⇑(g.comp f) = g ∘ f :=
   rfl
 #align mul_hom.coe_comp MulHom.coe_comp
 #align add_hom.coe_comp AddHom.coe_comp
+-/
 
+#print MonoidHom.coe_comp /-
 @[simp, to_additive]
 theorem MonoidHom.coe_comp [MulOneClass M] [MulOneClass N] [MulOneClass P] (g : N →* P)
     (f : M →* N) : ⇑(g.comp f) = g ∘ f :=
   rfl
 #align monoid_hom.coe_comp MonoidHom.coe_comp
 #align add_monoid_hom.coe_comp AddMonoidHom.coe_comp
+-/
 
+#print MonoidWithZeroHom.coe_comp /-
 @[simp]
 theorem MonoidWithZeroHom.coe_comp [MulZeroOneClass M] [MulZeroOneClass N] [MulZeroOneClass P]
     (g : N →*₀ P) (f : M →*₀ N) : ⇑(g.comp f) = g ∘ f :=
   rfl
 #align monoid_with_zero_hom.coe_comp MonoidWithZeroHom.coe_comp
+-/
 
+#print OneHom.comp_apply /-
 @[to_additive]
 theorem OneHom.comp_apply [One M] [One N] [One P] (g : OneHom N P) (f : OneHom M N) (x : M) :
     g.comp f x = g (f x) :=
   rfl
 #align one_hom.comp_apply OneHom.comp_apply
 #align zero_hom.comp_apply ZeroHom.comp_apply
+-/
 
+#print MulHom.comp_apply /-
 @[to_additive]
 theorem MulHom.comp_apply [Mul M] [Mul N] [Mul P] (g : N →ₙ* P) (f : M →ₙ* N) (x : M) :
     g.comp f x = g (f x) :=
   rfl
 #align mul_hom.comp_apply MulHom.comp_apply
 #align add_hom.comp_apply AddHom.comp_apply
+-/
 
+#print MonoidHom.comp_apply /-
 @[to_additive]
 theorem MonoidHom.comp_apply [MulOneClass M] [MulOneClass N] [MulOneClass P] (g : N →* P)
     (f : M →* N) (x : M) : g.comp f x = g (f x) :=
   rfl
 #align monoid_hom.comp_apply MonoidHom.comp_apply
 #align add_monoid_hom.comp_apply AddMonoidHom.comp_apply
+-/
 
+#print MonoidWithZeroHom.comp_apply /-
 theorem MonoidWithZeroHom.comp_apply [MulZeroOneClass M] [MulZeroOneClass N] [MulZeroOneClass P]
     (g : N →*₀ P) (f : M →*₀ N) (x : M) : g.comp f x = g (f x) :=
   rfl
 #align monoid_with_zero_hom.comp_apply MonoidWithZeroHom.comp_apply
+-/
 
+#print OneHom.comp_assoc /-
 /-- Composition of monoid homomorphisms is associative. -/
 @[to_additive "Composition of additive monoid homomorphisms is associative."]
 theorem OneHom.comp_assoc {Q : Type _} [One M] [One N] [One P] [One Q] (f : OneHom M N)
@@ -1253,14 +1424,18 @@ theorem OneHom.comp_assoc {Q : Type _} [One M] [One N] [One P] [One Q] (f : OneH
   rfl
 #align one_hom.comp_assoc OneHom.comp_assoc
 #align zero_hom.comp_assoc ZeroHom.comp_assoc
+-/
 
+#print MulHom.comp_assoc /-
 @[to_additive]
 theorem MulHom.comp_assoc {Q : Type _} [Mul M] [Mul N] [Mul P] [Mul Q] (f : M →ₙ* N) (g : N →ₙ* P)
     (h : P →ₙ* Q) : (h.comp g).comp f = h.comp (g.comp f) :=
   rfl
 #align mul_hom.comp_assoc MulHom.comp_assoc
 #align add_hom.comp_assoc AddHom.comp_assoc
+-/
 
+#print MonoidHom.comp_assoc /-
 @[to_additive]
 theorem MonoidHom.comp_assoc {Q : Type _} [MulOneClass M] [MulOneClass N] [MulOneClass P]
     [MulOneClass Q] (f : M →* N) (g : N →* P) (h : P →* Q) :
@@ -1268,40 +1443,52 @@ theorem MonoidHom.comp_assoc {Q : Type _} [MulOneClass M] [MulOneClass N] [MulOn
   rfl
 #align monoid_hom.comp_assoc MonoidHom.comp_assoc
 #align add_monoid_hom.comp_assoc AddMonoidHom.comp_assoc
+-/
 
+#print MonoidWithZeroHom.comp_assoc /-
 theorem MonoidWithZeroHom.comp_assoc {Q : Type _} [MulZeroOneClass M] [MulZeroOneClass N]
     [MulZeroOneClass P] [MulZeroOneClass Q] (f : M →*₀ N) (g : N →*₀ P) (h : P →*₀ Q) :
     (h.comp g).comp f = h.comp (g.comp f) :=
   rfl
 #align monoid_with_zero_hom.comp_assoc MonoidWithZeroHom.comp_assoc
+-/
 
+#print OneHom.cancel_right /-
 @[to_additive]
 theorem OneHom.cancel_right [One M] [One N] [One P] {g₁ g₂ : OneHom N P} {f : OneHom M N}
     (hf : Function.Surjective f) : g₁.comp f = g₂.comp f ↔ g₁ = g₂ :=
   ⟨fun h => OneHom.ext <| hf.forall.2 (OneHom.ext_iff.1 h), fun h => h ▸ rfl⟩
 #align one_hom.cancel_right OneHom.cancel_right
 #align zero_hom.cancel_right ZeroHom.cancel_right
+-/
 
+#print MulHom.cancel_right /-
 @[to_additive]
 theorem MulHom.cancel_right [Mul M] [Mul N] [Mul P] {g₁ g₂ : N →ₙ* P} {f : M →ₙ* N}
     (hf : Function.Surjective f) : g₁.comp f = g₂.comp f ↔ g₁ = g₂ :=
   ⟨fun h => MulHom.ext <| hf.forall.2 (MulHom.ext_iff.1 h), fun h => h ▸ rfl⟩
 #align mul_hom.cancel_right MulHom.cancel_right
 #align add_hom.cancel_right AddHom.cancel_right
+-/
 
+#print MonoidHom.cancel_right /-
 @[to_additive]
 theorem MonoidHom.cancel_right [MulOneClass M] [MulOneClass N] [MulOneClass P] {g₁ g₂ : N →* P}
     {f : M →* N} (hf : Function.Surjective f) : g₁.comp f = g₂.comp f ↔ g₁ = g₂ :=
   ⟨fun h => MonoidHom.ext <| hf.forall.2 (MonoidHom.ext_iff.1 h), fun h => h ▸ rfl⟩
 #align monoid_hom.cancel_right MonoidHom.cancel_right
 #align add_monoid_hom.cancel_right AddMonoidHom.cancel_right
+-/
 
+#print MonoidWithZeroHom.cancel_right /-
 theorem MonoidWithZeroHom.cancel_right [MulZeroOneClass M] [MulZeroOneClass N] [MulZeroOneClass P]
     {g₁ g₂ : N →*₀ P} {f : M →*₀ N} (hf : Function.Surjective f) :
     g₁.comp f = g₂.comp f ↔ g₁ = g₂ :=
   ⟨fun h => MonoidWithZeroHom.ext <| hf.forall.2 (MonoidWithZeroHom.ext_iff.1 h), fun h => h ▸ rfl⟩
 #align monoid_with_zero_hom.cancel_right MonoidWithZeroHom.cancel_right
+-/
 
+#print OneHom.cancel_left /-
 @[to_additive]
 theorem OneHom.cancel_left [One M] [One N] [One P] {g : OneHom N P} {f₁ f₂ : OneHom M N}
     (hg : Function.Injective g) : g.comp f₁ = g.comp f₂ ↔ f₁ = f₂ :=
@@ -1309,7 +1496,9 @@ theorem OneHom.cancel_left [One M] [One N] [One P] {g : OneHom N P} {f₁ f₂ :
     h ▸ rfl⟩
 #align one_hom.cancel_left OneHom.cancel_left
 #align zero_hom.cancel_left ZeroHom.cancel_left
+-/
 
+#print MulHom.cancel_left /-
 @[to_additive]
 theorem MulHom.cancel_left [Mul M] [Mul N] [Mul P] {g : N →ₙ* P} {f₁ f₂ : M →ₙ* N}
     (hg : Function.Injective g) : g.comp f₁ = g.comp f₂ ↔ f₁ = f₂ :=
@@ -1317,7 +1506,9 @@ theorem MulHom.cancel_left [Mul M] [Mul N] [Mul P] {g : N →ₙ* P} {f₁ f₂
     h ▸ rfl⟩
 #align mul_hom.cancel_left MulHom.cancel_left
 #align add_hom.cancel_left AddHom.cancel_left
+-/
 
+#print MonoidHom.cancel_left /-
 @[to_additive]
 theorem MonoidHom.cancel_left [MulOneClass M] [MulOneClass N] [MulOneClass P] {g : N →* P}
     {f₁ f₂ : M →* N} (hg : Function.Injective g) : g.comp f₁ = g.comp f₂ ↔ f₁ = f₂ :=
@@ -1325,7 +1516,9 @@ theorem MonoidHom.cancel_left [MulOneClass M] [MulOneClass N] [MulOneClass P] {g
     fun h => h ▸ rfl⟩
 #align monoid_hom.cancel_left MonoidHom.cancel_left
 #align add_monoid_hom.cancel_left AddMonoidHom.cancel_left
+-/
 
+#print MonoidWithZeroHom.cancel_left /-
 theorem MonoidWithZeroHom.cancel_left [MulZeroOneClass M] [MulZeroOneClass N] [MulZeroOneClass P]
     {g : N →*₀ P} {f₁ f₂ : M →*₀ N} (hg : Function.Injective g) : g.comp f₁ = g.comp f₂ ↔ f₁ = f₂ :=
   ⟨fun h =>
@@ -1333,94 +1526,123 @@ theorem MonoidWithZeroHom.cancel_left [MulZeroOneClass M] [MulZeroOneClass N] [M
       hg <| by rw [← MonoidWithZeroHom.comp_apply, h, MonoidWithZeroHom.comp_apply],
     fun h => h ▸ rfl⟩
 #align monoid_with_zero_hom.cancel_left MonoidWithZeroHom.cancel_left
+-/
 
+#print MonoidHom.toOneHom_injective /-
 @[to_additive]
 theorem MonoidHom.toOneHom_injective [MulOneClass M] [MulOneClass N] :
     Function.Injective (MonoidHom.toOneHom : (M →* N) → OneHom M N) := fun f g h =>
   MonoidHom.ext <| OneHom.ext_iff.mp h
 #align monoid_hom.to_one_hom_injective MonoidHom.toOneHom_injective
 #align add_monoid_hom.to_zero_hom_injective AddMonoidHom.toZeroHom_injective
+-/
 
+#print MonoidHom.toMulHom_injective /-
 @[to_additive]
 theorem MonoidHom.toMulHom_injective [MulOneClass M] [MulOneClass N] :
     Function.Injective (MonoidHom.toMulHom : (M →* N) → M →ₙ* N) := fun f g h =>
   MonoidHom.ext <| MulHom.ext_iff.mp h
 #align monoid_hom.to_mul_hom_injective MonoidHom.toMulHom_injective
 #align add_monoid_hom.to_add_hom_injective AddMonoidHom.toAddHom_injective
+-/
 
+#print MonoidWithZeroHom.toMonoidHom_injective /-
 theorem MonoidWithZeroHom.toMonoidHom_injective [MulZeroOneClass M] [MulZeroOneClass N] :
     Function.Injective (MonoidWithZeroHom.toMonoidHom : (M →*₀ N) → M →* N) := fun f g h =>
   MonoidWithZeroHom.ext <| MonoidHom.ext_iff.mp h
 #align monoid_with_zero_hom.to_monoid_hom_injective MonoidWithZeroHom.toMonoidHom_injective
+-/
 
+#print MonoidWithZeroHom.toZeroHom_injective /-
 theorem MonoidWithZeroHom.toZeroHom_injective [MulZeroOneClass M] [MulZeroOneClass N] :
     Function.Injective (MonoidWithZeroHom.toZeroHom : (M →*₀ N) → ZeroHom M N) := fun f g h =>
   MonoidWithZeroHom.ext <| ZeroHom.ext_iff.mp h
 #align monoid_with_zero_hom.to_zero_hom_injective MonoidWithZeroHom.toZeroHom_injective
+-/
 
+#print OneHom.comp_id /-
 @[simp, to_additive]
 theorem OneHom.comp_id [One M] [One N] (f : OneHom M N) : f.comp (OneHom.id M) = f :=
   OneHom.ext fun x => rfl
 #align one_hom.comp_id OneHom.comp_id
 #align zero_hom.comp_id ZeroHom.comp_id
+-/
 
+#print MulHom.comp_id /-
 @[simp, to_additive]
 theorem MulHom.comp_id [Mul M] [Mul N] (f : M →ₙ* N) : f.comp (MulHom.id M) = f :=
   MulHom.ext fun x => rfl
 #align mul_hom.comp_id MulHom.comp_id
 #align add_hom.comp_id AddHom.comp_id
+-/
 
+#print MonoidHom.comp_id /-
 @[simp, to_additive]
 theorem MonoidHom.comp_id [MulOneClass M] [MulOneClass N] (f : M →* N) :
     f.comp (MonoidHom.id M) = f :=
   MonoidHom.ext fun x => rfl
 #align monoid_hom.comp_id MonoidHom.comp_id
 #align add_monoid_hom.comp_id AddMonoidHom.comp_id
+-/
 
+#print MonoidWithZeroHom.comp_id /-
 @[simp]
 theorem MonoidWithZeroHom.comp_id [MulZeroOneClass M] [MulZeroOneClass N] (f : M →*₀ N) :
     f.comp (MonoidWithZeroHom.id M) = f :=
   MonoidWithZeroHom.ext fun x => rfl
 #align monoid_with_zero_hom.comp_id MonoidWithZeroHom.comp_id
+-/
 
+#print OneHom.id_comp /-
 @[simp, to_additive]
 theorem OneHom.id_comp [One M] [One N] (f : OneHom M N) : (OneHom.id N).comp f = f :=
   OneHom.ext fun x => rfl
 #align one_hom.id_comp OneHom.id_comp
 #align zero_hom.id_comp ZeroHom.id_comp
+-/
 
+#print MulHom.id_comp /-
 @[simp, to_additive]
 theorem MulHom.id_comp [Mul M] [Mul N] (f : M →ₙ* N) : (MulHom.id N).comp f = f :=
   MulHom.ext fun x => rfl
 #align mul_hom.id_comp MulHom.id_comp
 #align add_hom.id_comp AddHom.id_comp
+-/
 
+#print MonoidHom.id_comp /-
 @[simp, to_additive]
 theorem MonoidHom.id_comp [MulOneClass M] [MulOneClass N] (f : M →* N) :
     (MonoidHom.id N).comp f = f :=
   MonoidHom.ext fun x => rfl
 #align monoid_hom.id_comp MonoidHom.id_comp
 #align add_monoid_hom.id_comp AddMonoidHom.id_comp
+-/
 
+#print MonoidWithZeroHom.id_comp /-
 @[simp]
 theorem MonoidWithZeroHom.id_comp [MulZeroOneClass M] [MulZeroOneClass N] (f : M →*₀ N) :
     (MonoidWithZeroHom.id N).comp f = f :=
   MonoidWithZeroHom.ext fun x => rfl
 #align monoid_with_zero_hom.id_comp MonoidWithZeroHom.id_comp
+-/
 
+#print MonoidHom.map_pow /-
 @[to_additive AddMonoidHom.map_nsmul]
 protected theorem MonoidHom.map_pow [Monoid M] [Monoid N] (f : M →* N) (a : M) (n : ℕ) :
     f (a ^ n) = f a ^ n :=
   map_pow f a n
 #align monoid_hom.map_pow MonoidHom.map_pow
 #align add_monoid_hom.map_nsmul AddMonoidHom.map_nsmul
+-/
 
+#print MonoidHom.map_zpow' /-
 @[to_additive]
 protected theorem MonoidHom.map_zpow' [DivInvMonoid M] [DivInvMonoid N] (f : M →* N)
     (hf : ∀ x, f x⁻¹ = (f x)⁻¹) (a : M) (n : ℤ) : f (a ^ n) = f a ^ n :=
   map_zpow' f hf a n
 #align monoid_hom.map_zpow' MonoidHom.map_zpow'
 #align add_monoid_hom.map_zsmul' AddMonoidHom.map_zsmul'
+-/
 
 section End
 
@@ -1452,15 +1674,19 @@ instance : MonoidHomClass (Monoid.End M) M M :=
 
 end End
 
+#print Monoid.coe_one /-
 @[simp]
 theorem coe_one : ((1 : Monoid.End M) : M → M) = id :=
   rfl
 #align monoid.coe_one Monoid.coe_one
+-/
 
+#print Monoid.coe_mul /-
 @[simp]
 theorem coe_mul (f g) : ((f * g : Monoid.End M) : M → M) = f ∘ g :=
   rfl
 #align monoid.coe_mul Monoid.coe_mul
+-/
 
 end Monoid
 
@@ -1493,15 +1719,19 @@ instance : AddMonoidHomClass (AddMonoid.End A) A A :=
 
 end End
 
+#print AddMonoid.coe_one /-
 @[simp]
 theorem coe_one : ((1 : AddMonoid.End A) : A → A) = id :=
   rfl
 #align add_monoid.coe_one AddMonoid.coe_one
+-/
 
+#print AddMonoid.coe_mul /-
 @[simp]
 theorem coe_mul (f g) : ((f * g : AddMonoid.End A) : A → A) = f ∘ g :=
   rfl
 #align add_monoid.coe_mul AddMonoid.coe_mul
+-/
 
 end AddMonoid
 
@@ -1531,29 +1761,37 @@ add_decl_doc AddHom.hasZero
 /-- `0` is the additive monoid homomorphism sending all elements to `0`. -/
 add_decl_doc AddMonoidHom.hasZero
 
+#print OneHom.one_apply /-
 @[simp, to_additive]
 theorem OneHom.one_apply [One M] [One N] (x : M) : (1 : OneHom M N) x = 1 :=
   rfl
 #align one_hom.one_apply OneHom.one_apply
 #align zero_hom.zero_apply ZeroHom.zero_apply
+-/
 
+#print MonoidHom.one_apply /-
 @[simp, to_additive]
 theorem MonoidHom.one_apply [MulOneClass M] [MulOneClass N] (x : M) : (1 : M →* N) x = 1 :=
   rfl
 #align monoid_hom.one_apply MonoidHom.one_apply
 #align add_monoid_hom.zero_apply AddMonoidHom.zero_apply
+-/
 
+#print OneHom.one_comp /-
 @[simp, to_additive]
 theorem OneHom.one_comp [One M] [One N] [One P] (f : OneHom M N) : (1 : OneHom N P).comp f = 1 :=
   rfl
 #align one_hom.one_comp OneHom.one_comp
 #align zero_hom.zero_comp ZeroHom.zero_comp
+-/
 
+#print OneHom.comp_one /-
 @[simp, to_additive]
 theorem OneHom.comp_one [One M] [One N] [One P] (f : OneHom N P) : f.comp (1 : OneHom M N) = 1 := by
   ext; simp only [OneHom.map_one, OneHom.coe_comp, Function.comp_apply, OneHom.one_apply]
 #align one_hom.comp_one OneHom.comp_one
 #align zero_hom.comp_zero ZeroHom.comp_zero
+-/
 
 @[to_additive]
 instance [One M] [One N] : Inhabited (OneHom M N) :=
@@ -1587,26 +1825,32 @@ instance [Mul M] [CommSemigroup N] : Mul (M →ₙ* N) :=
 additive morphism sending `x` to `f x + g x`. -/
 add_decl_doc AddHom.hasAdd
 
+#print MulHom.mul_apply /-
 @[simp, to_additive]
 theorem mul_apply {M N} {mM : Mul M} {mN : CommSemigroup N} (f g : M →ₙ* N) (x : M) :
     (f * g) x = f x * g x :=
   rfl
 #align mul_hom.mul_apply MulHom.mul_apply
 #align add_hom.add_apply AddHom.add_apply
+-/
 
+#print MulHom.mul_comp /-
 @[to_additive]
 theorem mul_comp [Mul M] [Mul N] [CommSemigroup P] (g₁ g₂ : N →ₙ* P) (f : M →ₙ* N) :
     (g₁ * g₂).comp f = g₁.comp f * g₂.comp f :=
   rfl
 #align mul_hom.mul_comp MulHom.mul_comp
 #align add_hom.add_comp AddHom.add_comp
+-/
 
+#print MulHom.comp_mul /-
 @[to_additive]
 theorem comp_mul [Mul M] [CommSemigroup N] [CommSemigroup P] (g : N →ₙ* P) (f₁ f₂ : M →ₙ* N) :
     g.comp (f₁ * f₂) = g.comp f₁ * g.comp f₂ := by ext;
   simp only [mul_apply, Function.comp_apply, map_mul, coe_comp]
 #align mul_hom.comp_mul MulHom.comp_mul
 #align add_hom.comp_add AddHom.comp_add
+-/
 
 end MulHom
 
@@ -1631,47 +1875,60 @@ instance {M N} {mM : MulOneClass M} [CommMonoid N] : Mul (M →* N) :=
 additive monoid morphism sending `x` to `f x + g x`. -/
 add_decl_doc AddMonoidHom.hasAdd
 
+#print MonoidHom.mul_apply /-
 @[simp, to_additive]
 theorem mul_apply {M N} {mM : MulOneClass M} {mN : CommMonoid N} (f g : M →* N) (x : M) :
     (f * g) x = f x * g x :=
   rfl
 #align monoid_hom.mul_apply MonoidHom.mul_apply
 #align add_monoid_hom.add_apply AddMonoidHom.add_apply
+-/
 
+#print MonoidHom.one_comp /-
 @[simp, to_additive]
 theorem one_comp [MulOneClass M] [MulOneClass N] [MulOneClass P] (f : M →* N) :
     (1 : N →* P).comp f = 1 :=
   rfl
 #align monoid_hom.one_comp MonoidHom.one_comp
 #align add_monoid_hom.zero_comp AddMonoidHom.zero_comp
+-/
 
+#print MonoidHom.comp_one /-
 @[simp, to_additive]
 theorem comp_one [MulOneClass M] [MulOneClass N] [MulOneClass P] (f : N →* P) :
     f.comp (1 : M →* N) = 1 := by ext; simp only [map_one, coe_comp, Function.comp_apply, one_apply]
 #align monoid_hom.comp_one MonoidHom.comp_one
 #align add_monoid_hom.comp_zero AddMonoidHom.comp_zero
+-/
 
+#print MonoidHom.mul_comp /-
 @[to_additive]
 theorem mul_comp [MulOneClass M] [MulOneClass N] [CommMonoid P] (g₁ g₂ : N →* P) (f : M →* N) :
     (g₁ * g₂).comp f = g₁.comp f * g₂.comp f :=
   rfl
 #align monoid_hom.mul_comp MonoidHom.mul_comp
 #align add_monoid_hom.add_comp AddMonoidHom.add_comp
+-/
 
+#print MonoidHom.comp_mul /-
 @[to_additive]
 theorem comp_mul [MulOneClass M] [CommMonoid N] [CommMonoid P] (g : N →* P) (f₁ f₂ : M →* N) :
     g.comp (f₁ * f₂) = g.comp f₁ * g.comp f₂ := by ext;
   simp only [mul_apply, Function.comp_apply, map_mul, coe_comp]
 #align monoid_hom.comp_mul MonoidHom.comp_mul
 #align add_monoid_hom.comp_add AddMonoidHom.comp_add
+-/
 
+#print MonoidHom.map_inv /-
 /-- Group homomorphisms preserve inverse. -/
 @[to_additive "Additive group homomorphisms preserve negation."]
 protected theorem map_inv [Group α] [DivisionMonoid β] (f : α →* β) (a : α) : f a⁻¹ = (f a)⁻¹ :=
   map_inv f _
 #align monoid_hom.map_inv MonoidHom.map_inv
 #align add_monoid_hom.map_neg AddMonoidHom.map_neg
+-/
 
+#print MonoidHom.map_zpow /-
 /-- Group homomorphisms preserve integer power. -/
 @[to_additive "Additive group homomorphisms preserve integer scaling."]
 protected theorem map_zpow [Group α] [DivisionMonoid β] (f : α →* β) (g : α) (n : ℤ) :
@@ -1679,7 +1936,9 @@ protected theorem map_zpow [Group α] [DivisionMonoid β] (f : α →* β) (g :
   map_zpow f g n
 #align monoid_hom.map_zpow MonoidHom.map_zpow
 #align add_monoid_hom.map_zsmul AddMonoidHom.map_zsmul
+-/
 
+#print MonoidHom.map_div /-
 /-- Group homomorphisms preserve division. -/
 @[to_additive "Additive group homomorphisms preserve subtraction."]
 protected theorem map_div [Group α] [DivisionMonoid β] (f : α →* β) (g h : α) :
@@ -1687,7 +1946,9 @@ protected theorem map_div [Group α] [DivisionMonoid β] (f : α →* β) (g h :
   map_div f g h
 #align monoid_hom.map_div MonoidHom.map_div
 #align add_monoid_hom.map_sub AddMonoidHom.map_sub
+-/
 
+#print MonoidHom.map_mul_inv /-
 /-- Group homomorphisms preserve division. -/
 @[to_additive "Additive group homomorphisms preserve subtraction."]
 protected theorem map_mul_inv [Group α] [DivisionMonoid β] (f : α →* β) (g h : α) :
@@ -1695,7 +1956,9 @@ protected theorem map_mul_inv [Group α] [DivisionMonoid β] (f : α →* β) (g
   map_mul_inv f g h
 #align monoid_hom.map_mul_inv MonoidHom.map_mul_inv
 #align add_monoid_hom.map_add_neg AddMonoidHom.map_add_neg
+-/
 
+#print injective_iff_map_eq_one /-
 /-- A homomorphism from a group to a monoid is injective iff its kernel is trivial.
 For the iff statement on the triviality of the kernel, see `injective_iff_map_eq_one'`.  -/
 @[to_additive
@@ -1706,7 +1969,9 @@ theorem injective_iff_map_eq_one {G H} [Group G] [MulOneClass H] [MonoidHomClass
     mul_inv_eq_one.1 <| h _ <| by rw [map_mul, hxy, ← map_mul, mul_inv_self, map_one]⟩
 #align injective_iff_map_eq_one injective_iff_map_eq_one
 #align injective_iff_map_eq_zero injective_iff_map_eq_zero
+-/
 
+#print injective_iff_map_eq_one' /-
 /-- A homomorphism from a group to a monoid is injective iff its kernel is trivial,
 stated as an iff on the triviality of the kernel.
 For the implication, see `injective_iff_map_eq_one`. -/
@@ -1718,9 +1983,9 @@ theorem injective_iff_map_eq_one' {G H} [Group G] [MulOneClass H] [MonoidHomClas
     forall_congr' fun a => ⟨fun h => ⟨h, fun H => H.symm ▸ map_one f⟩, Iff.mp⟩
 #align injective_iff_map_eq_one' injective_iff_map_eq_one'
 #align injective_iff_map_eq_zero' injective_iff_map_eq_zero'
+-/
 
-include mM
-
+#print MonoidHom.mk' /-
 /-- Makes a group homomorphism from a proof that the map preserves multiplication. -/
 @[to_additive "Makes an additive group homomorphism from a proof that the map preserves addition.",
   simps (config := { fullyApplied := false })]
@@ -1731,9 +1996,9 @@ def mk' (f : M → G) (map_mul : ∀ a b : M, f (a * b) = f a * f b) : M →* G
   map_one' := mul_left_eq_self.1 <| by rw [← map_mul, mul_one]
 #align monoid_hom.mk' MonoidHom.mk'
 #align add_monoid_hom.mk' AddMonoidHom.mk'
+-/
 
-omit mM
-
+#print MonoidHom.ofMapMulInv /-
 /-- Makes a group homomorphism from a proof that the map preserves right division `λ x y, x * y⁻¹`.
 See also `monoid_hom.of_map_div` for a version using `λ x y, x / y`.
 -/
@@ -1748,27 +2013,34 @@ def ofMapMulInv {H : Type _} [Group H] (f : G → H)
       _ = f x * f y := by simp only [map_div]; simp only [mul_right_inv, one_mul, inv_inv]
 #align monoid_hom.of_map_mul_inv MonoidHom.ofMapMulInv
 #align add_monoid_hom.of_map_add_neg AddMonoidHom.ofMapAddNeg
+-/
 
+#print MonoidHom.coe_of_map_mul_inv /-
 @[simp, to_additive]
 theorem coe_of_map_mul_inv {H : Type _} [Group H] (f : G → H)
     (map_div : ∀ a b : G, f (a * b⁻¹) = f a * (f b)⁻¹) : ⇑(ofMapMulInv f map_div) = f :=
   rfl
 #align monoid_hom.coe_of_map_mul_inv MonoidHom.coe_of_map_mul_inv
 #align add_monoid_hom.coe_of_map_add_neg AddMonoidHom.coe_of_map_add_neg
+-/
 
+#print MonoidHom.ofMapDiv /-
 /-- Define a morphism of additive groups given a map which respects ratios. -/
 @[to_additive "Define a morphism of additive groups given a map which respects difference."]
 def ofMapDiv {H : Type _} [Group H] (f : G → H) (hf : ∀ x y, f (x / y) = f x / f y) : G →* H :=
   ofMapMulInv f (by simpa only [div_eq_mul_inv] using hf)
 #align monoid_hom.of_map_div MonoidHom.ofMapDiv
 #align add_monoid_hom.of_map_sub AddMonoidHom.ofMapSub
+-/
 
+#print MonoidHom.coe_of_map_div /-
 @[simp, to_additive]
 theorem coe_of_map_div {H : Type _} [Group H] (f : G → H) (hf : ∀ x y, f (x / y) = f x / f y) :
     ⇑(ofMapDiv f hf) = f :=
   rfl
 #align monoid_hom.coe_of_map_div MonoidHom.coe_of_map_div
 #align add_monoid_hom.coe_of_map_sub AddMonoidHom.coe_of_map_sub
+-/
 
 /-- If `f` is a monoid homomorphism to a commutative group, then `f⁻¹` is the homomorphism sending
 `x` to `(f x)⁻¹`. -/
@@ -1780,26 +2052,32 @@ instance {M G} [MulOneClass M] [CommGroup G] : Inv (M →* G) :=
 homomorphism sending `x` to `-(f x)`. -/
 add_decl_doc AddMonoidHom.hasNeg
 
+#print MonoidHom.inv_apply /-
 @[simp, to_additive]
 theorem inv_apply {M G} {mM : MulOneClass M} {gG : CommGroup G} (f : M →* G) (x : M) :
     f⁻¹ x = (f x)⁻¹ :=
   rfl
 #align monoid_hom.inv_apply MonoidHom.inv_apply
 #align add_monoid_hom.neg_apply AddMonoidHom.neg_apply
+-/
 
+#print MonoidHom.inv_comp /-
 @[simp, to_additive]
 theorem inv_comp {M N A} {mM : MulOneClass M} {gN : MulOneClass N} {gA : CommGroup A} (φ : N →* A)
     (ψ : M →* N) : φ⁻¹.comp ψ = (φ.comp ψ)⁻¹ := by ext;
   simp only [Function.comp_apply, inv_apply, coe_comp]
 #align monoid_hom.inv_comp MonoidHom.inv_comp
 #align add_monoid_hom.neg_comp AddMonoidHom.neg_comp
+-/
 
+#print MonoidHom.comp_inv /-
 @[simp, to_additive]
 theorem comp_inv {M A B} {mM : MulOneClass M} {mA : CommGroup A} {mB : CommGroup B} (φ : A →* B)
     (ψ : M →* A) : φ.comp ψ⁻¹ = (φ.comp ψ)⁻¹ := by ext;
   simp only [Function.comp_apply, inv_apply, map_inv, coe_comp]
 #align monoid_hom.comp_inv MonoidHom.comp_inv
 #align add_monoid_hom.comp_neg AddMonoidHom.comp_neg
+-/
 
 /-- If `f` and `g` are monoid homomorphisms to a commutative group, then `f / g` is the homomorphism
 sending `x` to `(f x) / (g x)`. -/
@@ -1813,12 +2091,14 @@ instance {M G} [MulOneClass M] [CommGroup G] : Div (M →* G) :=
 is the homomorphism sending `x` to `(f x) - (g x)`. -/
 add_decl_doc AddMonoidHom.hasSub
 
+#print MonoidHom.div_apply /-
 @[simp, to_additive]
 theorem div_apply {M G} {mM : MulOneClass M} {gG : CommGroup G} (f g : M →* G) (x : M) :
     (f / g) x = f x / g x :=
   rfl
 #align monoid_hom.div_apply MonoidHom.div_apply
 #align add_monoid_hom.sub_apply AddMonoidHom.sub_apply
+-/
 
 end MonoidHom
 
Diff
@@ -1746,7 +1746,6 @@ def ofMapMulInv {H : Type _} [Group H] (f : G → H)
       f (x * y) = f x * (f <| 1 * 1⁻¹ * y⁻¹)⁻¹ := by
         simp only [one_mul, inv_one, ← map_div, inv_inv]
       _ = f x * f y := by simp only [map_div]; simp only [mul_right_inv, one_mul, inv_inv]
-      
 #align monoid_hom.of_map_mul_inv MonoidHom.ofMapMulInv
 #align add_monoid_hom.of_map_add_neg AddMonoidHom.ofMapAddNeg
 
Diff
@@ -100,7 +100,7 @@ structure ZeroHom (M : Type _) (N : Type _) [Zero M] [Zero N] where
 You should extend this typeclass when you extend `zero_hom`.
 -/
 class ZeroHomClass (F : Type _) (M N : outParam <| Type _) [Zero M] [Zero N] extends
-  FunLike F M fun _ => N where
+    FunLike F M fun _ => N where
   map_zero : ∀ f : F, f 0 = 0
 #align zero_hom_class ZeroHomClass
 -/
@@ -143,7 +143,7 @@ structure AddHom (M : Type _) (N : Type _) [Add M] [Add N] where
 You should declare an instance of this typeclass when you extend `add_hom`.
 -/
 class AddHomClass (F : Type _) (M N : outParam <| Type _) [Add M] [Add N] extends
-  FunLike F M fun _ => N where
+    FunLike F M fun _ => N where
   map_add : ∀ (f : F) (x y : M), f (x + y) = f x + f y
 #align add_hom_class AddHomClass
 -/
@@ -164,7 +164,7 @@ you should parametrize over `(F : Type*) [add_monoid_hom_class F M N] (f : F)`.
 When you extend this structure, make sure to extend `add_monoid_hom_class`.
 -/
 structure AddMonoidHom (M : Type _) (N : Type _) [AddZeroClass M] [AddZeroClass N] extends
-  ZeroHom M N, AddHom M N
+    ZeroHom M N, AddHom M N
 #align add_monoid_hom AddMonoidHom
 -/
 
@@ -182,7 +182,7 @@ homomorphisms.
 You should also extend this typeclass when you extend `add_monoid_hom`.
 -/
 class AddMonoidHomClass (F : Type _) (M N : outParam <| Type _) [AddZeroClass M]
-  [AddZeroClass N] extends AddHomClass F M N, ZeroHomClass F M N
+    [AddZeroClass N] extends AddHomClass F M N, ZeroHomClass F M N
 #align add_monoid_hom_class AddMonoidHomClass
 -/
 
@@ -215,7 +215,7 @@ You should extend this typeclass when you extend `one_hom`.
 -/
 @[to_additive]
 class OneHomClass (F : Type _) (M N : outParam <| Type _) [One M] [One N] extends
-  FunLike F M fun _ => N where
+    FunLike F M fun _ => N where
   map_one : ∀ f : F, f 1 = 1
 #align one_hom_class OneHomClass
 #align zero_hom_class ZeroHomClass
@@ -304,7 +304,7 @@ You should declare an instance of this typeclass when you extend `mul_hom`.
 -/
 @[to_additive]
 class MulHomClass (F : Type _) (M N : outParam <| Type _) [Mul M] [Mul N] extends
-  FunLike F M fun _ => N where
+    FunLike F M fun _ => N where
   map_mul : ∀ (f : F) (x y : M), f (x * y) = f x * f y
 #align mul_hom_class MulHomClass
 #align add_hom_class AddHomClass
@@ -356,7 +356,7 @@ When you extend this structure, make sure to extend `monoid_hom_class`.
 -/
 @[to_additive]
 structure MonoidHom (M : Type _) (N : Type _) [MulOneClass M] [MulOneClass N] extends OneHom M N,
-  M →ₙ* N
+    M →ₙ* N
 #align monoid_hom MonoidHom
 #align add_monoid_hom AddMonoidHom
 -/
@@ -374,7 +374,7 @@ You should also extend this typeclass when you extend `monoid_hom`. -/
 @[to_additive
       "`add_monoid_hom_class F M N` states that `F` is a type of `add_monoid`-preserving homomorphisms.\nYou should also extend this typeclass when you extend `add_monoid_hom`."]
 class MonoidHomClass (F : Type _) (M N : outParam <| Type _) [MulOneClass M] [MulOneClass N] extends
-  MulHomClass F M N, OneHomClass F M N
+    MulHomClass F M N, OneHomClass F M N
 #align monoid_hom_class MonoidHomClass
 #align add_monoid_hom_class AddMonoidHomClass
 -/
@@ -502,7 +502,7 @@ you should parametrize over `(F : Type*) [monoid_with_zero_hom_class F M N] (f :
 When you extend this structure, make sure to extend `monoid_with_zero_hom_class`.
 -/
 structure MonoidWithZeroHom (M : Type _) (N : Type _) [MulZeroOneClass M]
-  [MulZeroOneClass N] extends ZeroHom M N, MonoidHom M N
+    [MulZeroOneClass N] extends ZeroHom M N, MonoidHom M N
 #align monoid_with_zero_hom MonoidWithZeroHom
 -/
 
@@ -520,7 +520,7 @@ infixr:25 " →*₀ " => MonoidWithZeroHom
 You should also extend this typeclass when you extend `monoid_with_zero_hom`.
 -/
 class MonoidWithZeroHomClass (F : Type _) (M N : outParam <| Type _) [MulZeroOneClass M]
-  [MulZeroOneClass N] extends MonoidHomClass F M N, ZeroHomClass F M N
+    [MulZeroOneClass N] extends MonoidHomClass F M N, ZeroHomClass F M N
 #align monoid_with_zero_hom_class MonoidWithZeroHomClass
 -/
 
@@ -1580,7 +1580,7 @@ instance [Mul M] [CommSemigroup N] : Mul (M →ₙ* N) :=
   ⟨fun f g =>
     { toFun := fun m => f m * g m
       map_mul' := by
-        intros ; show f (x * y) * g (x * y) = f x * g x * (f y * g y)
+        intros; show f (x * y) * g (x * y) = f x * g x * (f y * g y)
         rw [f.map_mul, g.map_mul, ← mul_assoc, ← mul_assoc, mul_right_comm (f x)] }⟩
 
 /-- Given two additive morphisms `f`, `g` to an additive commutative semigroup, `f + g` is the
@@ -1624,7 +1624,7 @@ instance {M N} {mM : MulOneClass M} [CommMonoid N] : Mul (M →* N) :=
     { toFun := fun m => f m * g m
       map_one' := show f 1 * g 1 = 1 by simp
       map_mul' := by
-        intros ; show f (x * y) * g (x * y) = f x * g x * (f y * g y)
+        intros; show f (x * y) * g (x * y) = f x * g x * (f y * g y)
         rw [f.map_mul, g.map_mul, ← mul_assoc, ← mul_assoc, mul_right_comm (f x)] }⟩
 
 /-- Given two additive monoid morphisms `f`, `g` to an additive commutative monoid, `f + g` is the
Diff
@@ -110,23 +110,11 @@ end Zero
 
 namespace NeZero
 
-/- warning: ne_zero.of_map -> NeZero.of_map is a dubious translation:
-lean 3 declaration is
-  forall {F : Type.{u1}} {R : Type.{u2}} {M : Type.{u3}} [_inst_1 : Zero.{u2} R] [_inst_2 : Zero.{u3} M] [_inst_3 : ZeroHomClass.{u1, u2, u3} F R M _inst_1 _inst_2] (f : F) {r : R} [_inst_4 : NeZero.{u3} M _inst_2 (coeFn.{succ u1, max (succ u2) (succ u3)} F (fun (_x : F) => R -> M) (FunLike.hasCoeToFun.{succ u1, succ u2, succ u3} F R (fun (_x : R) => M) (ZeroHomClass.toFunLike.{u1, u2, u3} F R M _inst_1 _inst_2 _inst_3)) f r)], NeZero.{u2} R _inst_1 r
-but is expected to have type
-  forall {F : Type.{u1}} {R : Type.{u3}} {M : Type.{u2}} [_inst_1 : Zero.{u3} R] [_inst_2 : Zero.{u2} M] [_inst_3 : ZeroHomClass.{u1, u3, u2} F R M _inst_1 _inst_2] (f : F) {r : R} [_inst_4 : NeZero.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.124 : R) => M) r) _inst_2 (FunLike.coe.{succ u1, succ u3, succ u2} F R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.124 : R) => M) _x) (ZeroHomClass.toFunLike.{u1, u3, u2} F R M _inst_1 _inst_2 _inst_3) f r)], NeZero.{u3} R _inst_1 r
-Case conversion may be inaccurate. Consider using '#align ne_zero.of_map NeZero.of_mapₓ'. -/
 theorem of_map {R M} [Zero R] [Zero M] [ZeroHomClass F R M] (f : F) {r : R} [NeZero (f r)] :
     NeZero r :=
   ⟨fun h => ne (f r) <| by convert ZeroHomClass.map_zero f⟩
 #align ne_zero.of_map NeZero.of_map
 
-/- warning: ne_zero.of_injective -> NeZero.of_injective is a dubious translation:
-lean 3 declaration is
-  forall {F : Type.{u1}} {R : Type.{u2}} {M : Type.{u3}} [_inst_1 : Zero.{u2} R] {r : R} [_inst_2 : NeZero.{u2} R _inst_1 r] [_inst_3 : Zero.{u3} M] [_inst_4 : ZeroHomClass.{u1, u2, u3} F R M _inst_1 _inst_3] {f : F}, (Function.Injective.{succ u2, succ u3} R M (coeFn.{succ u1, max (succ u2) (succ u3)} F (fun (_x : F) => R -> M) (FunLike.hasCoeToFun.{succ u1, succ u2, succ u3} F R (fun (_x : R) => M) (ZeroHomClass.toFunLike.{u1, u2, u3} F R M _inst_1 _inst_3 _inst_4)) f)) -> (NeZero.{u3} M _inst_3 (coeFn.{succ u1, max (succ u2) (succ u3)} F (fun (_x : F) => R -> M) (FunLike.hasCoeToFun.{succ u1, succ u2, succ u3} F R (fun (_x : R) => M) (ZeroHomClass.toFunLike.{u1, u2, u3} F R M _inst_1 _inst_3 _inst_4)) f r))
-but is expected to have type
-  forall {F : Type.{u1}} {R : Type.{u3}} {M : Type.{u2}} [_inst_1 : Zero.{u3} R] {r : R} [_inst_2 : NeZero.{u3} R _inst_1 r] [_inst_3 : Zero.{u2} M] [_inst_4 : ZeroHomClass.{u1, u3, u2} F R M _inst_1 _inst_3] {f : F}, (Function.Injective.{succ u3, succ u2} R M (FunLike.coe.{succ u1, succ u3, succ u2} F R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.124 : R) => M) _x) (ZeroHomClass.toFunLike.{u1, u3, u2} F R M _inst_1 _inst_3 _inst_4) f)) -> (NeZero.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.124 : R) => M) r) _inst_3 (FunLike.coe.{succ u1, succ u3, succ u2} F R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.124 : R) => M) _x) (ZeroHomClass.toFunLike.{u1, u3, u2} F R M _inst_1 _inst_3 _inst_4) f r))
-Case conversion may be inaccurate. Consider using '#align ne_zero.of_injective NeZero.of_injectiveₓ'. -/
 theorem of_injective {R M} [Zero R] {r : R} [NeZero r] [Zero M] [ZeroHomClass F R M] {f : F}
     (hf : Function.Injective f) : NeZero (f r) :=
   ⟨by rw [← ZeroHomClass.map_zero f]; exact hf.ne (Ne r)⟩
@@ -244,24 +232,12 @@ instance OneHom.oneHomClass : OneHomClass (OneHom M N) M N
 #align zero_hom.zero_hom_class ZeroHom.zeroHomClass
 -/
 
-/- warning: map_one -> map_one is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} {N : Type.{u2}} {F : Type.{u3}} [_inst_1 : One.{u1} M] [_inst_2 : One.{u2} N] [_inst_3 : OneHomClass.{u3, u1, u2} F M N _inst_1 _inst_2] (f : F), Eq.{succ u2} N (coeFn.{succ u3, max (succ u1) (succ u2)} F (fun (_x : F) => M -> N) (FunLike.hasCoeToFun.{succ u3, succ u1, succ u2} F M (fun (_x : M) => N) (OneHomClass.toFunLike.{u3, u1, u2} F M N _inst_1 _inst_2 _inst_3)) f (OfNat.ofNat.{u1} M 1 (OfNat.mk.{u1} M 1 (One.one.{u1} M _inst_1)))) (OfNat.ofNat.{u2} N 1 (OfNat.mk.{u2} N 1 (One.one.{u2} N _inst_2)))
-but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} {F : Type.{u3}} [_inst_1 : One.{u2} M] [_inst_2 : One.{u1} N] [_inst_3 : OneHomClass.{u3, u2, u1} F M N _inst_1 _inst_2] (f : F), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1264 : M) => N) (OfNat.ofNat.{u2} M 1 (One.toOfNat1.{u2} M _inst_1))) (FunLike.coe.{succ u3, succ u2, succ u1} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1264 : M) => N) _x) (OneHomClass.toFunLike.{u3, u2, u1} F M N _inst_1 _inst_2 _inst_3) f (OfNat.ofNat.{u2} M 1 (One.toOfNat1.{u2} M _inst_1))) (OfNat.ofNat.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1264 : M) => N) (OfNat.ofNat.{u2} M 1 (One.toOfNat1.{u2} M _inst_1))) 1 (One.toOfNat1.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1264 : M) => N) (OfNat.ofNat.{u2} M 1 (One.toOfNat1.{u2} M _inst_1))) _inst_2))
-Case conversion may be inaccurate. Consider using '#align map_one map_oneₓ'. -/
 @[simp, to_additive]
 theorem map_one [OneHomClass F M N] (f : F) : f 1 = 1 :=
   OneHomClass.map_one f
 #align map_one map_one
 #align map_zero map_zero
 
-/- warning: map_eq_one_iff -> map_eq_one_iff is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} {N : Type.{u2}} {F : Type.{u3}} [_inst_1 : One.{u1} M] [_inst_2 : One.{u2} N] [_inst_3 : OneHomClass.{u3, u1, u2} F M N _inst_1 _inst_2] (f : F), (Function.Injective.{succ u1, succ u2} M N (coeFn.{succ u3, max (succ u1) (succ u2)} F (fun (_x : F) => M -> N) (FunLike.hasCoeToFun.{succ u3, succ u1, succ u2} F M (fun (_x : M) => N) (OneHomClass.toFunLike.{u3, u1, u2} F M N _inst_1 _inst_2 _inst_3)) f)) -> (forall {x : M}, Iff (Eq.{succ u2} N (coeFn.{succ u3, max (succ u1) (succ u2)} F (fun (_x : F) => M -> N) (FunLike.hasCoeToFun.{succ u3, succ u1, succ u2} F M (fun (_x : M) => N) (OneHomClass.toFunLike.{u3, u1, u2} F M N _inst_1 _inst_2 _inst_3)) f x) (OfNat.ofNat.{u2} N 1 (OfNat.mk.{u2} N 1 (One.one.{u2} N _inst_2)))) (Eq.{succ u1} M x (OfNat.ofNat.{u1} M 1 (OfNat.mk.{u1} M 1 (One.one.{u1} M _inst_1)))))
-but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} {F : Type.{u3}} [_inst_1 : One.{u2} M] [_inst_2 : One.{u1} N] [_inst_3 : OneHomClass.{u3, u2, u1} F M N _inst_1 _inst_2] (f : F), (Function.Injective.{succ u2, succ u1} M N (FunLike.coe.{succ u3, succ u2, succ u1} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1264 : M) => N) _x) (OneHomClass.toFunLike.{u3, u2, u1} F M N _inst_1 _inst_2 _inst_3) f)) -> (forall {x : M}, Iff (Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1264 : M) => N) x) (FunLike.coe.{succ u3, succ u2, succ u1} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1264 : M) => N) _x) (OneHomClass.toFunLike.{u3, u2, u1} F M N _inst_1 _inst_2 _inst_3) f x) (OfNat.ofNat.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1264 : M) => N) x) 1 (One.toOfNat1.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1264 : M) => N) x) _inst_2))) (Eq.{succ u2} M x (OfNat.ofNat.{u2} M 1 (One.toOfNat1.{u2} M _inst_1))))
-Case conversion may be inaccurate. Consider using '#align map_eq_one_iff map_eq_one_iffₓ'. -/
 @[to_additive]
 theorem map_eq_one_iff [OneHomClass F M N] (f : F) (hf : Function.Injective f) {x : M} :
     f x = 1 ↔ x = 1 :=
@@ -269,12 +245,6 @@ theorem map_eq_one_iff [OneHomClass F M N] (f : F) (hf : Function.Injective f) {
 #align map_eq_one_iff map_eq_one_iff
 #align map_eq_zero_iff map_eq_zero_iff
 
-/- warning: map_ne_one_iff -> map_ne_one_iff is a dubious translation:
-lean 3 declaration is
-  forall {R : Type.{u1}} {S : Type.{u2}} {F : Type.{u3}} [_inst_3 : One.{u1} R] [_inst_4 : One.{u2} S] [_inst_5 : OneHomClass.{u3, u1, u2} F R S _inst_3 _inst_4] (f : F), (Function.Injective.{succ u1, succ u2} R S (coeFn.{succ u3, max (succ u1) (succ u2)} F (fun (_x : F) => R -> S) (FunLike.hasCoeToFun.{succ u3, succ u1, succ u2} F R (fun (_x : R) => S) (OneHomClass.toFunLike.{u3, u1, u2} F R S _inst_3 _inst_4 _inst_5)) f)) -> (forall {x : R}, Iff (Ne.{succ u2} S (coeFn.{succ u3, max (succ u1) (succ u2)} F (fun (_x : F) => R -> S) (FunLike.hasCoeToFun.{succ u3, succ u1, succ u2} F R (fun (_x : R) => S) (OneHomClass.toFunLike.{u3, u1, u2} F R S _inst_3 _inst_4 _inst_5)) f x) (OfNat.ofNat.{u2} S 1 (OfNat.mk.{u2} S 1 (One.one.{u2} S _inst_4)))) (Ne.{succ u1} R x (OfNat.ofNat.{u1} R 1 (OfNat.mk.{u1} R 1 (One.one.{u1} R _inst_3)))))
-but is expected to have type
-  forall {R : Type.{u3}} {S : Type.{u2}} {F : Type.{u1}} [_inst_3 : One.{u3} R] [_inst_4 : One.{u2} S] [_inst_5 : OneHomClass.{u1, u3, u2} F R S _inst_3 _inst_4] (f : F), (Function.Injective.{succ u3, succ u2} R S (FunLike.coe.{succ u1, succ u3, succ u2} F R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1264 : R) => S) _x) (OneHomClass.toFunLike.{u1, u3, u2} F R S _inst_3 _inst_4 _inst_5) f)) -> (forall {x : R}, Iff (Ne.{succ u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1264 : R) => S) x) (FunLike.coe.{succ u1, succ u3, succ u2} F R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1264 : R) => S) _x) (OneHomClass.toFunLike.{u1, u3, u2} F R S _inst_3 _inst_4 _inst_5) f x) (OfNat.ofNat.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1264 : R) => S) x) 1 (One.toOfNat1.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1264 : R) => S) x) _inst_4))) (Ne.{succ u3} R x (OfNat.ofNat.{u3} R 1 (One.toOfNat1.{u3} R _inst_3))))
-Case conversion may be inaccurate. Consider using '#align map_ne_one_iff map_ne_one_iffₓ'. -/
 @[to_additive]
 theorem map_ne_one_iff {R S F : Type _} [One R] [One S] [OneHomClass F R S] (f : F)
     (hf : Function.Injective f) {x : R} : f x ≠ 1 ↔ x ≠ 1 :=
@@ -282,12 +252,6 @@ theorem map_ne_one_iff {R S F : Type _} [One R] [One S] [OneHomClass F R S] (f :
 #align map_ne_one_iff map_ne_one_iff
 #align map_ne_zero_iff map_ne_zero_iff
 
-/- warning: ne_one_of_map -> ne_one_of_map is a dubious translation:
-lean 3 declaration is
-  forall {R : Type.{u1}} {S : Type.{u2}} {F : Type.{u3}} [_inst_3 : One.{u1} R] [_inst_4 : One.{u2} S] [_inst_5 : OneHomClass.{u3, u1, u2} F R S _inst_3 _inst_4] {f : F} {x : R}, (Ne.{succ u2} S (coeFn.{succ u3, max (succ u1) (succ u2)} F (fun (_x : F) => R -> S) (FunLike.hasCoeToFun.{succ u3, succ u1, succ u2} F R (fun (_x : R) => S) (OneHomClass.toFunLike.{u3, u1, u2} F R S _inst_3 _inst_4 _inst_5)) f x) (OfNat.ofNat.{u2} S 1 (OfNat.mk.{u2} S 1 (One.one.{u2} S _inst_4)))) -> (Ne.{succ u1} R x (OfNat.ofNat.{u1} R 1 (OfNat.mk.{u1} R 1 (One.one.{u1} R _inst_3))))
-but is expected to have type
-  forall {R : Type.{u3}} {S : Type.{u2}} {F : Type.{u1}} [_inst_3 : One.{u3} R] [_inst_4 : One.{u2} S] [_inst_5 : OneHomClass.{u1, u3, u2} F R S _inst_3 _inst_4] {f : F} {x : R}, (Ne.{succ u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1264 : R) => S) x) (FunLike.coe.{succ u1, succ u3, succ u2} F R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1264 : R) => S) _x) (OneHomClass.toFunLike.{u1, u3, u2} F R S _inst_3 _inst_4 _inst_5) f x) (OfNat.ofNat.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1264 : R) => S) x) 1 (One.toOfNat1.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1264 : R) => S) x) _inst_4))) -> (Ne.{succ u3} R x (OfNat.ofNat.{u3} R 1 (One.toOfNat1.{u3} R _inst_3)))
-Case conversion may be inaccurate. Consider using '#align ne_one_of_map ne_one_of_mapₓ'. -/
 @[to_additive]
 theorem ne_one_of_map {R S F : Type _} [One R] [One S] [OneHomClass F R S] {f : F} {x : R}
     (hx : f x ≠ 1) : x ≠ 1 :=
@@ -301,12 +265,6 @@ instance [OneHomClass F M N] : CoeTC F (OneHom M N) :=
     { toFun := f
       map_one' := map_one f }⟩
 
-/- warning: one_hom.coe_coe -> OneHom.coe_coe is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} {N : Type.{u2}} {F : Type.{u3}} [_inst_1 : One.{u1} M] [_inst_2 : One.{u2} N] [_inst_3 : OneHomClass.{u3, u1, u2} F M N _inst_1 _inst_2] (f : F), Eq.{max (succ u1) (succ u2)} ((fun (_x : OneHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) ((fun (a : Type.{u3}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{succ u3, max (succ u2) (succ u1)} a b] => self.0) F (OneHom.{u1, u2} M N _inst_1 _inst_2) (HasLiftT.mk.{succ u3, max (succ u2) (succ u1)} F (OneHom.{u1, u2} M N _inst_1 _inst_2) (CoeTCₓ.coe.{succ u3, max (succ u2) (succ u1)} F (OneHom.{u1, u2} M N _inst_1 _inst_2) (OneHom.hasCoeT.{u1, u2, u3} M N F _inst_1 _inst_2 _inst_3))) f)) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (OneHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : OneHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (FunLike.hasCoeToFun.{max (succ u2) (succ u1), succ u1, succ u2} (OneHom.{u1, u2} M N _inst_1 _inst_2) M (fun (_x : M) => N) (OneHomClass.toFunLike.{max u2 u1, u1, u2} (OneHom.{u1, u2} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (OneHom.oneHomClass.{u1, u2} M N _inst_1 _inst_2))) ((fun (a : Type.{u3}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{succ u3, max (succ u2) (succ u1)} a b] => self.0) F (OneHom.{u1, u2} M N _inst_1 _inst_2) (HasLiftT.mk.{succ u3, max (succ u2) (succ u1)} F (OneHom.{u1, u2} M N _inst_1 _inst_2) (CoeTCₓ.coe.{succ u3, max (succ u2) (succ u1)} F (OneHom.{u1, u2} M N _inst_1 _inst_2) (OneHom.hasCoeT.{u1, u2, u3} M N F _inst_1 _inst_2 _inst_3))) f)) (coeFn.{succ u3, max (succ u1) (succ u2)} F (fun (_x : F) => M -> N) (FunLike.hasCoeToFun.{succ u3, succ u1, succ u2} F M (fun (_x : M) => N) (OneHomClass.toFunLike.{u3, u1, u2} F M N _inst_1 _inst_2 _inst_3)) f)
-but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} {F : Type.{u3}} [_inst_1 : One.{u2} M] [_inst_2 : One.{u1} N] [_inst_3 : OneHomClass.{u3, u2, u1} F M N _inst_1 _inst_2] (f : F), Eq.{max (succ u2) (succ u1)} (forall (a : M), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1264 : M) => N) a) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (OneHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1264 : M) => N) _x) (OneHomClass.toFunLike.{max u2 u1, u2, u1} (OneHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (OneHom.oneHomClass.{u2, u1} M N _inst_1 _inst_2)) (OneHomClass.toOneHom.{u2, u1, u3} M N F _inst_1 _inst_2 _inst_3 f)) (FunLike.coe.{succ u3, succ u2, succ u1} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1264 : M) => N) _x) (OneHomClass.toFunLike.{u3, u2, u1} F M N _inst_1 _inst_2 _inst_3) f)
-Case conversion may be inaccurate. Consider using '#align one_hom.coe_coe OneHom.coe_coeₓ'. -/
 @[simp, to_additive]
 theorem OneHom.coe_coe [OneHomClass F M N] (f : F) : ((f : OneHom M N) : M → N) = f :=
   rfl
@@ -363,12 +321,6 @@ instance MulHom.mulHomClass : MulHomClass (M →ₙ* N) M N
 #align add_hom.add_hom_class AddHom.addHomClass
 -/
 
-/- warning: map_mul -> map_mul is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} {N : Type.{u2}} {F : Type.{u3}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] [_inst_3 : MulHomClass.{u3, u1, u2} F M N _inst_1 _inst_2] (f : F) (x : M) (y : M), Eq.{succ u2} N (coeFn.{succ u3, max (succ u1) (succ u2)} F (fun (_x : F) => M -> N) (FunLike.hasCoeToFun.{succ u3, succ u1, succ u2} F M (fun (_x : M) => N) (MulHomClass.toFunLike.{u3, u1, u2} F M N _inst_1 _inst_2 _inst_3)) f (HMul.hMul.{u1, u1, u1} M M M (instHMul.{u1} M _inst_1) x y)) (HMul.hMul.{u2, u2, u2} N N N (instHMul.{u2} N _inst_2) (coeFn.{succ u3, max (succ u1) (succ u2)} F (fun (_x : F) => M -> N) (FunLike.hasCoeToFun.{succ u3, succ u1, succ u2} F M (fun (_x : M) => N) (MulHomClass.toFunLike.{u3, u1, u2} F M N _inst_1 _inst_2 _inst_3)) f x) (coeFn.{succ u3, max (succ u1) (succ u2)} F (fun (_x : F) => M -> N) (FunLike.hasCoeToFun.{succ u3, succ u1, succ u2} F M (fun (_x : M) => N) (MulHomClass.toFunLike.{u3, u1, u2} F M N _inst_1 _inst_2 _inst_3)) f y))
-but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} {F : Type.{u3}} [_inst_1 : Mul.{u2} M] [_inst_2 : Mul.{u1} N] [_inst_3 : MulHomClass.{u3, u2, u1} F M N _inst_1 _inst_2] (f : F) (x : M) (y : M), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) (HMul.hMul.{u2, u2, u2} M M M (instHMul.{u2} M _inst_1) x y)) (FunLike.coe.{succ u3, succ u2, succ u1} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{u3, u2, u1} F M N _inst_1 _inst_2 _inst_3) f (HMul.hMul.{u2, u2, u2} M M M (instHMul.{u2} M _inst_1) x y)) (HMul.hMul.{u1, u1, u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) x) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) y) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) x) (instHMul.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) x) _inst_2) (FunLike.coe.{succ u3, succ u2, succ u1} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{u3, u2, u1} F M N _inst_1 _inst_2 _inst_3) f x) (FunLike.coe.{succ u3, succ u2, succ u1} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{u3, u2, u1} F M N _inst_1 _inst_2 _inst_3) f y))
-Case conversion may be inaccurate. Consider using '#align map_mul map_mulₓ'. -/
 @[simp, to_additive]
 theorem map_mul [MulHomClass F M N] (f : F) (x y : M) : f (x * y) = f x * f y :=
   MulHomClass.map_mul f x y
@@ -381,12 +333,6 @@ instance [MulHomClass F M N] : CoeTC F (M →ₙ* N) :=
     { toFun := f
       map_mul' := map_mul f }⟩
 
-/- warning: mul_hom.coe_coe -> MulHom.coe_coe is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} {N : Type.{u2}} {F : Type.{u3}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] [_inst_3 : MulHomClass.{u3, u1, u2} F M N _inst_1 _inst_2] (f : F), Eq.{max (succ u1) (succ u2)} ((fun (_x : MulHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) ((fun (a : Type.{u3}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{succ u3, max (succ u2) (succ u1)} a b] => self.0) F (MulHom.{u1, u2} M N _inst_1 _inst_2) (HasLiftT.mk.{succ u3, max (succ u2) (succ u1)} F (MulHom.{u1, u2} M N _inst_1 _inst_2) (CoeTCₓ.coe.{succ u3, max (succ u2) (succ u1)} F (MulHom.{u1, u2} M N _inst_1 _inst_2) (MulHom.hasCoeT.{u1, u2, u3} M N F _inst_1 _inst_2 _inst_3))) f)) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MulHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MulHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (FunLike.hasCoeToFun.{max (succ u2) (succ u1), succ u1, succ u2} (MulHom.{u1, u2} M N _inst_1 _inst_2) M (fun (_x : M) => N) (MulHomClass.toFunLike.{max u2 u1, u1, u2} (MulHom.{u1, u2} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u1, u2} M N _inst_1 _inst_2))) ((fun (a : Type.{u3}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{succ u3, max (succ u2) (succ u1)} a b] => self.0) F (MulHom.{u1, u2} M N _inst_1 _inst_2) (HasLiftT.mk.{succ u3, max (succ u2) (succ u1)} F (MulHom.{u1, u2} M N _inst_1 _inst_2) (CoeTCₓ.coe.{succ u3, max (succ u2) (succ u1)} F (MulHom.{u1, u2} M N _inst_1 _inst_2) (MulHom.hasCoeT.{u1, u2, u3} M N F _inst_1 _inst_2 _inst_3))) f)) (coeFn.{succ u3, max (succ u1) (succ u2)} F (fun (_x : F) => M -> N) (FunLike.hasCoeToFun.{succ u3, succ u1, succ u2} F M (fun (_x : M) => N) (MulHomClass.toFunLike.{u3, u1, u2} F M N _inst_1 _inst_2 _inst_3)) f)
-but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} {F : Type.{u3}} [_inst_1 : Mul.{u2} M] [_inst_2 : Mul.{u1} N] [_inst_3 : MulHomClass.{u3, u2, u1} F M N _inst_1 _inst_2] (f : F), Eq.{max (succ u2) (succ u1)} (forall (a : M), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) a) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) (MulHomClass.toMulHom.{u2, u1, u3} M N F _inst_1 _inst_2 _inst_3 f)) (FunLike.coe.{succ u3, succ u2, succ u1} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{u3, u2, u1} F M N _inst_1 _inst_2 _inst_3) f)
-Case conversion may be inaccurate. Consider using '#align mul_hom.coe_coe MulHom.coe_coeₓ'. -/
 @[simp, to_additive]
 theorem MulHom.coe_coe [MulHomClass F M N] (f : F) : ((f : MulHom M N) : M → N) = f :=
   rfl
@@ -452,36 +398,18 @@ instance [MonoidHomClass F M N] : CoeTC F (M →* N) :=
       map_one' := map_one f
       map_mul' := map_mul f }⟩
 
-/- warning: monoid_hom.coe_coe -> MonoidHom.coe_coe is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} {N : Type.{u2}} {F : Type.{u3}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N] [_inst_3 : MonoidHomClass.{u3, u1, u2} F M N _inst_1 _inst_2] (f : F), Eq.{max (succ u1) (succ u2)} ((fun (_x : MonoidHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) ((fun (a : Type.{u3}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{succ u3, max (succ u2) (succ u1)} a b] => self.0) F (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (HasLiftT.mk.{succ u3, max (succ u2) (succ u1)} F (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (CoeTCₓ.coe.{succ u3, max (succ u2) (succ u1)} F (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.hasCoeT.{u1, u2, u3} M N F _inst_1 _inst_2 _inst_3))) f)) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MonoidHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (FunLike.hasCoeToFun.{max (succ u2) (succ u1), succ u1, succ u2} (MonoidHom.{u1, u2} M N _inst_1 _inst_2) M (fun (_x : M) => N) (MulHomClass.toFunLike.{max u2 u1, u1, u2} (MonoidHom.{u1, u2} M N _inst_1 _inst_2) M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2) (MonoidHomClass.toMulHomClass.{max u2 u1, u1, u2} (MonoidHom.{u1, u2} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2)))) ((fun (a : Type.{u3}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{succ u3, max (succ u2) (succ u1)} a b] => self.0) F (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (HasLiftT.mk.{succ u3, max (succ u2) (succ u1)} F (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (CoeTCₓ.coe.{succ u3, max (succ u2) (succ u1)} F (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.hasCoeT.{u1, u2, u3} M N F _inst_1 _inst_2 _inst_3))) f)) (coeFn.{succ u3, max (succ u1) (succ u2)} F (fun (_x : F) => M -> N) (FunLike.hasCoeToFun.{succ u3, succ u1, succ u2} F M (fun (_x : M) => N) (MulHomClass.toFunLike.{u3, u1, u2} F M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2) (MonoidHomClass.toMulHomClass.{u3, u1, u2} F M N _inst_1 _inst_2 _inst_3))) f)
-but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} {F : Type.{u3}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u1} N] [_inst_3 : MonoidHomClass.{u3, u2, u1} F M N _inst_1 _inst_2] (f : F), Eq.{max (succ u2) (succ u1)} (forall (a : M), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) a) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2))) (MonoidHomClass.toMonoidHom.{u2, u1, u3} M N F _inst_1 _inst_2 _inst_3 f)) (FunLike.coe.{succ u3, succ u2, succ u1} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{u3, u2, u1} F M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2) (MonoidHomClass.toMulHomClass.{u3, u2, u1} F M N _inst_1 _inst_2 _inst_3)) f)
-Case conversion may be inaccurate. Consider using '#align monoid_hom.coe_coe MonoidHom.coe_coeₓ'. -/
 @[simp, to_additive]
 theorem MonoidHom.coe_coe [MonoidHomClass F M N] (f : F) : ((f : M →* N) : M → N) = f :=
   rfl
 #align monoid_hom.coe_coe MonoidHom.coe_coe
 #align add_monoid_hom.coe_coe AddMonoidHom.coe_coe
 
-/- warning: map_mul_eq_one -> map_mul_eq_one is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} {N : Type.{u2}} {F : Type.{u3}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N] [_inst_3 : MonoidHomClass.{u3, u1, u2} F M N _inst_1 _inst_2] (f : F) {a : M} {b : M}, (Eq.{succ u1} M (HMul.hMul.{u1, u1, u1} M M M (instHMul.{u1} M (MulOneClass.toHasMul.{u1} M _inst_1)) a b) (OfNat.ofNat.{u1} M 1 (OfNat.mk.{u1} M 1 (One.one.{u1} M (MulOneClass.toHasOne.{u1} M _inst_1))))) -> (Eq.{succ u2} N (HMul.hMul.{u2, u2, u2} N N N (instHMul.{u2} N (MulOneClass.toHasMul.{u2} N _inst_2)) (coeFn.{succ u3, max (succ u1) (succ u2)} F (fun (_x : F) => M -> N) (FunLike.hasCoeToFun.{succ u3, succ u1, succ u2} F M (fun (_x : M) => N) (MulHomClass.toFunLike.{u3, u1, u2} F M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2) (MonoidHomClass.toMulHomClass.{u3, u1, u2} F M N _inst_1 _inst_2 _inst_3))) f a) (coeFn.{succ u3, max (succ u1) (succ u2)} F (fun (_x : F) => M -> N) (FunLike.hasCoeToFun.{succ u3, succ u1, succ u2} F M (fun (_x : M) => N) (MulHomClass.toFunLike.{u3, u1, u2} F M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2) (MonoidHomClass.toMulHomClass.{u3, u1, u2} F M N _inst_1 _inst_2 _inst_3))) f b)) (OfNat.ofNat.{u2} N 1 (OfNat.mk.{u2} N 1 (One.one.{u2} N (MulOneClass.toHasOne.{u2} N _inst_2)))))
-but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} {F : Type.{u3}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u1} N] [_inst_3 : MonoidHomClass.{u3, u2, u1} F M N _inst_1 _inst_2] (f : F) {a : M} {b : M}, (Eq.{succ u2} M (HMul.hMul.{u2, u2, u2} M M M (instHMul.{u2} M (MulOneClass.toMul.{u2} M _inst_1)) a b) (OfNat.ofNat.{u2} M 1 (One.toOfNat1.{u2} M (MulOneClass.toOne.{u2} M _inst_1)))) -> (Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) a) (HMul.hMul.{u1, u1, u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) a) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) b) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) a) (instHMul.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) a) (MulOneClass.toMul.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) a) _inst_2)) (FunLike.coe.{succ u3, succ u2, succ u1} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{u3, u2, u1} F M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2) (MonoidHomClass.toMulHomClass.{u3, u2, u1} F M N _inst_1 _inst_2 _inst_3)) f a) (FunLike.coe.{succ u3, succ u2, succ u1} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{u3, u2, u1} F M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2) (MonoidHomClass.toMulHomClass.{u3, u2, u1} F M N _inst_1 _inst_2 _inst_3)) f b)) (OfNat.ofNat.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) a) 1 (One.toOfNat1.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) a) (MulOneClass.toOne.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) a) _inst_2))))
-Case conversion may be inaccurate. Consider using '#align map_mul_eq_one map_mul_eq_oneₓ'. -/
 @[to_additive]
 theorem map_mul_eq_one [MonoidHomClass F M N] (f : F) {a b : M} (h : a * b = 1) : f a * f b = 1 :=
   by rw [← map_mul, h, map_one]
 #align map_mul_eq_one map_mul_eq_one
 #align map_add_eq_zero map_add_eq_zero
 
-/- warning: map_div' -> map_div' is a dubious translation:
-lean 3 declaration is
-  forall {G : Type.{u1}} {H : Type.{u2}} {F : Type.{u3}} [_inst_3 : DivInvMonoid.{u1} G] [_inst_4 : DivInvMonoid.{u2} H] [_inst_5 : MonoidHomClass.{u3, u1, u2} F G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G _inst_3)) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H _inst_4))] (f : F), (forall (a : G), Eq.{succ u2} H (coeFn.{succ u3, max (succ u1) (succ u2)} F (fun (_x : F) => G -> H) (FunLike.hasCoeToFun.{succ u3, succ u1, succ u2} F G (fun (_x : G) => H) (MulHomClass.toFunLike.{u3, u1, u2} F G H (MulOneClass.toHasMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G _inst_3))) (MulOneClass.toHasMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H _inst_4))) (MonoidHomClass.toMulHomClass.{u3, u1, u2} F G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G _inst_3)) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H _inst_4)) _inst_5))) f (Inv.inv.{u1} G (DivInvMonoid.toHasInv.{u1} G _inst_3) a)) (Inv.inv.{u2} H (DivInvMonoid.toHasInv.{u2} H _inst_4) (coeFn.{succ u3, max (succ u1) (succ u2)} F (fun (_x : F) => G -> H) (FunLike.hasCoeToFun.{succ u3, succ u1, succ u2} F G (fun (_x : G) => H) (MulHomClass.toFunLike.{u3, u1, u2} F G H (MulOneClass.toHasMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G _inst_3))) (MulOneClass.toHasMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H _inst_4))) (MonoidHomClass.toMulHomClass.{u3, u1, u2} F G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G _inst_3)) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H _inst_4)) _inst_5))) f a))) -> (forall (a : G) (b : G), Eq.{succ u2} H (coeFn.{succ u3, max (succ u1) (succ u2)} F (fun (_x : F) => G -> H) (FunLike.hasCoeToFun.{succ u3, succ u1, succ u2} F G (fun (_x : G) => H) (MulHomClass.toFunLike.{u3, u1, u2} F G H (MulOneClass.toHasMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G _inst_3))) (MulOneClass.toHasMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H _inst_4))) (MonoidHomClass.toMulHomClass.{u3, u1, u2} F G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G _inst_3)) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H _inst_4)) _inst_5))) f (HDiv.hDiv.{u1, u1, u1} G G G (instHDiv.{u1} G (DivInvMonoid.toHasDiv.{u1} G _inst_3)) a b)) (HDiv.hDiv.{u2, u2, u2} H H H (instHDiv.{u2} H (DivInvMonoid.toHasDiv.{u2} H _inst_4)) (coeFn.{succ u3, max (succ u1) (succ u2)} F (fun (_x : F) => G -> H) (FunLike.hasCoeToFun.{succ u3, succ u1, succ u2} F G (fun (_x : G) => H) (MulHomClass.toFunLike.{u3, u1, u2} F G H (MulOneClass.toHasMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G _inst_3))) (MulOneClass.toHasMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H _inst_4))) (MonoidHomClass.toMulHomClass.{u3, u1, u2} F G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G _inst_3)) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H _inst_4)) _inst_5))) f a) (coeFn.{succ u3, max (succ u1) (succ u2)} F (fun (_x : F) => G -> H) (FunLike.hasCoeToFun.{succ u3, succ u1, succ u2} F G (fun (_x : G) => H) (MulHomClass.toFunLike.{u3, u1, u2} F G H (MulOneClass.toHasMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G _inst_3))) (MulOneClass.toHasMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H _inst_4))) (MonoidHomClass.toMulHomClass.{u3, u1, u2} F G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G _inst_3)) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H _inst_4)) _inst_5))) f b)))
-but is expected to have type
-  forall {G : Type.{u3}} {H : Type.{u2}} {F : Type.{u1}} [_inst_3 : DivInvMonoid.{u3} G] [_inst_4 : DivInvMonoid.{u2} H] [_inst_5 : MonoidHomClass.{u1, u3, u2} F G H (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G _inst_3)) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H _inst_4))] (f : F), (forall (a : G), Eq.{succ u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : G) => H) (Inv.inv.{u3} G (DivInvMonoid.toInv.{u3} G _inst_3) a)) (FunLike.coe.{succ u1, succ u3, succ u2} F G (fun (_x : G) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : G) => H) _x) (MulHomClass.toFunLike.{u1, u3, u2} F G H (MulOneClass.toMul.{u3} G (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G _inst_3))) (MulOneClass.toMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H _inst_4))) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F G H (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G _inst_3)) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H _inst_4)) _inst_5)) f (Inv.inv.{u3} G (DivInvMonoid.toInv.{u3} G _inst_3) a)) (Inv.inv.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : G) => H) a) (DivInvMonoid.toInv.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : G) => H) a) _inst_4) (FunLike.coe.{succ u1, succ u3, succ u2} F G (fun (_x : G) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : G) => H) _x) (MulHomClass.toFunLike.{u1, u3, u2} F G H (MulOneClass.toMul.{u3} G (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G _inst_3))) (MulOneClass.toMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H _inst_4))) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F G H (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G _inst_3)) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H _inst_4)) _inst_5)) f a))) -> (forall (a : G) (b : G), Eq.{succ u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : G) => H) (HDiv.hDiv.{u3, u3, u3} G G G (instHDiv.{u3} G (DivInvMonoid.toDiv.{u3} G _inst_3)) a b)) (FunLike.coe.{succ u1, succ u3, succ u2} F G (fun (_x : G) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : G) => H) _x) (MulHomClass.toFunLike.{u1, u3, u2} F G H (MulOneClass.toMul.{u3} G (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G _inst_3))) (MulOneClass.toMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H _inst_4))) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F G H (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G _inst_3)) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H _inst_4)) _inst_5)) f (HDiv.hDiv.{u3, u3, u3} G G G (instHDiv.{u3} G (DivInvMonoid.toDiv.{u3} G _inst_3)) a b)) (HDiv.hDiv.{u2, u2, u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : G) => H) a) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : G) => H) b) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : G) => H) a) (instHDiv.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : G) => H) a) (DivInvMonoid.toDiv.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : G) => H) a) _inst_4)) (FunLike.coe.{succ u1, succ u3, succ u2} F G (fun (_x : G) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : G) => H) _x) (MulHomClass.toFunLike.{u1, u3, u2} F G H (MulOneClass.toMul.{u3} G (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G _inst_3))) (MulOneClass.toMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H _inst_4))) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F G H (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G _inst_3)) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H _inst_4)) _inst_5)) f a) (FunLike.coe.{succ u1, succ u3, succ u2} F G (fun (_x : G) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : G) => H) _x) (MulHomClass.toFunLike.{u1, u3, u2} F G H (MulOneClass.toMul.{u3} G (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G _inst_3))) (MulOneClass.toMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H _inst_4))) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F G H (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G _inst_3)) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H _inst_4)) _inst_5)) f b)))
-Case conversion may be inaccurate. Consider using '#align map_div' map_div'ₓ'. -/
 @[to_additive]
 theorem map_div' [DivInvMonoid G] [DivInvMonoid H] [MonoidHomClass F G H] (f : F)
     (hf : ∀ a, f a⁻¹ = (f a)⁻¹) (a b : G) : f (a / b) = f a / f b := by
@@ -489,12 +417,6 @@ theorem map_div' [DivInvMonoid G] [DivInvMonoid H] [MonoidHomClass F G H] (f : F
 #align map_div' map_div'
 #align map_sub' map_sub'
 
-/- warning: map_inv -> map_inv is a dubious translation:
-lean 3 declaration is
-  forall {G : Type.{u1}} {H : Type.{u2}} {F : Type.{u3}} [_inst_3 : Group.{u1} G] [_inst_4 : DivisionMonoid.{u2} H] [_inst_5 : MonoidHomClass.{u3, u1, u2} F G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4)))] (f : F) (a : G), Eq.{succ u2} H (coeFn.{succ u3, max (succ u1) (succ u2)} F (fun (_x : F) => G -> H) (FunLike.hasCoeToFun.{succ u3, succ u1, succ u2} F G (fun (_x : G) => H) (MulHomClass.toFunLike.{u3, u1, u2} F G H (MulOneClass.toHasMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (MulOneClass.toHasMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4)))) (MonoidHomClass.toMulHomClass.{u3, u1, u2} F G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4))) _inst_5))) f (Inv.inv.{u1} G (DivInvMonoid.toHasInv.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)) a)) (Inv.inv.{u2} H (DivInvMonoid.toHasInv.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4)) (coeFn.{succ u3, max (succ u1) (succ u2)} F (fun (_x : F) => G -> H) (FunLike.hasCoeToFun.{succ u3, succ u1, succ u2} F G (fun (_x : G) => H) (MulHomClass.toFunLike.{u3, u1, u2} F G H (MulOneClass.toHasMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (MulOneClass.toHasMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4)))) (MonoidHomClass.toMulHomClass.{u3, u1, u2} F G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4))) _inst_5))) f a))
-but is expected to have type
-  forall {G : Type.{u3}} {H : Type.{u2}} {F : Type.{u1}} [_inst_3 : Group.{u3} G] [_inst_4 : DivisionMonoid.{u2} H] [_inst_5 : MonoidHomClass.{u1, u3, u2} F G H (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4)))] (f : F) (a : G), Eq.{succ u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : G) => H) (Inv.inv.{u3} G (InvOneClass.toInv.{u3} G (DivInvOneMonoid.toInvOneClass.{u3} G (DivisionMonoid.toDivInvOneMonoid.{u3} G (Group.toDivisionMonoid.{u3} G _inst_3)))) a)) (FunLike.coe.{succ u1, succ u3, succ u2} F G (fun (_x : G) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : G) => H) _x) (MulHomClass.toFunLike.{u1, u3, u2} F G H (MulOneClass.toMul.{u3} G (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3)))) (MulOneClass.toMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4)))) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F G H (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4))) _inst_5)) f (Inv.inv.{u3} G (InvOneClass.toInv.{u3} G (DivInvOneMonoid.toInvOneClass.{u3} G (DivisionMonoid.toDivInvOneMonoid.{u3} G (Group.toDivisionMonoid.{u3} G _inst_3)))) a)) (Inv.inv.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : G) => H) a) (InvOneClass.toInv.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : G) => H) a) (DivInvOneMonoid.toInvOneClass.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : G) => H) a) (DivisionMonoid.toDivInvOneMonoid.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : G) => H) a) _inst_4))) (FunLike.coe.{succ u1, succ u3, succ u2} F G (fun (_x : G) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : G) => H) _x) (MulHomClass.toFunLike.{u1, u3, u2} F G H (MulOneClass.toMul.{u3} G (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3)))) (MulOneClass.toMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4)))) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F G H (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4))) _inst_5)) f a))
-Case conversion may be inaccurate. Consider using '#align map_inv map_invₓ'. -/
 /-- Group homomorphisms preserve inverse. -/
 @[simp, to_additive "Additive group homomorphisms preserve negation."]
 theorem map_inv [Group G] [DivisionMonoid H] [MonoidHomClass F G H] (f : F) (a : G) :
@@ -503,12 +425,6 @@ theorem map_inv [Group G] [DivisionMonoid H] [MonoidHomClass F G H] (f : F) (a :
 #align map_inv map_inv
 #align map_neg map_neg
 
-/- warning: map_mul_inv -> map_mul_inv is a dubious translation:
-lean 3 declaration is
-  forall {G : Type.{u1}} {H : Type.{u2}} {F : Type.{u3}} [_inst_3 : Group.{u1} G] [_inst_4 : DivisionMonoid.{u2} H] [_inst_5 : MonoidHomClass.{u3, u1, u2} F G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4)))] (f : F) (a : G) (b : G), Eq.{succ u2} H (coeFn.{succ u3, max (succ u1) (succ u2)} F (fun (_x : F) => G -> H) (FunLike.hasCoeToFun.{succ u3, succ u1, succ u2} F G (fun (_x : G) => H) (MulHomClass.toFunLike.{u3, u1, u2} F G H (MulOneClass.toHasMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (MulOneClass.toHasMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4)))) (MonoidHomClass.toMulHomClass.{u3, u1, u2} F G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4))) _inst_5))) f (HMul.hMul.{u1, u1, u1} G G G (instHMul.{u1} G (MulOneClass.toHasMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3))))) a (Inv.inv.{u1} G (DivInvMonoid.toHasInv.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)) b))) (HMul.hMul.{u2, u2, u2} H H H (instHMul.{u2} H (MulOneClass.toHasMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4))))) (coeFn.{succ u3, max (succ u1) (succ u2)} F (fun (_x : F) => G -> H) (FunLike.hasCoeToFun.{succ u3, succ u1, succ u2} F G (fun (_x : G) => H) (MulHomClass.toFunLike.{u3, u1, u2} F G H (MulOneClass.toHasMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (MulOneClass.toHasMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4)))) (MonoidHomClass.toMulHomClass.{u3, u1, u2} F G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4))) _inst_5))) f a) (Inv.inv.{u2} H (DivInvMonoid.toHasInv.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4)) (coeFn.{succ u3, max (succ u1) (succ u2)} F (fun (_x : F) => G -> H) (FunLike.hasCoeToFun.{succ u3, succ u1, succ u2} F G (fun (_x : G) => H) (MulHomClass.toFunLike.{u3, u1, u2} F G H (MulOneClass.toHasMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (MulOneClass.toHasMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4)))) (MonoidHomClass.toMulHomClass.{u3, u1, u2} F G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4))) _inst_5))) f b)))
-but is expected to have type
-  forall {G : Type.{u3}} {H : Type.{u2}} {F : Type.{u1}} [_inst_3 : Group.{u3} G] [_inst_4 : DivisionMonoid.{u2} H] [_inst_5 : MonoidHomClass.{u1, u3, u2} F G H (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4)))] (f : F) (a : G) (b : G), Eq.{succ u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : G) => H) (HMul.hMul.{u3, u3, u3} G G G (instHMul.{u3} G (MulOneClass.toMul.{u3} G (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3))))) a (Inv.inv.{u3} G (InvOneClass.toInv.{u3} G (DivInvOneMonoid.toInvOneClass.{u3} G (DivisionMonoid.toDivInvOneMonoid.{u3} G (Group.toDivisionMonoid.{u3} G _inst_3)))) b))) (FunLike.coe.{succ u1, succ u3, succ u2} F G (fun (_x : G) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : G) => H) _x) (MulHomClass.toFunLike.{u1, u3, u2} F G H (MulOneClass.toMul.{u3} G (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3)))) (MulOneClass.toMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4)))) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F G H (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4))) _inst_5)) f (HMul.hMul.{u3, u3, u3} G G G (instHMul.{u3} G (MulOneClass.toMul.{u3} G (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3))))) a (Inv.inv.{u3} G (InvOneClass.toInv.{u3} G (DivInvOneMonoid.toInvOneClass.{u3} G (DivisionMonoid.toDivInvOneMonoid.{u3} G (Group.toDivisionMonoid.{u3} G _inst_3)))) b))) (HMul.hMul.{u2, u2, u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : G) => H) a) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : G) => H) b) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : G) => H) a) (instHMul.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : G) => H) a) (MulOneClass.toMul.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : G) => H) a) (Monoid.toMulOneClass.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : G) => H) a) (DivInvMonoid.toMonoid.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : G) => H) a) (DivisionMonoid.toDivInvMonoid.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : G) => H) a) _inst_4))))) (FunLike.coe.{succ u1, succ u3, succ u2} F G (fun (_x : G) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : G) => H) _x) (MulHomClass.toFunLike.{u1, u3, u2} F G H (MulOneClass.toMul.{u3} G (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3)))) (MulOneClass.toMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4)))) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F G H (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4))) _inst_5)) f a) (Inv.inv.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : G) => H) b) (InvOneClass.toInv.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : G) => H) b) (DivInvOneMonoid.toInvOneClass.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : G) => H) b) (DivisionMonoid.toDivInvOneMonoid.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : G) => H) b) _inst_4))) (FunLike.coe.{succ u1, succ u3, succ u2} F G (fun (_x : G) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : G) => H) _x) (MulHomClass.toFunLike.{u1, u3, u2} F G H (MulOneClass.toMul.{u3} G (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3)))) (MulOneClass.toMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4)))) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F G H (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4))) _inst_5)) f b)))
-Case conversion may be inaccurate. Consider using '#align map_mul_inv map_mul_invₓ'. -/
 /-- Group homomorphisms preserve division. -/
 @[simp, to_additive "Additive group homomorphisms preserve subtraction."]
 theorem map_mul_inv [Group G] [DivisionMonoid H] [MonoidHomClass F G H] (f : F) (a b : G) :
@@ -516,12 +432,6 @@ theorem map_mul_inv [Group G] [DivisionMonoid H] [MonoidHomClass F G H] (f : F)
 #align map_mul_inv map_mul_inv
 #align map_add_neg map_add_neg
 
-/- warning: map_div -> map_div is a dubious translation:
-lean 3 declaration is
-  forall {G : Type.{u1}} {H : Type.{u2}} {F : Type.{u3}} [_inst_3 : Group.{u1} G] [_inst_4 : DivisionMonoid.{u2} H] [_inst_5 : MonoidHomClass.{u3, u1, u2} F G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4)))] (f : F) (a : G) (b : G), Eq.{succ u2} H (coeFn.{succ u3, max (succ u1) (succ u2)} F (fun (_x : F) => G -> H) (FunLike.hasCoeToFun.{succ u3, succ u1, succ u2} F G (fun (_x : G) => H) (MulHomClass.toFunLike.{u3, u1, u2} F G H (MulOneClass.toHasMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (MulOneClass.toHasMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4)))) (MonoidHomClass.toMulHomClass.{u3, u1, u2} F G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4))) _inst_5))) f (HDiv.hDiv.{u1, u1, u1} G G G (instHDiv.{u1} G (DivInvMonoid.toHasDiv.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3))) a b)) (HDiv.hDiv.{u2, u2, u2} H H H (instHDiv.{u2} H (DivInvMonoid.toHasDiv.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4))) (coeFn.{succ u3, max (succ u1) (succ u2)} F (fun (_x : F) => G -> H) (FunLike.hasCoeToFun.{succ u3, succ u1, succ u2} F G (fun (_x : G) => H) (MulHomClass.toFunLike.{u3, u1, u2} F G H (MulOneClass.toHasMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (MulOneClass.toHasMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4)))) (MonoidHomClass.toMulHomClass.{u3, u1, u2} F G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4))) _inst_5))) f a) (coeFn.{succ u3, max (succ u1) (succ u2)} F (fun (_x : F) => G -> H) (FunLike.hasCoeToFun.{succ u3, succ u1, succ u2} F G (fun (_x : G) => H) (MulHomClass.toFunLike.{u3, u1, u2} F G H (MulOneClass.toHasMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (MulOneClass.toHasMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4)))) (MonoidHomClass.toMulHomClass.{u3, u1, u2} F G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4))) _inst_5))) f b))
-but is expected to have type
-  forall {G : Type.{u3}} {H : Type.{u2}} {F : Type.{u1}} [_inst_3 : Group.{u3} G] [_inst_4 : DivisionMonoid.{u2} H] [_inst_5 : MonoidHomClass.{u1, u3, u2} F G H (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4)))] (f : F) (a : G) (b : G), Eq.{succ u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : G) => H) (HDiv.hDiv.{u3, u3, u3} G G G (instHDiv.{u3} G (DivInvMonoid.toDiv.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3))) a b)) (FunLike.coe.{succ u1, succ u3, succ u2} F G (fun (_x : G) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : G) => H) _x) (MulHomClass.toFunLike.{u1, u3, u2} F G H (MulOneClass.toMul.{u3} G (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3)))) (MulOneClass.toMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4)))) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F G H (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4))) _inst_5)) f (HDiv.hDiv.{u3, u3, u3} G G G (instHDiv.{u3} G (DivInvMonoid.toDiv.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3))) a b)) (HDiv.hDiv.{u2, u2, u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : G) => H) a) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : G) => H) b) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : G) => H) a) (instHDiv.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : G) => H) a) (DivInvMonoid.toDiv.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : G) => H) a) (DivisionMonoid.toDivInvMonoid.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : G) => H) a) _inst_4))) (FunLike.coe.{succ u1, succ u3, succ u2} F G (fun (_x : G) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : G) => H) _x) (MulHomClass.toFunLike.{u1, u3, u2} F G H (MulOneClass.toMul.{u3} G (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3)))) (MulOneClass.toMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4)))) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F G H (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4))) _inst_5)) f a) (FunLike.coe.{succ u1, succ u3, succ u2} F G (fun (_x : G) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : G) => H) _x) (MulHomClass.toFunLike.{u1, u3, u2} F G H (MulOneClass.toMul.{u3} G (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3)))) (MulOneClass.toMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4)))) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F G H (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4))) _inst_5)) f b))
-Case conversion may be inaccurate. Consider using '#align map_div map_divₓ'. -/
 /-- Group homomorphisms preserve division. -/
 @[simp, to_additive "Additive group homomorphisms preserve subtraction."]
 theorem map_div [Group G] [DivisionMonoid H] [MonoidHomClass F G H] (f : F) :
@@ -530,12 +440,6 @@ theorem map_div [Group G] [DivisionMonoid H] [MonoidHomClass F G H] (f : F) :
 #align map_div map_div
 #align map_sub map_sub
 
-/- warning: map_pow -> map_pow is a dubious translation:
-lean 3 declaration is
-  forall {G : Type.{u1}} {H : Type.{u2}} {F : Type.{u3}} [_inst_3 : Monoid.{u1} G] [_inst_4 : Monoid.{u2} H] [_inst_5 : MonoidHomClass.{u3, u1, u2} F G H (Monoid.toMulOneClass.{u1} G _inst_3) (Monoid.toMulOneClass.{u2} H _inst_4)] (f : F) (a : G) (n : Nat), Eq.{succ u2} H (coeFn.{succ u3, max (succ u1) (succ u2)} F (fun (_x : F) => G -> H) (FunLike.hasCoeToFun.{succ u3, succ u1, succ u2} F G (fun (_x : G) => H) (MulHomClass.toFunLike.{u3, u1, u2} F G H (MulOneClass.toHasMul.{u1} G (Monoid.toMulOneClass.{u1} G _inst_3)) (MulOneClass.toHasMul.{u2} H (Monoid.toMulOneClass.{u2} H _inst_4)) (MonoidHomClass.toMulHomClass.{u3, u1, u2} F G H (Monoid.toMulOneClass.{u1} G _inst_3) (Monoid.toMulOneClass.{u2} H _inst_4) _inst_5))) f (HPow.hPow.{u1, 0, u1} G Nat G (instHPow.{u1, 0} G Nat (Monoid.Pow.{u1} G _inst_3)) a n)) (HPow.hPow.{u2, 0, u2} H Nat H (instHPow.{u2, 0} H Nat (Monoid.Pow.{u2} H _inst_4)) (coeFn.{succ u3, max (succ u1) (succ u2)} F (fun (_x : F) => G -> H) (FunLike.hasCoeToFun.{succ u3, succ u1, succ u2} F G (fun (_x : G) => H) (MulHomClass.toFunLike.{u3, u1, u2} F G H (MulOneClass.toHasMul.{u1} G (Monoid.toMulOneClass.{u1} G _inst_3)) (MulOneClass.toHasMul.{u2} H (Monoid.toMulOneClass.{u2} H _inst_4)) (MonoidHomClass.toMulHomClass.{u3, u1, u2} F G H (Monoid.toMulOneClass.{u1} G _inst_3) (Monoid.toMulOneClass.{u2} H _inst_4) _inst_5))) f a) n)
-but is expected to have type
-  forall {G : Type.{u3}} {H : Type.{u2}} {F : Type.{u1}} [_inst_3 : Monoid.{u3} G] [_inst_4 : Monoid.{u2} H] [_inst_5 : MonoidHomClass.{u1, u3, u2} F G H (Monoid.toMulOneClass.{u3} G _inst_3) (Monoid.toMulOneClass.{u2} H _inst_4)] (f : F) (a : G) (n : Nat), Eq.{succ u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : G) => H) (HPow.hPow.{u3, 0, u3} G Nat G (instHPow.{u3, 0} G Nat (Monoid.Pow.{u3} G _inst_3)) a n)) (FunLike.coe.{succ u1, succ u3, succ u2} F G (fun (_x : G) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : G) => H) _x) (MulHomClass.toFunLike.{u1, u3, u2} F G H (MulOneClass.toMul.{u3} G (Monoid.toMulOneClass.{u3} G _inst_3)) (MulOneClass.toMul.{u2} H (Monoid.toMulOneClass.{u2} H _inst_4)) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F G H (Monoid.toMulOneClass.{u3} G _inst_3) (Monoid.toMulOneClass.{u2} H _inst_4) _inst_5)) f (HPow.hPow.{u3, 0, u3} G Nat G (instHPow.{u3, 0} G Nat (Monoid.Pow.{u3} G _inst_3)) a n)) (HPow.hPow.{u2, 0, u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : G) => H) a) Nat ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : G) => H) a) (instHPow.{u2, 0} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : G) => H) a) Nat (Monoid.Pow.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : G) => H) a) _inst_4)) (FunLike.coe.{succ u1, succ u3, succ u2} F G (fun (_x : G) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : G) => H) _x) (MulHomClass.toFunLike.{u1, u3, u2} F G H (MulOneClass.toMul.{u3} G (Monoid.toMulOneClass.{u3} G _inst_3)) (MulOneClass.toMul.{u2} H (Monoid.toMulOneClass.{u2} H _inst_4)) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F G H (Monoid.toMulOneClass.{u3} G _inst_3) (Monoid.toMulOneClass.{u2} H _inst_4) _inst_5)) f a) n)
-Case conversion may be inaccurate. Consider using '#align map_pow map_powₓ'. -/
 -- to_additive puts the arguments in the wrong order, so generate an auxiliary lemma, then
 -- swap its arguments.
 @[to_additive map_nsmul.aux, simp]
@@ -546,12 +450,6 @@ theorem map_pow [Monoid G] [Monoid H] [MonoidHomClass F G H] (f : F) (a : G) :
 #align map_pow map_pow
 #align map_nsmul map_nsmul
 
-/- warning: map_nsmul -> map_nsmul is a dubious translation:
-lean 3 declaration is
-  forall {G : Type.{u1}} {H : Type.{u2}} {F : Type.{u3}} [_inst_3 : AddMonoid.{u1} G] [_inst_4 : AddMonoid.{u2} H] [_inst_5 : AddMonoidHomClass.{u3, u1, u2} F G H (AddMonoid.toAddZeroClass.{u1} G _inst_3) (AddMonoid.toAddZeroClass.{u2} H _inst_4)] (f : F) (n : Nat) (a : G), Eq.{succ u2} H (coeFn.{succ u3, max (succ u1) (succ u2)} F (fun (_x : F) => G -> H) (FunLike.hasCoeToFun.{succ u3, succ u1, succ u2} F G (fun (_x : G) => H) (AddHomClass.toFunLike.{u3, u1, u2} F G H (AddZeroClass.toHasAdd.{u1} G (AddMonoid.toAddZeroClass.{u1} G _inst_3)) (AddZeroClass.toHasAdd.{u2} H (AddMonoid.toAddZeroClass.{u2} H _inst_4)) (AddMonoidHomClass.toAddHomClass.{u3, u1, u2} F G H (AddMonoid.toAddZeroClass.{u1} G _inst_3) (AddMonoid.toAddZeroClass.{u2} H _inst_4) _inst_5))) f (SMul.smul.{0, u1} Nat G (AddMonoid.SMul.{u1} G _inst_3) n a)) (SMul.smul.{0, u2} Nat H (AddMonoid.SMul.{u2} H _inst_4) n (coeFn.{succ u3, max (succ u1) (succ u2)} F (fun (_x : F) => G -> H) (FunLike.hasCoeToFun.{succ u3, succ u1, succ u2} F G (fun (_x : G) => H) (AddHomClass.toFunLike.{u3, u1, u2} F G H (AddZeroClass.toHasAdd.{u1} G (AddMonoid.toAddZeroClass.{u1} G _inst_3)) (AddZeroClass.toHasAdd.{u2} H (AddMonoid.toAddZeroClass.{u2} H _inst_4)) (AddMonoidHomClass.toAddHomClass.{u3, u1, u2} F G H (AddMonoid.toAddZeroClass.{u1} G _inst_3) (AddMonoid.toAddZeroClass.{u2} H _inst_4) _inst_5))) f a))
-but is expected to have type
-  forall {G : Type.{u3}} {H : Type.{u2}} {F : Type.{u1}} [_inst_3 : AddMonoid.{u3} G] [_inst_4 : AddMonoid.{u2} H] [_inst_5 : AddMonoidHomClass.{u1, u3, u2} F G H (AddMonoid.toAddZeroClass.{u3} G _inst_3) (AddMonoid.toAddZeroClass.{u2} H _inst_4)] (f : F) (n : Nat) (a : G), Eq.{succ u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : G) => H) (HSMul.hSMul.{0, u3, u3} Nat G G (instHSMul.{0, u3} Nat G (AddMonoid.SMul.{u3} G _inst_3)) n a)) (FunLike.coe.{succ u1, succ u3, succ u2} F G (fun (_x : G) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : G) => H) _x) (AddHomClass.toFunLike.{u1, u3, u2} F G H (AddZeroClass.toAdd.{u3} G (AddMonoid.toAddZeroClass.{u3} G _inst_3)) (AddZeroClass.toAdd.{u2} H (AddMonoid.toAddZeroClass.{u2} H _inst_4)) (AddMonoidHomClass.toAddHomClass.{u1, u3, u2} F G H (AddMonoid.toAddZeroClass.{u3} G _inst_3) (AddMonoid.toAddZeroClass.{u2} H _inst_4) _inst_5)) f (HSMul.hSMul.{0, u3, u3} Nat G G (instHSMul.{0, u3} Nat G (AddMonoid.SMul.{u3} G _inst_3)) n a)) (HSMul.hSMul.{0, u2, u2} Nat ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : G) => H) a) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : G) => H) a) (instHSMul.{0, u2} Nat ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : G) => H) a) (AddMonoid.SMul.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : G) => H) a) _inst_4)) n (FunLike.coe.{succ u1, succ u3, succ u2} F G (fun (_x : G) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : G) => H) _x) (AddHomClass.toFunLike.{u1, u3, u2} F G H (AddZeroClass.toAdd.{u3} G (AddMonoid.toAddZeroClass.{u3} G _inst_3)) (AddZeroClass.toAdd.{u2} H (AddMonoid.toAddZeroClass.{u2} H _inst_4)) (AddMonoidHomClass.toAddHomClass.{u1, u3, u2} F G H (AddMonoid.toAddZeroClass.{u3} G _inst_3) (AddMonoid.toAddZeroClass.{u2} H _inst_4) _inst_5)) f a))
-Case conversion may be inaccurate. Consider using '#align map_nsmul map_nsmulₓ'. -/
 @[simp]
 theorem map_nsmul [AddMonoid G] [AddMonoid H] [AddMonoidHomClass F G H] (f : F) (n : ℕ) (a : G) :
     f (n • a) = n • f a :=
@@ -560,12 +458,6 @@ theorem map_nsmul [AddMonoid G] [AddMonoid H] [AddMonoidHomClass F G H] (f : F)
 
 attribute [to_additive_reorder 8, to_additive] map_pow
 
-/- warning: map_zpow' -> map_zpow' is a dubious translation:
-lean 3 declaration is
-  forall {G : Type.{u1}} {H : Type.{u2}} {F : Type.{u3}} [_inst_3 : DivInvMonoid.{u1} G] [_inst_4 : DivInvMonoid.{u2} H] [_inst_5 : MonoidHomClass.{u3, u1, u2} F G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G _inst_3)) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H _inst_4))] (f : F), (forall (x : G), Eq.{succ u2} H (coeFn.{succ u3, max (succ u1) (succ u2)} F (fun (_x : F) => G -> H) (FunLike.hasCoeToFun.{succ u3, succ u1, succ u2} F G (fun (_x : G) => H) (MulHomClass.toFunLike.{u3, u1, u2} F G H (MulOneClass.toHasMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G _inst_3))) (MulOneClass.toHasMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H _inst_4))) (MonoidHomClass.toMulHomClass.{u3, u1, u2} F G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G _inst_3)) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H _inst_4)) _inst_5))) f (Inv.inv.{u1} G (DivInvMonoid.toHasInv.{u1} G _inst_3) x)) (Inv.inv.{u2} H (DivInvMonoid.toHasInv.{u2} H _inst_4) (coeFn.{succ u3, max (succ u1) (succ u2)} F (fun (_x : F) => G -> H) (FunLike.hasCoeToFun.{succ u3, succ u1, succ u2} F G (fun (_x : G) => H) (MulHomClass.toFunLike.{u3, u1, u2} F G H (MulOneClass.toHasMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G _inst_3))) (MulOneClass.toHasMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H _inst_4))) (MonoidHomClass.toMulHomClass.{u3, u1, u2} F G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G _inst_3)) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H _inst_4)) _inst_5))) f x))) -> (forall (a : G) (n : Int), Eq.{succ u2} H (coeFn.{succ u3, max (succ u1) (succ u2)} F (fun (_x : F) => G -> H) (FunLike.hasCoeToFun.{succ u3, succ u1, succ u2} F G (fun (_x : G) => H) (MulHomClass.toFunLike.{u3, u1, u2} F G H (MulOneClass.toHasMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G _inst_3))) (MulOneClass.toHasMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H _inst_4))) (MonoidHomClass.toMulHomClass.{u3, u1, u2} F G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G _inst_3)) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H _inst_4)) _inst_5))) f (HPow.hPow.{u1, 0, u1} G Int G (instHPow.{u1, 0} G Int (DivInvMonoid.Pow.{u1} G _inst_3)) a n)) (HPow.hPow.{u2, 0, u2} H Int H (instHPow.{u2, 0} H Int (DivInvMonoid.Pow.{u2} H _inst_4)) (coeFn.{succ u3, max (succ u1) (succ u2)} F (fun (_x : F) => G -> H) (FunLike.hasCoeToFun.{succ u3, succ u1, succ u2} F G (fun (_x : G) => H) (MulHomClass.toFunLike.{u3, u1, u2} F G H (MulOneClass.toHasMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G _inst_3))) (MulOneClass.toHasMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H _inst_4))) (MonoidHomClass.toMulHomClass.{u3, u1, u2} F G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G _inst_3)) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H _inst_4)) _inst_5))) f a) n))
-but is expected to have type
-  forall {G : Type.{u3}} {H : Type.{u2}} {F : Type.{u1}} [_inst_3 : DivInvMonoid.{u3} G] [_inst_4 : DivInvMonoid.{u2} H] [_inst_5 : MonoidHomClass.{u1, u3, u2} F G H (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G _inst_3)) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H _inst_4))] (f : F), (forall (x : G), Eq.{succ u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : G) => H) (Inv.inv.{u3} G (DivInvMonoid.toInv.{u3} G _inst_3) x)) (FunLike.coe.{succ u1, succ u3, succ u2} F G (fun (_x : G) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : G) => H) _x) (MulHomClass.toFunLike.{u1, u3, u2} F G H (MulOneClass.toMul.{u3} G (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G _inst_3))) (MulOneClass.toMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H _inst_4))) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F G H (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G _inst_3)) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H _inst_4)) _inst_5)) f (Inv.inv.{u3} G (DivInvMonoid.toInv.{u3} G _inst_3) x)) (Inv.inv.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : G) => H) x) (DivInvMonoid.toInv.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : G) => H) x) _inst_4) (FunLike.coe.{succ u1, succ u3, succ u2} F G (fun (_x : G) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : G) => H) _x) (MulHomClass.toFunLike.{u1, u3, u2} F G H (MulOneClass.toMul.{u3} G (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G _inst_3))) (MulOneClass.toMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H _inst_4))) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F G H (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G _inst_3)) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H _inst_4)) _inst_5)) f x))) -> (forall (a : G) (n : Int), Eq.{succ u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : G) => H) (HPow.hPow.{u3, 0, u3} G Int G (instHPow.{u3, 0} G Int (DivInvMonoid.Pow.{u3} G _inst_3)) a n)) (FunLike.coe.{succ u1, succ u3, succ u2} F G (fun (_x : G) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : G) => H) _x) (MulHomClass.toFunLike.{u1, u3, u2} F G H (MulOneClass.toMul.{u3} G (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G _inst_3))) (MulOneClass.toMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H _inst_4))) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F G H (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G _inst_3)) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H _inst_4)) _inst_5)) f (HPow.hPow.{u3, 0, u3} G Int G (instHPow.{u3, 0} G Int (DivInvMonoid.Pow.{u3} G _inst_3)) a n)) (HPow.hPow.{u2, 0, u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : G) => H) a) Int ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : G) => H) a) (instHPow.{u2, 0} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : G) => H) a) Int (DivInvMonoid.Pow.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : G) => H) a) _inst_4)) (FunLike.coe.{succ u1, succ u3, succ u2} F G (fun (_x : G) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : G) => H) _x) (MulHomClass.toFunLike.{u1, u3, u2} F G H (MulOneClass.toMul.{u3} G (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G _inst_3))) (MulOneClass.toMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H _inst_4))) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F G H (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G _inst_3)) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H _inst_4)) _inst_5)) f a) n))
-Case conversion may be inaccurate. Consider using '#align map_zpow' map_zpow'ₓ'. -/
 @[to_additive]
 theorem map_zpow' [DivInvMonoid G] [DivInvMonoid H] [MonoidHomClass F G H] (f : F)
     (hf : ∀ x : G, f x⁻¹ = (f x)⁻¹) (a : G) : ∀ n : ℤ, f (a ^ n) = f a ^ n
@@ -574,12 +466,6 @@ theorem map_zpow' [DivInvMonoid G] [DivInvMonoid H] [MonoidHomClass F G H] (f :
 #align map_zpow' map_zpow'
 #align map_zsmul' map_zsmul'
 
-/- warning: map_zpow -> map_zpow is a dubious translation:
-lean 3 declaration is
-  forall {G : Type.{u1}} {H : Type.{u2}} {F : Type.{u3}} [_inst_3 : Group.{u1} G] [_inst_4 : DivisionMonoid.{u2} H] [_inst_5 : MonoidHomClass.{u3, u1, u2} F G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4)))] (f : F) (g : G) (n : Int), Eq.{succ u2} H (coeFn.{succ u3, max (succ u1) (succ u2)} F (fun (_x : F) => G -> H) (FunLike.hasCoeToFun.{succ u3, succ u1, succ u2} F G (fun (_x : G) => H) (MulHomClass.toFunLike.{u3, u1, u2} F G H (MulOneClass.toHasMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (MulOneClass.toHasMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4)))) (MonoidHomClass.toMulHomClass.{u3, u1, u2} F G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4))) _inst_5))) f (HPow.hPow.{u1, 0, u1} G Int G (instHPow.{u1, 0} G Int (DivInvMonoid.Pow.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3))) g n)) (HPow.hPow.{u2, 0, u2} H Int H (instHPow.{u2, 0} H Int (DivInvMonoid.Pow.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4))) (coeFn.{succ u3, max (succ u1) (succ u2)} F (fun (_x : F) => G -> H) (FunLike.hasCoeToFun.{succ u3, succ u1, succ u2} F G (fun (_x : G) => H) (MulHomClass.toFunLike.{u3, u1, u2} F G H (MulOneClass.toHasMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (MulOneClass.toHasMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4)))) (MonoidHomClass.toMulHomClass.{u3, u1, u2} F G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4))) _inst_5))) f g) n)
-but is expected to have type
-  forall {G : Type.{u3}} {H : Type.{u2}} {F : Type.{u1}} [_inst_3 : Group.{u3} G] [_inst_4 : DivisionMonoid.{u2} H] [_inst_5 : MonoidHomClass.{u1, u3, u2} F G H (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4)))] (f : F) (g : G) (n : Int), Eq.{succ u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : G) => H) (HPow.hPow.{u3, 0, u3} G Int G (instHPow.{u3, 0} G Int (DivInvMonoid.Pow.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3))) g n)) (FunLike.coe.{succ u1, succ u3, succ u2} F G (fun (_x : G) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : G) => H) _x) (MulHomClass.toFunLike.{u1, u3, u2} F G H (MulOneClass.toMul.{u3} G (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3)))) (MulOneClass.toMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4)))) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F G H (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4))) _inst_5)) f (HPow.hPow.{u3, 0, u3} G Int G (instHPow.{u3, 0} G Int (DivInvMonoid.Pow.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3))) g n)) (HPow.hPow.{u2, 0, u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : G) => H) g) Int ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : G) => H) g) (instHPow.{u2, 0} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : G) => H) g) Int (DivInvMonoid.Pow.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : G) => H) g) (DivisionMonoid.toDivInvMonoid.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : G) => H) g) _inst_4))) (FunLike.coe.{succ u1, succ u3, succ u2} F G (fun (_x : G) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : G) => H) _x) (MulHomClass.toFunLike.{u1, u3, u2} F G H (MulOneClass.toMul.{u3} G (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3)))) (MulOneClass.toMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4)))) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F G H (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4))) _inst_5)) f g) n)
-Case conversion may be inaccurate. Consider using '#align map_zpow map_zpowₓ'. -/
 -- to_additive puts the arguments in the wrong order, so generate an auxiliary lemma, then
 -- swap its arguments.
 /-- Group homomorphisms preserve integer power. -/
@@ -590,12 +476,6 @@ theorem map_zpow [Group G] [DivisionMonoid H] [MonoidHomClass F G H] (f : F) (g
 #align map_zpow map_zpow
 #align map_zsmul map_zsmul
 
-/- warning: map_zsmul -> map_zsmul is a dubious translation:
-lean 3 declaration is
-  forall {G : Type.{u1}} {H : Type.{u2}} {F : Type.{u3}} [_inst_3 : AddGroup.{u1} G] [_inst_4 : SubtractionMonoid.{u2} H] [_inst_5 : AddMonoidHomClass.{u3, u1, u2} F G H (AddMonoid.toAddZeroClass.{u1} G (SubNegMonoid.toAddMonoid.{u1} G (AddGroup.toSubNegMonoid.{u1} G _inst_3))) (AddMonoid.toAddZeroClass.{u2} H (SubNegMonoid.toAddMonoid.{u2} H (SubtractionMonoid.toSubNegMonoid.{u2} H _inst_4)))] (f : F) (n : Int) (g : G), Eq.{succ u2} H (coeFn.{succ u3, max (succ u1) (succ u2)} F (fun (_x : F) => G -> H) (FunLike.hasCoeToFun.{succ u3, succ u1, succ u2} F G (fun (_x : G) => H) (AddHomClass.toFunLike.{u3, u1, u2} F G H (AddZeroClass.toHasAdd.{u1} G (AddMonoid.toAddZeroClass.{u1} G (SubNegMonoid.toAddMonoid.{u1} G (AddGroup.toSubNegMonoid.{u1} G _inst_3)))) (AddZeroClass.toHasAdd.{u2} H (AddMonoid.toAddZeroClass.{u2} H (SubNegMonoid.toAddMonoid.{u2} H (SubtractionMonoid.toSubNegMonoid.{u2} H _inst_4)))) (AddMonoidHomClass.toAddHomClass.{u3, u1, u2} F G H (AddMonoid.toAddZeroClass.{u1} G (SubNegMonoid.toAddMonoid.{u1} G (AddGroup.toSubNegMonoid.{u1} G _inst_3))) (AddMonoid.toAddZeroClass.{u2} H (SubNegMonoid.toAddMonoid.{u2} H (SubtractionMonoid.toSubNegMonoid.{u2} H _inst_4))) _inst_5))) f (SMul.smul.{0, u1} Int G (SubNegMonoid.SMulInt.{u1} G (AddGroup.toSubNegMonoid.{u1} G _inst_3)) n g)) (SMul.smul.{0, u2} Int H (SubNegMonoid.SMulInt.{u2} H (SubtractionMonoid.toSubNegMonoid.{u2} H _inst_4)) n (coeFn.{succ u3, max (succ u1) (succ u2)} F (fun (_x : F) => G -> H) (FunLike.hasCoeToFun.{succ u3, succ u1, succ u2} F G (fun (_x : G) => H) (AddHomClass.toFunLike.{u3, u1, u2} F G H (AddZeroClass.toHasAdd.{u1} G (AddMonoid.toAddZeroClass.{u1} G (SubNegMonoid.toAddMonoid.{u1} G (AddGroup.toSubNegMonoid.{u1} G _inst_3)))) (AddZeroClass.toHasAdd.{u2} H (AddMonoid.toAddZeroClass.{u2} H (SubNegMonoid.toAddMonoid.{u2} H (SubtractionMonoid.toSubNegMonoid.{u2} H _inst_4)))) (AddMonoidHomClass.toAddHomClass.{u3, u1, u2} F G H (AddMonoid.toAddZeroClass.{u1} G (SubNegMonoid.toAddMonoid.{u1} G (AddGroup.toSubNegMonoid.{u1} G _inst_3))) (AddMonoid.toAddZeroClass.{u2} H (SubNegMonoid.toAddMonoid.{u2} H (SubtractionMonoid.toSubNegMonoid.{u2} H _inst_4))) _inst_5))) f g))
-but is expected to have type
-  forall {G : Type.{u3}} {H : Type.{u2}} {F : Type.{u1}} [_inst_3 : AddGroup.{u3} G] [_inst_4 : SubtractionMonoid.{u2} H] [_inst_5 : AddMonoidHomClass.{u1, u3, u2} F G H (AddMonoid.toAddZeroClass.{u3} G (SubNegMonoid.toAddMonoid.{u3} G (AddGroup.toSubNegMonoid.{u3} G _inst_3))) (AddMonoid.toAddZeroClass.{u2} H (SubNegMonoid.toAddMonoid.{u2} H (SubtractionMonoid.toSubNegMonoid.{u2} H _inst_4)))] (f : F) (n : Int) (g : G), Eq.{succ u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : G) => H) (HSMul.hSMul.{0, u3, u3} Int G G (instHSMul.{0, u3} Int G (SubNegMonoid.SMulInt.{u3} G (AddGroup.toSubNegMonoid.{u3} G _inst_3))) n g)) (FunLike.coe.{succ u1, succ u3, succ u2} F G (fun (_x : G) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : G) => H) _x) (AddHomClass.toFunLike.{u1, u3, u2} F G H (AddZeroClass.toAdd.{u3} G (AddMonoid.toAddZeroClass.{u3} G (SubNegMonoid.toAddMonoid.{u3} G (AddGroup.toSubNegMonoid.{u3} G _inst_3)))) (AddZeroClass.toAdd.{u2} H (AddMonoid.toAddZeroClass.{u2} H (SubNegMonoid.toAddMonoid.{u2} H (SubtractionMonoid.toSubNegMonoid.{u2} H _inst_4)))) (AddMonoidHomClass.toAddHomClass.{u1, u3, u2} F G H (AddMonoid.toAddZeroClass.{u3} G (SubNegMonoid.toAddMonoid.{u3} G (AddGroup.toSubNegMonoid.{u3} G _inst_3))) (AddMonoid.toAddZeroClass.{u2} H (SubNegMonoid.toAddMonoid.{u2} H (SubtractionMonoid.toSubNegMonoid.{u2} H _inst_4))) _inst_5)) f (HSMul.hSMul.{0, u3, u3} Int G G (instHSMul.{0, u3} Int G (SubNegMonoid.SMulInt.{u3} G (AddGroup.toSubNegMonoid.{u3} G _inst_3))) n g)) (HSMul.hSMul.{0, u2, u2} Int ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : G) => H) g) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : G) => H) g) (instHSMul.{0, u2} Int ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : G) => H) g) (SubNegMonoid.SMulInt.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : G) => H) g) (SubtractionMonoid.toSubNegMonoid.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : G) => H) g) _inst_4))) n (FunLike.coe.{succ u1, succ u3, succ u2} F G (fun (_x : G) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : G) => H) _x) (AddHomClass.toFunLike.{u1, u3, u2} F G H (AddZeroClass.toAdd.{u3} G (AddMonoid.toAddZeroClass.{u3} G (SubNegMonoid.toAddMonoid.{u3} G (AddGroup.toSubNegMonoid.{u3} G _inst_3)))) (AddZeroClass.toAdd.{u2} H (AddMonoid.toAddZeroClass.{u2} H (SubNegMonoid.toAddMonoid.{u2} H (SubtractionMonoid.toSubNegMonoid.{u2} H _inst_4)))) (AddMonoidHomClass.toAddHomClass.{u1, u3, u2} F G H (AddMonoid.toAddZeroClass.{u3} G (SubNegMonoid.toAddMonoid.{u3} G (AddGroup.toSubNegMonoid.{u3} G _inst_3))) (AddMonoid.toAddZeroClass.{u2} H (SubNegMonoid.toAddMonoid.{u2} H (SubtractionMonoid.toSubNegMonoid.{u2} H _inst_4))) _inst_5)) f g))
-Case conversion may be inaccurate. Consider using '#align map_zsmul map_zsmulₓ'. -/
 /-- Additive group homomorphisms preserve integer scaling. -/
 theorem map_zsmul [AddGroup G] [SubtractionMonoid H] [AddMonoidHomClass F G H] (f : F) (n : ℤ)
     (g : G) : f (n • g) = n • f g :=
@@ -662,12 +542,6 @@ instance [MonoidWithZeroHomClass F M N] : CoeTC F (M →*₀ N) :=
       map_zero' := map_zero f
       map_mul' := map_mul f }⟩
 
-/- warning: monoid_with_zero_hom.coe_coe -> MonoidWithZeroHom.coe_coe is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} {N : Type.{u2}} {F : Type.{u3}} [_inst_1 : MulZeroOneClass.{u1} M] [_inst_2 : MulZeroOneClass.{u2} N] [_inst_3 : MonoidWithZeroHomClass.{u3, u1, u2} F M N _inst_1 _inst_2] (f : F), Eq.{max (succ u1) (succ u2)} ((fun (_x : MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) ((fun (a : Type.{u3}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{succ u3, max (succ u2) (succ u1)} a b] => self.0) F (MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) (HasLiftT.mk.{succ u3, max (succ u2) (succ u1)} F (MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) (CoeTCₓ.coe.{succ u3, max (succ u2) (succ u1)} F (MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) (MonoidWithZeroHom.hasCoeT.{u1, u2, u3} M N F _inst_1 _inst_2 _inst_3))) f)) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (FunLike.hasCoeToFun.{max (succ u2) (succ u1), succ u1, succ u2} (MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) M (fun (_x : M) => N) (MulHomClass.toFunLike.{max u2 u1, u1, u2} (MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) M N (MulOneClass.toHasMul.{u1} M (MulZeroOneClass.toMulOneClass.{u1} M _inst_1)) (MulOneClass.toHasMul.{u2} N (MulZeroOneClass.toMulOneClass.{u2} N _inst_2)) (MonoidHomClass.toMulHomClass.{max u2 u1, u1, u2} (MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) M N (MulZeroOneClass.toMulOneClass.{u1} M _inst_1) (MulZeroOneClass.toMulOneClass.{u2} N _inst_2) (MonoidWithZeroHomClass.toMonoidHomClass.{max u2 u1, u1, u2} (MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidWithZeroHom.monoidWithZeroHomClass.{u1, u2} M N _inst_1 _inst_2))))) ((fun (a : Type.{u3}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{succ u3, max (succ u2) (succ u1)} a b] => self.0) F (MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) (HasLiftT.mk.{succ u3, max (succ u2) (succ u1)} F (MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) (CoeTCₓ.coe.{succ u3, max (succ u2) (succ u1)} F (MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) (MonoidWithZeroHom.hasCoeT.{u1, u2, u3} M N F _inst_1 _inst_2 _inst_3))) f)) (coeFn.{succ u3, max (succ u1) (succ u2)} F (fun (_x : F) => M -> N) (FunLike.hasCoeToFun.{succ u3, succ u1, succ u2} F M (fun (_x : M) => N) (MulHomClass.toFunLike.{u3, u1, u2} F M N (MulOneClass.toHasMul.{u1} M (MulZeroOneClass.toMulOneClass.{u1} M _inst_1)) (MulOneClass.toHasMul.{u2} N (MulZeroOneClass.toMulOneClass.{u2} N _inst_2)) (MonoidHomClass.toMulHomClass.{u3, u1, u2} F M N (MulZeroOneClass.toMulOneClass.{u1} M _inst_1) (MulZeroOneClass.toMulOneClass.{u2} N _inst_2) (MonoidWithZeroHomClass.toMonoidHomClass.{u3, u1, u2} F M N _inst_1 _inst_2 _inst_3)))) f)
-but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} {F : Type.{u3}} [_inst_1 : MulZeroOneClass.{u2} M] [_inst_2 : MulZeroOneClass.{u1} N] [_inst_3 : MonoidWithZeroHomClass.{u3, u2, u1} F M N _inst_1 _inst_2] (f : F), Eq.{max (succ u2) (succ u1)} (forall (a : M), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) a) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M (MulZeroOneClass.toMulOneClass.{u2} M _inst_1)) (MulOneClass.toMul.{u1} N (MulZeroOneClass.toMulOneClass.{u1} N _inst_2)) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulZeroOneClass.toMulOneClass.{u2} M _inst_1) (MulZeroOneClass.toMulOneClass.{u1} N _inst_2) (MonoidWithZeroHomClass.toMonoidHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidWithZeroHom.monoidWithZeroHomClass.{u2, u1} M N _inst_1 _inst_2)))) (MonoidWithZeroHomClass.toMonoidWithZeroHom.{u2, u1, u3} M N F _inst_1 _inst_2 _inst_3 f)) (FunLike.coe.{succ u3, succ u2, succ u1} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{u3, u2, u1} F M N (MulOneClass.toMul.{u2} M (MulZeroOneClass.toMulOneClass.{u2} M _inst_1)) (MulOneClass.toMul.{u1} N (MulZeroOneClass.toMulOneClass.{u1} N _inst_2)) (MonoidHomClass.toMulHomClass.{u3, u2, u1} F M N (MulZeroOneClass.toMulOneClass.{u2} M _inst_1) (MulZeroOneClass.toMulOneClass.{u1} N _inst_2) (MonoidWithZeroHomClass.toMonoidHomClass.{u3, u2, u1} F M N _inst_1 _inst_2 _inst_3))) f)
-Case conversion may be inaccurate. Consider using '#align monoid_with_zero_hom.coe_coe MonoidWithZeroHom.coe_coeₓ'. -/
 @[simp]
 theorem MonoidWithZeroHom.coe_coe [MonoidWithZeroHomClass F M N] (f : F) :
     ((f : M →*₀ N) : M → N) = f :=
@@ -682,12 +556,6 @@ section Coes
 /-! Bundled morphisms can be down-cast to weaker bundlings -/
 
 
-/- warning: monoid_hom.has_coe_to_one_hom -> MonoidHom.coeToOneHom is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} {N : Type.{u2}} {mM : MulOneClass.{u1} M} {mN : MulOneClass.{u2} N}, Coe.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (MonoidHom.{u1, u2} M N mM mN) (OneHom.{u1, u2} M N (MulOneClass.toHasOne.{u1} M mM) (MulOneClass.toHasOne.{u2} N mN))
-but is expected to have type
-  forall {M : Type.{u1}} {N : Type.{u2}} [mM : MulOneClass.{u1} M] [mN : MulOneClass.{u2} N], Coe.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (MonoidHom.{u1, u2} M N mM mN) (OneHom.{u1, u2} M N (MulOneClass.toOne.{u1} M mM) (MulOneClass.toOne.{u2} N mN))
-Case conversion may be inaccurate. Consider using '#align monoid_hom.has_coe_to_one_hom MonoidHom.coeToOneHomₓ'. -/
 @[to_additive]
 instance MonoidHom.coeToOneHom {mM : MulOneClass M} {mN : MulOneClass N} :
     Coe (M →* N) (OneHom M N) :=
@@ -695,12 +563,6 @@ instance MonoidHom.coeToOneHom {mM : MulOneClass M} {mN : MulOneClass N} :
 #align monoid_hom.has_coe_to_one_hom MonoidHom.coeToOneHom
 #align add_monoid_hom.has_coe_to_zero_hom AddMonoidHom.coeToZeroHom
 
-/- warning: monoid_hom.has_coe_to_mul_hom -> MonoidHom.coeToMulHom is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} {N : Type.{u2}} {mM : MulOneClass.{u1} M} {mN : MulOneClass.{u2} N}, Coe.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (MonoidHom.{u1, u2} M N mM mN) (MulHom.{u1, u2} M N (MulOneClass.toHasMul.{u1} M mM) (MulOneClass.toHasMul.{u2} N mN))
-but is expected to have type
-  forall {M : Type.{u1}} {N : Type.{u2}} [mM : MulOneClass.{u1} M] [mN : MulOneClass.{u2} N], Coe.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (MonoidHom.{u1, u2} M N mM mN) (MulHom.{u1, u2} M N (MulOneClass.toMul.{u1} M mM) (MulOneClass.toMul.{u2} N mN))
-Case conversion may be inaccurate. Consider using '#align monoid_hom.has_coe_to_mul_hom MonoidHom.coeToMulHomₓ'. -/
 @[to_additive]
 instance MonoidHom.coeToMulHom {mM : MulOneClass M} {mN : MulOneClass N} : Coe (M →* N) (M →ₙ* N) :=
   ⟨MonoidHom.toMulHom⟩
@@ -714,12 +576,6 @@ instance MonoidWithZeroHom.coeToMonoidHom {mM : MulZeroOneClass M} {mN : MulZero
 #align monoid_with_zero_hom.has_coe_to_monoid_hom MonoidWithZeroHom.coeToMonoidHom
 -/
 
-/- warning: monoid_with_zero_hom.has_coe_to_zero_hom -> MonoidWithZeroHom.coeToZeroHom is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} {N : Type.{u2}} {mM : MulZeroOneClass.{u1} M} {mN : MulZeroOneClass.{u2} N}, Coe.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (MonoidWithZeroHom.{u1, u2} M N mM mN) (ZeroHom.{u1, u2} M N (MulZeroClass.toHasZero.{u1} M (MulZeroOneClass.toMulZeroClass.{u1} M mM)) (MulZeroClass.toHasZero.{u2} N (MulZeroOneClass.toMulZeroClass.{u2} N mN)))
-but is expected to have type
-  forall {M : Type.{u1}} {N : Type.{u2}} [mM : MulZeroOneClass.{u1} M] [mN : MulZeroOneClass.{u2} N], Coe.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (MonoidWithZeroHom.{u1, u2} M N mM mN) (ZeroHom.{u1, u2} M N (MulZeroOneClass.toZero.{u1} M mM) (MulZeroOneClass.toZero.{u2} N mN))
-Case conversion may be inaccurate. Consider using '#align monoid_with_zero_hom.has_coe_to_zero_hom MonoidWithZeroHom.coeToZeroHomₓ'. -/
 instance MonoidWithZeroHom.coeToZeroHom {mM : MulZeroOneClass M} {mN : MulZeroOneClass N} :
     Coe (M →*₀ N) (ZeroHom M N) :=
   ⟨MonoidWithZeroHom.toZeroHom⟩
@@ -787,36 +643,18 @@ initialize_simps_projections MonoidHom (toFun → apply)
 
 initialize_simps_projections MonoidWithZeroHom (toFun → apply)
 
-/- warning: one_hom.to_fun_eq_coe -> OneHom.toFun_eq_coe is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : One.{u1} M] [_inst_2 : One.{u2} N] (f : OneHom.{u1, u2} M N _inst_1 _inst_2), Eq.{max (succ u1) (succ u2)} (M -> N) (OneHom.toFun.{u1, u2} M N _inst_1 _inst_2 f) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (OneHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : OneHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (OneHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f)
-but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : One.{u2} M] [_inst_2 : One.{u1} N] (f : OneHom.{u2, u1} M N _inst_1 _inst_2), Eq.{max (succ u2) (succ u1)} (M -> N) (OneHom.toFun.{u2, u1} M N _inst_1 _inst_2 f) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (OneHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1264 : M) => N) _x) (OneHomClass.toFunLike.{max u2 u1, u2, u1} (OneHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (OneHom.oneHomClass.{u2, u1} M N _inst_1 _inst_2)) f)
-Case conversion may be inaccurate. Consider using '#align one_hom.to_fun_eq_coe OneHom.toFun_eq_coeₓ'. -/
 @[simp, to_additive]
 theorem OneHom.toFun_eq_coe [One M] [One N] (f : OneHom M N) : f.toFun = f :=
   rfl
 #align one_hom.to_fun_eq_coe OneHom.toFun_eq_coe
 #align zero_hom.to_fun_eq_coe ZeroHom.toFun_eq_coe
 
-/- warning: mul_hom.to_fun_eq_coe -> MulHom.toFun_eq_coe is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] (f : MulHom.{u1, u2} M N _inst_1 _inst_2), Eq.{max (succ u1) (succ u2)} (M -> N) (MulHom.toFun.{u1, u2} M N _inst_1 _inst_2 f) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MulHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MulHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MulHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f)
-but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : Mul.{u2} M] [_inst_2 : Mul.{u1} N] (f : MulHom.{u2, u1} M N _inst_1 _inst_2), Eq.{max (succ u2) (succ u1)} (M -> N) (MulHom.toFun.{u2, u1} M N _inst_1 _inst_2 f) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) f)
-Case conversion may be inaccurate. Consider using '#align mul_hom.to_fun_eq_coe MulHom.toFun_eq_coeₓ'. -/
 @[simp, to_additive]
 theorem MulHom.toFun_eq_coe [Mul M] [Mul N] (f : M →ₙ* N) : f.toFun = f :=
   rfl
 #align mul_hom.to_fun_eq_coe MulHom.toFun_eq_coe
 #align add_hom.to_fun_eq_coe AddHom.toFun_eq_coe
 
-/- warning: monoid_hom.to_fun_eq_coe -> MonoidHom.toFun_eq_coe is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N] (f : MonoidHom.{u1, u2} M N _inst_1 _inst_2), Eq.{max (succ u1) (succ u2)} (M -> N) (MonoidHom.toFun.{u1, u2} M N _inst_1 _inst_2 f) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MonoidHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MonoidHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f)
-but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u1} N] (f : MonoidHom.{u2, u1} M N _inst_1 _inst_2), Eq.{max (succ u2) (succ u1)} (M -> N) (OneHom.toFun.{u2, u1} M N (MulOneClass.toOne.{u2} M _inst_1) (MulOneClass.toOne.{u1} N _inst_2) (MonoidHom.toOneHom.{u2, u1} M N _inst_1 _inst_2 f)) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2))) f)
-Case conversion may be inaccurate. Consider using '#align monoid_hom.to_fun_eq_coe MonoidHom.toFun_eq_coeₓ'. -/
 @[simp, to_additive]
 theorem MonoidHom.toFun_eq_coe [MulOneClass M] [MulOneClass N] (f : M →* N) : f.toFun = f :=
   rfl
@@ -829,36 +667,18 @@ theorem MonoidWithZeroHom.toFun_eq_coe [MulZeroOneClass M] [MulZeroOneClass N] (
   rfl
 #align monoid_with_zero_hom.to_fun_eq_coe MonoidWithZeroHom.toFun_eq_coe
 
-/- warning: one_hom.coe_mk -> OneHom.coe_mk is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : One.{u1} M] [_inst_2 : One.{u2} N] (f : M -> N) (h1 : Eq.{succ u2} N (f (OfNat.ofNat.{u1} M 1 (OfNat.mk.{u1} M 1 (One.one.{u1} M _inst_1)))) (OfNat.ofNat.{u2} N 1 (OfNat.mk.{u2} N 1 (One.one.{u2} N _inst_2)))), Eq.{max (succ u1) (succ u2)} ((fun (_x : OneHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (OneHom.mk.{u1, u2} M N _inst_1 _inst_2 f h1)) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (OneHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : OneHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (OneHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) (OneHom.mk.{u1, u2} M N _inst_1 _inst_2 f h1)) f
-but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : One.{u2} M] [_inst_2 : One.{u1} N] (f : M -> N) (h1 : Eq.{succ u1} N (f (OfNat.ofNat.{u2} M 1 (One.toOfNat1.{u2} M _inst_1))) (OfNat.ofNat.{u1} N 1 (One.toOfNat1.{u1} N _inst_2))), Eq.{max (succ u2) (succ u1)} (forall (a : M), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1264 : M) => N) a) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (OneHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1264 : M) => N) _x) (OneHomClass.toFunLike.{max u2 u1, u2, u1} (OneHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (OneHom.oneHomClass.{u2, u1} M N _inst_1 _inst_2)) (OneHom.mk.{u2, u1} M N _inst_1 _inst_2 f h1)) f
-Case conversion may be inaccurate. Consider using '#align one_hom.coe_mk OneHom.coe_mkₓ'. -/
 @[simp, to_additive]
 theorem OneHom.coe_mk [One M] [One N] (f : M → N) (h1) : (OneHom.mk f h1 : M → N) = f :=
   rfl
 #align one_hom.coe_mk OneHom.coe_mk
 #align zero_hom.coe_mk ZeroHom.coe_mk
 
-/- warning: mul_hom.coe_mk -> MulHom.coe_mk is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] (f : M -> N) (hmul : forall (x : M) (y : M), Eq.{succ u2} N (f (HMul.hMul.{u1, u1, u1} M M M (instHMul.{u1} M _inst_1) x y)) (HMul.hMul.{u2, u2, u2} N N N (instHMul.{u2} N _inst_2) (f x) (f y))), Eq.{max (succ u1) (succ u2)} ((fun (_x : MulHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MulHom.mk.{u1, u2} M N _inst_1 _inst_2 f hmul)) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MulHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MulHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MulHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) (MulHom.mk.{u1, u2} M N _inst_1 _inst_2 f hmul)) f
-but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : Mul.{u2} M] [_inst_2 : Mul.{u1} N] (f : M -> N) (hmul : forall (x : M) (y : M), Eq.{succ u1} N (f (HMul.hMul.{u2, u2, u2} M M M (instHMul.{u2} M _inst_1) x y)) (HMul.hMul.{u1, u1, u1} N N N (instHMul.{u1} N _inst_2) (f x) (f y))), Eq.{max (succ u2) (succ u1)} (forall (a : M), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) a) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) (MulHom.mk.{u2, u1} M N _inst_1 _inst_2 f hmul)) f
-Case conversion may be inaccurate. Consider using '#align mul_hom.coe_mk MulHom.coe_mkₓ'. -/
 @[simp, to_additive]
 theorem MulHom.coe_mk [Mul M] [Mul N] (f : M → N) (hmul) : (MulHom.mk f hmul : M → N) = f :=
   rfl
 #align mul_hom.coe_mk MulHom.coe_mk
 #align add_hom.coe_mk AddHom.coe_mk
 
-/- warning: monoid_hom.coe_mk -> MonoidHom.coe_mk is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N] (f : M -> N) (h1 : Eq.{succ u2} N (f (OfNat.ofNat.{u1} M 1 (OfNat.mk.{u1} M 1 (One.one.{u1} M (MulOneClass.toHasOne.{u1} M _inst_1))))) (OfNat.ofNat.{u2} N 1 (OfNat.mk.{u2} N 1 (One.one.{u2} N (MulOneClass.toHasOne.{u2} N _inst_2))))) (hmul : forall (x : M) (y : M), Eq.{succ u2} N (f (HMul.hMul.{u1, u1, u1} M M M (instHMul.{u1} M (MulOneClass.toHasMul.{u1} M _inst_1)) x y)) (HMul.hMul.{u2, u2, u2} N N N (instHMul.{u2} N (MulOneClass.toHasMul.{u2} N _inst_2)) (f x) (f y))), Eq.{max (succ u1) (succ u2)} ((fun (_x : MonoidHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MonoidHom.mk.{u1, u2} M N _inst_1 _inst_2 f h1 hmul)) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MonoidHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MonoidHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.mk.{u1, u2} M N _inst_1 _inst_2 f h1 hmul)) f
-but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u1} N] (f : OneHom.{u2, u1} M N (MulOneClass.toOne.{u2} M _inst_1) (MulOneClass.toOne.{u1} N _inst_2)) (h1 : forall (x : M) (y : M), Eq.{succ u1} N (OneHom.toFun.{u2, u1} M N (MulOneClass.toOne.{u2} M _inst_1) (MulOneClass.toOne.{u1} N _inst_2) f (HMul.hMul.{u2, u2, u2} M M M (instHMul.{u2} M (MulOneClass.toMul.{u2} M _inst_1)) x y)) (HMul.hMul.{u1, u1, u1} N N N (instHMul.{u1} N (MulOneClass.toMul.{u1} N _inst_2)) (OneHom.toFun.{u2, u1} M N (MulOneClass.toOne.{u2} M _inst_1) (MulOneClass.toOne.{u1} N _inst_2) f x) (OneHom.toFun.{u2, u1} M N (MulOneClass.toOne.{u2} M _inst_1) (MulOneClass.toOne.{u1} N _inst_2) f y))), Eq.{max (succ u2) (succ u1)} (forall (a : M), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) a) (FunLike.coe.{max (succ u1) (succ u2), succ u2, succ u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M (fun (a : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) a) (MulHomClass.toFunLike.{max u1 u2, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2) (MonoidHomClass.toMulHomClass.{max u1 u2, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2))) (MonoidHom.mk.{u2, u1} M N _inst_1 _inst_2 f h1)) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (OneHom.{u2, u1} M N (MulOneClass.toOne.{u2} M _inst_1) (MulOneClass.toOne.{u1} N _inst_2)) M (fun (a : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1264 : M) => N) a) (OneHomClass.toFunLike.{max u2 u1, u2, u1} (OneHom.{u2, u1} M N (MulOneClass.toOne.{u2} M _inst_1) (MulOneClass.toOne.{u1} N _inst_2)) M N (MulOneClass.toOne.{u2} M _inst_1) (MulOneClass.toOne.{u1} N _inst_2) (OneHom.oneHomClass.{u2, u1} M N (MulOneClass.toOne.{u2} M _inst_1) (MulOneClass.toOne.{u1} N _inst_2))) f)
-Case conversion may be inaccurate. Consider using '#align monoid_hom.coe_mk MonoidHom.coe_mkₓ'. -/
 @[simp, to_additive]
 theorem MonoidHom.coe_mk [MulOneClass M] [MulOneClass N] (f : M → N) (h1 hmul) :
     (MonoidHom.mk f h1 hmul : M → N) = f :=
@@ -866,24 +686,12 @@ theorem MonoidHom.coe_mk [MulOneClass M] [MulOneClass N] (f : M → N) (h1 hmul)
 #align monoid_hom.coe_mk MonoidHom.coe_mk
 #align add_monoid_hom.coe_mk AddMonoidHom.coe_mk
 
-/- warning: monoid_with_zero_hom.coe_mk -> MonoidWithZeroHom.coe_mk is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulZeroOneClass.{u1} M] [_inst_2 : MulZeroOneClass.{u2} N] (f : M -> N) (h0 : Eq.{succ u2} N (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} N 0 (OfNat.mk.{u2} N 0 (Zero.zero.{u2} N (MulZeroClass.toHasZero.{u2} N (MulZeroOneClass.toMulZeroClass.{u2} N _inst_2)))))) (h1 : Eq.{succ u2} N (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} N 1 (OfNat.mk.{u2} N 1 (One.one.{u2} N (MulOneClass.toHasOne.{u2} N (MulZeroOneClass.toMulOneClass.{u2} N _inst_2)))))) (hmul : forall (x : M) (y : M), Eq.{succ u2} N (f (HMul.hMul.{u1, u1, u1} M M M (instHMul.{u1} M (MulOneClass.toHasMul.{u1} M (MulZeroOneClass.toMulOneClass.{u1} M _inst_1))) x y)) (HMul.hMul.{u2, u2, u2} N N N (instHMul.{u2} N (MulOneClass.toHasMul.{u2} N (MulZeroOneClass.toMulOneClass.{u2} N _inst_2))) (f x) (f y))), Eq.{max (succ u1) (succ u2)} ((fun (_x : MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MonoidWithZeroHom.mk.{u1, u2} M N _inst_1 _inst_2 f h0 h1 hmul)) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MonoidWithZeroHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) (MonoidWithZeroHom.mk.{u1, u2} M N _inst_1 _inst_2 f h0 h1 hmul)) f
-but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : MulZeroOneClass.{u2} M] [_inst_2 : MulZeroOneClass.{u1} N] (f : ZeroHom.{u2, u1} M N (MulZeroOneClass.toZero.{u2} M _inst_1) (MulZeroOneClass.toZero.{u1} N _inst_2)) (h0 : Eq.{succ u1} N (ZeroHom.toFun.{u2, u1} M N (MulZeroOneClass.toZero.{u2} M _inst_1) (MulZeroOneClass.toZero.{u1} N _inst_2) f (OfNat.ofNat.{u2} M 1 (One.toOfNat1.{u2} M (MulOneClass.toOne.{u2} M (MulZeroOneClass.toMulOneClass.{u2} M _inst_1))))) (OfNat.ofNat.{u1} N 1 (One.toOfNat1.{u1} N (MulOneClass.toOne.{u1} N (MulZeroOneClass.toMulOneClass.{u1} N _inst_2))))) (h1 : forall (x : M) (y : M), Eq.{succ u1} N (ZeroHom.toFun.{u2, u1} M N (MulZeroOneClass.toZero.{u2} M _inst_1) (MulZeroOneClass.toZero.{u1} N _inst_2) f (HMul.hMul.{u2, u2, u2} M M M (instHMul.{u2} M (MulOneClass.toMul.{u2} M (MulZeroOneClass.toMulOneClass.{u2} M _inst_1))) x y)) (HMul.hMul.{u1, u1, u1} N N N (instHMul.{u1} N (MulOneClass.toMul.{u1} N (MulZeroOneClass.toMulOneClass.{u1} N _inst_2))) (ZeroHom.toFun.{u2, u1} M N (MulZeroOneClass.toZero.{u2} M _inst_1) (MulZeroOneClass.toZero.{u1} N _inst_2) f x) (ZeroHom.toFun.{u2, u1} M N (MulZeroOneClass.toZero.{u2} M _inst_1) (MulZeroOneClass.toZero.{u1} N _inst_2) f y))), Eq.{max (succ u2) (succ u1)} (forall (a : M), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) a) (FunLike.coe.{max (succ u1) (succ u2), succ u2, succ u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M (fun (a : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) a) (MulHomClass.toFunLike.{max u1 u2, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M (MulZeroOneClass.toMulOneClass.{u2} M _inst_1)) (MulOneClass.toMul.{u1} N (MulZeroOneClass.toMulOneClass.{u1} N _inst_2)) (MonoidHomClass.toMulHomClass.{max u1 u2, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulZeroOneClass.toMulOneClass.{u2} M _inst_1) (MulZeroOneClass.toMulOneClass.{u1} N _inst_2) (MonoidWithZeroHomClass.toMonoidHomClass.{max u1 u2, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidWithZeroHom.monoidWithZeroHomClass.{u2, u1} M N _inst_1 _inst_2)))) (MonoidWithZeroHom.mk.{u2, u1} M N _inst_1 _inst_2 f h0 h1)) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (ZeroHom.{u2, u1} M N (MulZeroOneClass.toZero.{u2} M _inst_1) (MulZeroOneClass.toZero.{u1} N _inst_2)) M (fun (a : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.124 : M) => N) a) (ZeroHomClass.toFunLike.{max u2 u1, u2, u1} (ZeroHom.{u2, u1} M N (MulZeroOneClass.toZero.{u2} M _inst_1) (MulZeroOneClass.toZero.{u1} N _inst_2)) M N (MulZeroOneClass.toZero.{u2} M _inst_1) (MulZeroOneClass.toZero.{u1} N _inst_2) (ZeroHom.zeroHomClass.{u2, u1} M N (MulZeroOneClass.toZero.{u2} M _inst_1) (MulZeroOneClass.toZero.{u1} N _inst_2))) f)
-Case conversion may be inaccurate. Consider using '#align monoid_with_zero_hom.coe_mk MonoidWithZeroHom.coe_mkₓ'. -/
 @[simp]
 theorem MonoidWithZeroHom.coe_mk [MulZeroOneClass M] [MulZeroOneClass N] (f : M → N) (h0 h1 hmul) :
     (MonoidWithZeroHom.mk f h0 h1 hmul : M → N) = f :=
   rfl
 #align monoid_with_zero_hom.coe_mk MonoidWithZeroHom.coe_mk
 
-/- warning: monoid_hom.to_one_hom_coe -> MonoidHom.toOneHom_coe is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N] (f : MonoidHom.{u1, u2} M N _inst_1 _inst_2), Eq.{max (succ u1) (succ u2)} ((fun (_x : OneHom.{u1, u2} M N (MulOneClass.toHasOne.{u1} M _inst_1) (MulOneClass.toHasOne.{u2} N _inst_2)) => M -> N) (MonoidHom.toOneHom.{u1, u2} M N _inst_1 _inst_2 f)) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (OneHom.{u1, u2} M N (MulOneClass.toHasOne.{u1} M _inst_1) (MulOneClass.toHasOne.{u2} N _inst_2)) (fun (_x : OneHom.{u1, u2} M N (MulOneClass.toHasOne.{u1} M _inst_1) (MulOneClass.toHasOne.{u2} N _inst_2)) => M -> N) (OneHom.hasCoeToFun.{u1, u2} M N (MulOneClass.toHasOne.{u1} M _inst_1) (MulOneClass.toHasOne.{u2} N _inst_2)) (MonoidHom.toOneHom.{u1, u2} M N _inst_1 _inst_2 f)) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MonoidHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MonoidHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f)
-but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u1} N] (f : MonoidHom.{u2, u1} M N _inst_1 _inst_2), Eq.{max (succ u2) (succ u1)} (forall (a : M), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1264 : M) => N) a) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (OneHom.{u2, u1} M N (MulOneClass.toOne.{u2} M _inst_1) (MulOneClass.toOne.{u1} N _inst_2)) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1264 : M) => N) _x) (OneHomClass.toFunLike.{max u2 u1, u2, u1} (OneHom.{u2, u1} M N (MulOneClass.toOne.{u2} M _inst_1) (MulOneClass.toOne.{u1} N _inst_2)) M N (MulOneClass.toOne.{u2} M _inst_1) (MulOneClass.toOne.{u1} N _inst_2) (OneHom.oneHomClass.{u2, u1} M N (MulOneClass.toOne.{u2} M _inst_1) (MulOneClass.toOne.{u1} N _inst_2))) (MonoidHom.toOneHom.{u2, u1} M N _inst_1 _inst_2 f)) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2))) f)
-Case conversion may be inaccurate. Consider using '#align monoid_hom.to_one_hom_coe MonoidHom.toOneHom_coeₓ'. -/
 @[simp, to_additive]
 theorem MonoidHom.toOneHom_coe [MulOneClass M] [MulOneClass N] (f : M →* N) :
     (f.toOneHom : M → N) = f :=
@@ -891,12 +699,6 @@ theorem MonoidHom.toOneHom_coe [MulOneClass M] [MulOneClass N] (f : M →* N) :
 #align monoid_hom.to_one_hom_coe MonoidHom.toOneHom_coe
 #align add_monoid_hom.to_zero_hom_coe AddMonoidHom.toZeroHom_coe
 
-/- warning: monoid_hom.to_mul_hom_coe -> MonoidHom.toMulHom_coe is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N] (f : MonoidHom.{u1, u2} M N _inst_1 _inst_2), Eq.{max (succ u1) (succ u2)} ((fun (_x : MulHom.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) => M -> N) (MonoidHom.toMulHom.{u1, u2} M N _inst_1 _inst_2 f)) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MulHom.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (fun (_x : MulHom.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) => M -> N) (MulHom.hasCoeToFun.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.toMulHom.{u1, u2} M N _inst_1 _inst_2 f)) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MonoidHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MonoidHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f)
-but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u1} N] (f : MonoidHom.{u2, u1} M N _inst_1 _inst_2), Eq.{max (succ u2) (succ u1)} (M -> N) (MulHom.toFun.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2) (MonoidHom.toMulHom.{u2, u1} M N _inst_1 _inst_2 f)) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2))) f)
-Case conversion may be inaccurate. Consider using '#align monoid_hom.to_mul_hom_coe MonoidHom.toMulHom_coeₓ'. -/
 @[simp, to_additive]
 theorem MonoidHom.toMulHom_coe [MulOneClass M] [MulOneClass N] (f : M →* N) :
     (f.toMulHom : M → N) = f :=
@@ -904,72 +706,36 @@ theorem MonoidHom.toMulHom_coe [MulOneClass M] [MulOneClass N] (f : M →* N) :
 #align monoid_hom.to_mul_hom_coe MonoidHom.toMulHom_coe
 #align add_monoid_hom.to_add_hom_coe AddMonoidHom.toAddHom_coe
 
-/- warning: monoid_with_zero_hom.to_zero_hom_coe -> MonoidWithZeroHom.toZeroHom_coe is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulZeroOneClass.{u1} M] [_inst_2 : MulZeroOneClass.{u2} N] (f : MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2), Eq.{max (succ u1) (succ u2)} ((fun (_x : ZeroHom.{u1, u2} M N (MulZeroClass.toHasZero.{u1} M (MulZeroOneClass.toMulZeroClass.{u1} M _inst_1)) (MulZeroClass.toHasZero.{u2} N (MulZeroOneClass.toMulZeroClass.{u2} N _inst_2))) => M -> N) (MonoidWithZeroHom.toZeroHom.{u1, u2} M N _inst_1 _inst_2 f)) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (ZeroHom.{u1, u2} M N (MulZeroClass.toHasZero.{u1} M (MulZeroOneClass.toMulZeroClass.{u1} M _inst_1)) (MulZeroClass.toHasZero.{u2} N (MulZeroOneClass.toMulZeroClass.{u2} N _inst_2))) (fun (_x : ZeroHom.{u1, u2} M N (MulZeroClass.toHasZero.{u1} M (MulZeroOneClass.toMulZeroClass.{u1} M _inst_1)) (MulZeroClass.toHasZero.{u2} N (MulZeroOneClass.toMulZeroClass.{u2} N _inst_2))) => M -> N) (ZeroHom.hasCoeToFun.{u1, u2} M N (MulZeroClass.toHasZero.{u1} M (MulZeroOneClass.toMulZeroClass.{u1} M _inst_1)) (MulZeroClass.toHasZero.{u2} N (MulZeroOneClass.toMulZeroClass.{u2} N _inst_2))) (MonoidWithZeroHom.toZeroHom.{u1, u2} M N _inst_1 _inst_2 f)) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MonoidWithZeroHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f)
-but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : MulZeroOneClass.{u2} M] [_inst_2 : MulZeroOneClass.{u1} N] (f : MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2), Eq.{max (succ u2) (succ u1)} (forall (a : M), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.124 : M) => N) a) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (ZeroHom.{u2, u1} M N (MulZeroOneClass.toZero.{u2} M _inst_1) (MulZeroOneClass.toZero.{u1} N _inst_2)) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.124 : M) => N) _x) (ZeroHomClass.toFunLike.{max u2 u1, u2, u1} (ZeroHom.{u2, u1} M N (MulZeroOneClass.toZero.{u2} M _inst_1) (MulZeroOneClass.toZero.{u1} N _inst_2)) M N (MulZeroOneClass.toZero.{u2} M _inst_1) (MulZeroOneClass.toZero.{u1} N _inst_2) (ZeroHom.zeroHomClass.{u2, u1} M N (MulZeroOneClass.toZero.{u2} M _inst_1) (MulZeroOneClass.toZero.{u1} N _inst_2))) (MonoidWithZeroHom.toZeroHom.{u2, u1} M N _inst_1 _inst_2 f)) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M (MulZeroOneClass.toMulOneClass.{u2} M _inst_1)) (MulOneClass.toMul.{u1} N (MulZeroOneClass.toMulOneClass.{u1} N _inst_2)) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulZeroOneClass.toMulOneClass.{u2} M _inst_1) (MulZeroOneClass.toMulOneClass.{u1} N _inst_2) (MonoidWithZeroHomClass.toMonoidHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidWithZeroHom.monoidWithZeroHomClass.{u2, u1} M N _inst_1 _inst_2)))) f)
-Case conversion may be inaccurate. Consider using '#align monoid_with_zero_hom.to_zero_hom_coe MonoidWithZeroHom.toZeroHom_coeₓ'. -/
 @[simp]
 theorem MonoidWithZeroHom.toZeroHom_coe [MulZeroOneClass M] [MulZeroOneClass N] (f : M →*₀ N) :
     (f.toZeroHom : M → N) = f :=
   rfl
 #align monoid_with_zero_hom.to_zero_hom_coe MonoidWithZeroHom.toZeroHom_coe
 
-/- warning: monoid_with_zero_hom.to_monoid_hom_coe -> MonoidWithZeroHom.toMonoidHom_coe is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulZeroOneClass.{u1} M] [_inst_2 : MulZeroOneClass.{u2} N] (f : MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2), Eq.{max (succ u1) (succ u2)} ((fun (_x : MonoidHom.{u1, u2} M N (MulZeroOneClass.toMulOneClass.{u1} M _inst_1) (MulZeroOneClass.toMulOneClass.{u2} N _inst_2)) => M -> N) (MonoidWithZeroHom.toMonoidHom.{u1, u2} M N _inst_1 _inst_2 f)) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} M N (MulZeroOneClass.toMulOneClass.{u1} M _inst_1) (MulZeroOneClass.toMulOneClass.{u2} N _inst_2)) (fun (_x : MonoidHom.{u1, u2} M N (MulZeroOneClass.toMulOneClass.{u1} M _inst_1) (MulZeroOneClass.toMulOneClass.{u2} N _inst_2)) => M -> N) (MonoidHom.hasCoeToFun.{u1, u2} M N (MulZeroOneClass.toMulOneClass.{u1} M _inst_1) (MulZeroOneClass.toMulOneClass.{u2} N _inst_2)) (MonoidWithZeroHom.toMonoidHom.{u1, u2} M N _inst_1 _inst_2 f)) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MonoidWithZeroHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f)
-but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : MulZeroOneClass.{u2} M] [_inst_2 : MulZeroOneClass.{u1} N] (f : MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2), Eq.{max (succ u2) (succ u1)} (M -> N) (OneHom.toFun.{u2, u1} M N (MulOneClass.toOne.{u2} M (MulZeroOneClass.toMulOneClass.{u2} M _inst_1)) (MulOneClass.toOne.{u1} N (MulZeroOneClass.toMulOneClass.{u1} N _inst_2)) (MonoidHom.toOneHom.{u2, u1} M N (MulZeroOneClass.toMulOneClass.{u2} M _inst_1) (MulZeroOneClass.toMulOneClass.{u1} N _inst_2) (MonoidWithZeroHom.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 f))) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M (MulZeroOneClass.toMulOneClass.{u2} M _inst_1)) (MulOneClass.toMul.{u1} N (MulZeroOneClass.toMulOneClass.{u1} N _inst_2)) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulZeroOneClass.toMulOneClass.{u2} M _inst_1) (MulZeroOneClass.toMulOneClass.{u1} N _inst_2) (MonoidWithZeroHomClass.toMonoidHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidWithZeroHom.monoidWithZeroHomClass.{u2, u1} M N _inst_1 _inst_2)))) f)
-Case conversion may be inaccurate. Consider using '#align monoid_with_zero_hom.to_monoid_hom_coe MonoidWithZeroHom.toMonoidHom_coeₓ'. -/
 @[simp]
 theorem MonoidWithZeroHom.toMonoidHom_coe [MulZeroOneClass M] [MulZeroOneClass N] (f : M →*₀ N) :
     (f.toMonoidHom : M → N) = f :=
   rfl
 #align monoid_with_zero_hom.to_monoid_hom_coe MonoidWithZeroHom.toMonoidHom_coe
 
-/- warning: one_hom.ext -> OneHom.ext is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : One.{u1} M] [_inst_2 : One.{u2} N] {{f : OneHom.{u1, u2} M N _inst_1 _inst_2}} {{g : OneHom.{u1, u2} M N _inst_1 _inst_2}}, (forall (x : M), Eq.{succ u2} N (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (OneHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : OneHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (OneHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f x) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (OneHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : OneHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (OneHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) g x)) -> (Eq.{max (succ u2) (succ u1)} (OneHom.{u1, u2} M N _inst_1 _inst_2) f g)
-but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : One.{u2} M] [_inst_2 : One.{u1} N] {{f : OneHom.{u2, u1} M N _inst_1 _inst_2}} {{g : OneHom.{u2, u1} M N _inst_1 _inst_2}}, (forall (x : M), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1264 : M) => N) x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (OneHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1264 : M) => N) _x) (OneHomClass.toFunLike.{max u2 u1, u2, u1} (OneHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (OneHom.oneHomClass.{u2, u1} M N _inst_1 _inst_2)) f x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (OneHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1264 : M) => N) _x) (OneHomClass.toFunLike.{max u2 u1, u2, u1} (OneHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (OneHom.oneHomClass.{u2, u1} M N _inst_1 _inst_2)) g x)) -> (Eq.{max (succ u2) (succ u1)} (OneHom.{u2, u1} M N _inst_1 _inst_2) f g)
-Case conversion may be inaccurate. Consider using '#align one_hom.ext OneHom.extₓ'. -/
 @[ext, to_additive]
 theorem OneHom.ext [One M] [One N] ⦃f g : OneHom M N⦄ (h : ∀ x, f x = g x) : f = g :=
   FunLike.ext _ _ h
 #align one_hom.ext OneHom.ext
 #align zero_hom.ext ZeroHom.ext
 
-/- warning: mul_hom.ext -> MulHom.ext is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] {{f : MulHom.{u1, u2} M N _inst_1 _inst_2}} {{g : MulHom.{u1, u2} M N _inst_1 _inst_2}}, (forall (x : M), Eq.{succ u2} N (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MulHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MulHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MulHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f x) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MulHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MulHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MulHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) g x)) -> (Eq.{max (succ u2) (succ u1)} (MulHom.{u1, u2} M N _inst_1 _inst_2) f g)
-but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : Mul.{u2} M] [_inst_2 : Mul.{u1} N] {{f : MulHom.{u2, u1} M N _inst_1 _inst_2}} {{g : MulHom.{u2, u1} M N _inst_1 _inst_2}}, (forall (x : M), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) f x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) g x)) -> (Eq.{max (succ u2) (succ u1)} (MulHom.{u2, u1} M N _inst_1 _inst_2) f g)
-Case conversion may be inaccurate. Consider using '#align mul_hom.ext MulHom.extₓ'. -/
 @[ext, to_additive]
 theorem MulHom.ext [Mul M] [Mul N] ⦃f g : M →ₙ* N⦄ (h : ∀ x, f x = g x) : f = g :=
   FunLike.ext _ _ h
 #align mul_hom.ext MulHom.ext
 #align add_hom.ext AddHom.ext
 
-/- warning: monoid_hom.ext -> MonoidHom.ext is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N] {{f : MonoidHom.{u1, u2} M N _inst_1 _inst_2}} {{g : MonoidHom.{u1, u2} M N _inst_1 _inst_2}}, (forall (x : M), Eq.{succ u2} N (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MonoidHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MonoidHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f x) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MonoidHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MonoidHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) g x)) -> (Eq.{max (succ u2) (succ u1)} (MonoidHom.{u1, u2} M N _inst_1 _inst_2) f g)
-but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u1} N] {{f : MonoidHom.{u2, u1} M N _inst_1 _inst_2}} {{g : MonoidHom.{u2, u1} M N _inst_1 _inst_2}}, (forall (x : M), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2))) f x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2))) g x)) -> (Eq.{max (succ u2) (succ u1)} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) f g)
-Case conversion may be inaccurate. Consider using '#align monoid_hom.ext MonoidHom.extₓ'. -/
 @[ext, to_additive]
 theorem MonoidHom.ext [MulOneClass M] [MulOneClass N] ⦃f g : M →* N⦄ (h : ∀ x, f x = g x) : f = g :=
   FunLike.ext _ _ h
 #align monoid_hom.ext MonoidHom.ext
 #align add_monoid_hom.ext AddMonoidHom.ext
 
-/- warning: monoid_with_zero_hom.ext -> MonoidWithZeroHom.ext is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulZeroOneClass.{u1} M] [_inst_2 : MulZeroOneClass.{u2} N] {{f : MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2}} {{g : MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2}}, (forall (x : M), Eq.{succ u2} N (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MonoidWithZeroHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f x) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MonoidWithZeroHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) g x)) -> (Eq.{max (succ u2) (succ u1)} (MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) f g)
-but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : MulZeroOneClass.{u2} M] [_inst_2 : MulZeroOneClass.{u1} N] {{f : MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2}} {{g : MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2}}, (forall (x : M), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M (MulZeroOneClass.toMulOneClass.{u2} M _inst_1)) (MulOneClass.toMul.{u1} N (MulZeroOneClass.toMulOneClass.{u1} N _inst_2)) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulZeroOneClass.toMulOneClass.{u2} M _inst_1) (MulZeroOneClass.toMulOneClass.{u1} N _inst_2) (MonoidWithZeroHomClass.toMonoidHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidWithZeroHom.monoidWithZeroHomClass.{u2, u1} M N _inst_1 _inst_2)))) f x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M (MulZeroOneClass.toMulOneClass.{u2} M _inst_1)) (MulOneClass.toMul.{u1} N (MulZeroOneClass.toMulOneClass.{u1} N _inst_2)) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulZeroOneClass.toMulOneClass.{u2} M _inst_1) (MulZeroOneClass.toMulOneClass.{u1} N _inst_2) (MonoidWithZeroHomClass.toMonoidHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidWithZeroHom.monoidWithZeroHomClass.{u2, u1} M N _inst_1 _inst_2)))) g x)) -> (Eq.{max (succ u2) (succ u1)} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) f g)
-Case conversion may be inaccurate. Consider using '#align monoid_with_zero_hom.ext MonoidWithZeroHom.extₓ'. -/
 @[ext]
 theorem MonoidWithZeroHom.ext [MulZeroOneClass M] [MulZeroOneClass N] ⦃f g : M →*₀ N⦄
     (h : ∀ x, f x = g x) : f = g :=
@@ -978,12 +744,6 @@ theorem MonoidWithZeroHom.ext [MulZeroOneClass M] [MulZeroOneClass N] ⦃f g : M
 
 section Deprecated
 
-/- warning: one_hom.congr_fun -> OneHom.congr_fun is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : One.{u1} M] [_inst_2 : One.{u2} N] {f : OneHom.{u1, u2} M N _inst_1 _inst_2} {g : OneHom.{u1, u2} M N _inst_1 _inst_2}, (Eq.{max (succ u2) (succ u1)} (OneHom.{u1, u2} M N _inst_1 _inst_2) f g) -> (forall (x : M), Eq.{succ u2} N (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (OneHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : OneHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (OneHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f x) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (OneHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : OneHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (OneHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) g x))
-but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : One.{u2} M] [_inst_2 : One.{u1} N] {f : OneHom.{u2, u1} M N _inst_1 _inst_2} {g : OneHom.{u2, u1} M N _inst_1 _inst_2}, (Eq.{max (succ u2) (succ u1)} (OneHom.{u2, u1} M N _inst_1 _inst_2) f g) -> (forall (x : M), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1264 : M) => N) x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (OneHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1264 : M) => N) _x) (OneHomClass.toFunLike.{max u2 u1, u2, u1} (OneHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (OneHom.oneHomClass.{u2, u1} M N _inst_1 _inst_2)) f x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (OneHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1264 : M) => N) _x) (OneHomClass.toFunLike.{max u2 u1, u2, u1} (OneHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (OneHom.oneHomClass.{u2, u1} M N _inst_1 _inst_2)) g x))
-Case conversion may be inaccurate. Consider using '#align one_hom.congr_fun OneHom.congr_funₓ'. -/
 /-- Deprecated: use `fun_like.congr_fun` instead. -/
 @[to_additive "Deprecated: use `fun_like.congr_fun` instead."]
 theorem OneHom.congr_fun [One M] [One N] {f g : OneHom M N} (h : f = g) (x : M) : f x = g x :=
@@ -991,12 +751,6 @@ theorem OneHom.congr_fun [One M] [One N] {f g : OneHom M N} (h : f = g) (x : M)
 #align one_hom.congr_fun OneHom.congr_fun
 #align zero_hom.congr_fun ZeroHom.congr_fun
 
-/- warning: mul_hom.congr_fun -> MulHom.congr_fun is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] {f : MulHom.{u1, u2} M N _inst_1 _inst_2} {g : MulHom.{u1, u2} M N _inst_1 _inst_2}, (Eq.{max (succ u2) (succ u1)} (MulHom.{u1, u2} M N _inst_1 _inst_2) f g) -> (forall (x : M), Eq.{succ u2} N (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MulHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MulHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MulHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f x) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MulHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MulHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MulHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) g x))
-but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : Mul.{u2} M] [_inst_2 : Mul.{u1} N] {f : MulHom.{u2, u1} M N _inst_1 _inst_2} {g : MulHom.{u2, u1} M N _inst_1 _inst_2}, (Eq.{max (succ u2) (succ u1)} (MulHom.{u2, u1} M N _inst_1 _inst_2) f g) -> (forall (x : M), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) f x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) g x))
-Case conversion may be inaccurate. Consider using '#align mul_hom.congr_fun MulHom.congr_funₓ'. -/
 /-- Deprecated: use `fun_like.congr_fun` instead. -/
 @[to_additive "Deprecated: use `fun_like.congr_fun` instead."]
 theorem MulHom.congr_fun [Mul M] [Mul N] {f g : M →ₙ* N} (h : f = g) (x : M) : f x = g x :=
@@ -1004,12 +758,6 @@ theorem MulHom.congr_fun [Mul M] [Mul N] {f g : M →ₙ* N} (h : f = g) (x : M)
 #align mul_hom.congr_fun MulHom.congr_fun
 #align add_hom.congr_fun AddHom.congr_fun
 
-/- warning: monoid_hom.congr_fun -> MonoidHom.congr_fun is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N] {f : MonoidHom.{u1, u2} M N _inst_1 _inst_2} {g : MonoidHom.{u1, u2} M N _inst_1 _inst_2}, (Eq.{max (succ u2) (succ u1)} (MonoidHom.{u1, u2} M N _inst_1 _inst_2) f g) -> (forall (x : M), Eq.{succ u2} N (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MonoidHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MonoidHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f x) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MonoidHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MonoidHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) g x))
-but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u1} N] {f : MonoidHom.{u2, u1} M N _inst_1 _inst_2} {g : MonoidHom.{u2, u1} M N _inst_1 _inst_2}, (Eq.{max (succ u2) (succ u1)} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) f g) -> (forall (x : M), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2))) f x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2))) g x))
-Case conversion may be inaccurate. Consider using '#align monoid_hom.congr_fun MonoidHom.congr_funₓ'. -/
 /-- Deprecated: use `fun_like.congr_fun` instead. -/
 @[to_additive "Deprecated: use `fun_like.congr_fun` instead."]
 theorem MonoidHom.congr_fun [MulOneClass M] [MulOneClass N] {f g : M →* N} (h : f = g) (x : M) :
@@ -1018,24 +766,12 @@ theorem MonoidHom.congr_fun [MulOneClass M] [MulOneClass N] {f g : M →* N} (h
 #align monoid_hom.congr_fun MonoidHom.congr_fun
 #align add_monoid_hom.congr_fun AddMonoidHom.congr_fun
 
-/- warning: monoid_with_zero_hom.congr_fun -> MonoidWithZeroHom.congr_fun is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulZeroOneClass.{u1} M] [_inst_2 : MulZeroOneClass.{u2} N] {f : MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2} {g : MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2}, (Eq.{max (succ u2) (succ u1)} (MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) f g) -> (forall (x : M), Eq.{succ u2} N (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MonoidWithZeroHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f x) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MonoidWithZeroHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) g x))
-but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : MulZeroOneClass.{u2} M] [_inst_2 : MulZeroOneClass.{u1} N] {f : MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2} {g : MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2}, (Eq.{max (succ u2) (succ u1)} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) f g) -> (forall (x : M), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M (MulZeroOneClass.toMulOneClass.{u2} M _inst_1)) (MulOneClass.toMul.{u1} N (MulZeroOneClass.toMulOneClass.{u1} N _inst_2)) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulZeroOneClass.toMulOneClass.{u2} M _inst_1) (MulZeroOneClass.toMulOneClass.{u1} N _inst_2) (MonoidWithZeroHomClass.toMonoidHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidWithZeroHom.monoidWithZeroHomClass.{u2, u1} M N _inst_1 _inst_2)))) f x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M (MulZeroOneClass.toMulOneClass.{u2} M _inst_1)) (MulOneClass.toMul.{u1} N (MulZeroOneClass.toMulOneClass.{u1} N _inst_2)) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulZeroOneClass.toMulOneClass.{u2} M _inst_1) (MulZeroOneClass.toMulOneClass.{u1} N _inst_2) (MonoidWithZeroHomClass.toMonoidHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidWithZeroHom.monoidWithZeroHomClass.{u2, u1} M N _inst_1 _inst_2)))) g x))
-Case conversion may be inaccurate. Consider using '#align monoid_with_zero_hom.congr_fun MonoidWithZeroHom.congr_funₓ'. -/
 /-- Deprecated: use `fun_like.congr_fun` instead. -/
 theorem MonoidWithZeroHom.congr_fun [MulZeroOneClass M] [MulZeroOneClass N] {f g : M →*₀ N}
     (h : f = g) (x : M) : f x = g x :=
   FunLike.congr_fun h x
 #align monoid_with_zero_hom.congr_fun MonoidWithZeroHom.congr_fun
 
-/- warning: one_hom.congr_arg -> OneHom.congr_arg is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : One.{u1} M] [_inst_2 : One.{u2} N] (f : OneHom.{u1, u2} M N _inst_1 _inst_2) {x : M} {y : M}, (Eq.{succ u1} M x y) -> (Eq.{succ u2} N (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (OneHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : OneHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (OneHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f x) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (OneHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : OneHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (OneHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f y))
-but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : One.{u2} M] [_inst_2 : One.{u1} N] (f : OneHom.{u2, u1} M N _inst_1 _inst_2) {x : M} {y : M}, (Eq.{succ u2} M x y) -> (Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1264 : M) => N) x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (OneHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1264 : M) => N) _x) (OneHomClass.toFunLike.{max u2 u1, u2, u1} (OneHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (OneHom.oneHomClass.{u2, u1} M N _inst_1 _inst_2)) f x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (OneHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1264 : M) => N) _x) (OneHomClass.toFunLike.{max u2 u1, u2, u1} (OneHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (OneHom.oneHomClass.{u2, u1} M N _inst_1 _inst_2)) f y))
-Case conversion may be inaccurate. Consider using '#align one_hom.congr_arg OneHom.congr_argₓ'. -/
 /-- Deprecated: use `fun_like.congr_arg` instead. -/
 @[to_additive "Deprecated: use `fun_like.congr_arg` instead."]
 theorem OneHom.congr_arg [One M] [One N] (f : OneHom M N) {x y : M} (h : x = y) : f x = f y :=
@@ -1043,12 +779,6 @@ theorem OneHom.congr_arg [One M] [One N] (f : OneHom M N) {x y : M} (h : x = y)
 #align one_hom.congr_arg OneHom.congr_arg
 #align zero_hom.congr_arg ZeroHom.congr_arg
 
-/- warning: mul_hom.congr_arg -> MulHom.congr_arg is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] (f : MulHom.{u1, u2} M N _inst_1 _inst_2) {x : M} {y : M}, (Eq.{succ u1} M x y) -> (Eq.{succ u2} N (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MulHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MulHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MulHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f x) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MulHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MulHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MulHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f y))
-but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : Mul.{u2} M] [_inst_2 : Mul.{u1} N] (f : MulHom.{u2, u1} M N _inst_1 _inst_2) {x : M} {y : M}, (Eq.{succ u2} M x y) -> (Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) f x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) f y))
-Case conversion may be inaccurate. Consider using '#align mul_hom.congr_arg MulHom.congr_argₓ'. -/
 /-- Deprecated: use `fun_like.congr_arg` instead. -/
 @[to_additive "Deprecated: use `fun_like.congr_arg` instead."]
 theorem MulHom.congr_arg [Mul M] [Mul N] (f : M →ₙ* N) {x y : M} (h : x = y) : f x = f y :=
@@ -1056,12 +786,6 @@ theorem MulHom.congr_arg [Mul M] [Mul N] (f : M →ₙ* N) {x y : M} (h : x = y)
 #align mul_hom.congr_arg MulHom.congr_arg
 #align add_hom.congr_arg AddHom.congr_arg
 
-/- warning: monoid_hom.congr_arg -> MonoidHom.congr_arg is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N] (f : MonoidHom.{u1, u2} M N _inst_1 _inst_2) {x : M} {y : M}, (Eq.{succ u1} M x y) -> (Eq.{succ u2} N (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MonoidHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MonoidHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f x) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MonoidHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MonoidHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f y))
-but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u1} N] (f : MonoidHom.{u2, u1} M N _inst_1 _inst_2) {x : M} {y : M}, (Eq.{succ u2} M x y) -> (Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2))) f x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2))) f y))
-Case conversion may be inaccurate. Consider using '#align monoid_hom.congr_arg MonoidHom.congr_argₓ'. -/
 /-- Deprecated: use `fun_like.congr_arg` instead. -/
 @[to_additive "Deprecated: use `fun_like.congr_arg` instead."]
 theorem MonoidHom.congr_arg [MulOneClass M] [MulOneClass N] (f : M →* N) {x y : M} (h : x = y) :
@@ -1070,24 +794,12 @@ theorem MonoidHom.congr_arg [MulOneClass M] [MulOneClass N] (f : M →* N) {x y
 #align monoid_hom.congr_arg MonoidHom.congr_arg
 #align add_monoid_hom.congr_arg AddMonoidHom.congr_arg
 
-/- warning: monoid_with_zero_hom.congr_arg -> MonoidWithZeroHom.congr_arg is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulZeroOneClass.{u1} M] [_inst_2 : MulZeroOneClass.{u2} N] (f : MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) {x : M} {y : M}, (Eq.{succ u1} M x y) -> (Eq.{succ u2} N (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MonoidWithZeroHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f x) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MonoidWithZeroHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f y))
-but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : MulZeroOneClass.{u2} M] [_inst_2 : MulZeroOneClass.{u1} N] (f : MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) {x : M} {y : M}, (Eq.{succ u2} M x y) -> (Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M (MulZeroOneClass.toMulOneClass.{u2} M _inst_1)) (MulOneClass.toMul.{u1} N (MulZeroOneClass.toMulOneClass.{u1} N _inst_2)) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulZeroOneClass.toMulOneClass.{u2} M _inst_1) (MulZeroOneClass.toMulOneClass.{u1} N _inst_2) (MonoidWithZeroHomClass.toMonoidHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidWithZeroHom.monoidWithZeroHomClass.{u2, u1} M N _inst_1 _inst_2)))) f x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M (MulZeroOneClass.toMulOneClass.{u2} M _inst_1)) (MulOneClass.toMul.{u1} N (MulZeroOneClass.toMulOneClass.{u1} N _inst_2)) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulZeroOneClass.toMulOneClass.{u2} M _inst_1) (MulZeroOneClass.toMulOneClass.{u1} N _inst_2) (MonoidWithZeroHomClass.toMonoidHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidWithZeroHom.monoidWithZeroHomClass.{u2, u1} M N _inst_1 _inst_2)))) f y))
-Case conversion may be inaccurate. Consider using '#align monoid_with_zero_hom.congr_arg MonoidWithZeroHom.congr_argₓ'. -/
 /-- Deprecated: use `fun_like.congr_arg` instead. -/
 theorem MonoidWithZeroHom.congr_arg [MulZeroOneClass M] [MulZeroOneClass N] (f : M →*₀ N) {x y : M}
     (h : x = y) : f x = f y :=
   FunLike.congr_arg f h
 #align monoid_with_zero_hom.congr_arg MonoidWithZeroHom.congr_arg
 
-/- warning: one_hom.coe_inj -> OneHom.coe_inj is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : One.{u1} M] [_inst_2 : One.{u2} N] {{f : OneHom.{u1, u2} M N _inst_1 _inst_2}} {{g : OneHom.{u1, u2} M N _inst_1 _inst_2}}, (Eq.{max (succ u1) (succ u2)} ((fun (_x : OneHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) f) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (OneHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : OneHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (OneHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (OneHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : OneHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (OneHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) g)) -> (Eq.{max (succ u2) (succ u1)} (OneHom.{u1, u2} M N _inst_1 _inst_2) f g)
-but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : One.{u2} M] [_inst_2 : One.{u1} N] {{f : OneHom.{u2, u1} M N _inst_1 _inst_2}} {{g : OneHom.{u2, u1} M N _inst_1 _inst_2}}, (Eq.{max (succ u2) (succ u1)} (forall (a : M), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1264 : M) => N) a) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (OneHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1264 : M) => N) _x) (OneHomClass.toFunLike.{max u2 u1, u2, u1} (OneHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (OneHom.oneHomClass.{u2, u1} M N _inst_1 _inst_2)) f) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (OneHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1264 : M) => N) _x) (OneHomClass.toFunLike.{max u2 u1, u2, u1} (OneHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (OneHom.oneHomClass.{u2, u1} M N _inst_1 _inst_2)) g)) -> (Eq.{max (succ u2) (succ u1)} (OneHom.{u2, u1} M N _inst_1 _inst_2) f g)
-Case conversion may be inaccurate. Consider using '#align one_hom.coe_inj OneHom.coe_injₓ'. -/
 /-- Deprecated: use `fun_like.coe_injective` instead. -/
 @[to_additive "Deprecated: use `fun_like.coe_injective` instead."]
 theorem OneHom.coe_inj [One M] [One N] ⦃f g : OneHom M N⦄ (h : (f : M → N) = g) : f = g :=
@@ -1095,12 +807,6 @@ theorem OneHom.coe_inj [One M] [One N] ⦃f g : OneHom M N⦄ (h : (f : M → N)
 #align one_hom.coe_inj OneHom.coe_inj
 #align zero_hom.coe_inj ZeroHom.coe_inj
 
-/- warning: mul_hom.coe_inj -> MulHom.coe_inj is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] {{f : MulHom.{u1, u2} M N _inst_1 _inst_2}} {{g : MulHom.{u1, u2} M N _inst_1 _inst_2}}, (Eq.{max (succ u1) (succ u2)} ((fun (_x : MulHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) f) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MulHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MulHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MulHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MulHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MulHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MulHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) g)) -> (Eq.{max (succ u2) (succ u1)} (MulHom.{u1, u2} M N _inst_1 _inst_2) f g)
-but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : Mul.{u2} M] [_inst_2 : Mul.{u1} N] {{f : MulHom.{u2, u1} M N _inst_1 _inst_2}} {{g : MulHom.{u2, u1} M N _inst_1 _inst_2}}, (Eq.{max (succ u2) (succ u1)} (forall (a : M), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) a) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) f) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) g)) -> (Eq.{max (succ u2) (succ u1)} (MulHom.{u2, u1} M N _inst_1 _inst_2) f g)
-Case conversion may be inaccurate. Consider using '#align mul_hom.coe_inj MulHom.coe_injₓ'. -/
 /-- Deprecated: use `fun_like.coe_injective` instead. -/
 @[to_additive "Deprecated: use `fun_like.coe_injective` instead."]
 theorem MulHom.coe_inj [Mul M] [Mul N] ⦃f g : M →ₙ* N⦄ (h : (f : M → N) = g) : f = g :=
@@ -1108,12 +814,6 @@ theorem MulHom.coe_inj [Mul M] [Mul N] ⦃f g : M →ₙ* N⦄ (h : (f : M → N
 #align mul_hom.coe_inj MulHom.coe_inj
 #align add_hom.coe_inj AddHom.coe_inj
 
-/- warning: monoid_hom.coe_inj -> MonoidHom.coe_inj is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N] {{f : MonoidHom.{u1, u2} M N _inst_1 _inst_2}} {{g : MonoidHom.{u1, u2} M N _inst_1 _inst_2}}, (Eq.{max (succ u1) (succ u2)} ((fun (_x : MonoidHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) f) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MonoidHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MonoidHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MonoidHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MonoidHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) g)) -> (Eq.{max (succ u2) (succ u1)} (MonoidHom.{u1, u2} M N _inst_1 _inst_2) f g)
-but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u1} N] {{f : MonoidHom.{u2, u1} M N _inst_1 _inst_2}} {{g : MonoidHom.{u2, u1} M N _inst_1 _inst_2}}, (Eq.{max (succ u2) (succ u1)} (forall (a : M), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) a) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2))) f) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2))) g)) -> (Eq.{max (succ u2) (succ u1)} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) f g)
-Case conversion may be inaccurate. Consider using '#align monoid_hom.coe_inj MonoidHom.coe_injₓ'. -/
 /-- Deprecated: use `fun_like.coe_injective` instead. -/
 @[to_additive "Deprecated: use `fun_like.coe_injective` instead."]
 theorem MonoidHom.coe_inj [MulOneClass M] [MulOneClass N] ⦃f g : M →* N⦄ (h : (f : M → N) = g) :
@@ -1122,24 +822,12 @@ theorem MonoidHom.coe_inj [MulOneClass M] [MulOneClass N] ⦃f g : M →* N⦄ (
 #align monoid_hom.coe_inj MonoidHom.coe_inj
 #align add_monoid_hom.coe_inj AddMonoidHom.coe_inj
 
-/- warning: monoid_with_zero_hom.coe_inj -> MonoidWithZeroHom.coe_inj is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulZeroOneClass.{u1} M] [_inst_2 : MulZeroOneClass.{u2} N] {{f : MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2}} {{g : MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2}}, (Eq.{max (succ u1) (succ u2)} ((fun (_x : MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) f) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MonoidWithZeroHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MonoidWithZeroHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) g)) -> (Eq.{max (succ u2) (succ u1)} (MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) f g)
-but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : MulZeroOneClass.{u2} M] [_inst_2 : MulZeroOneClass.{u1} N] {{f : MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2}} {{g : MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2}}, (Eq.{max (succ u2) (succ u1)} (forall (a : M), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) a) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M (MulZeroOneClass.toMulOneClass.{u2} M _inst_1)) (MulOneClass.toMul.{u1} N (MulZeroOneClass.toMulOneClass.{u1} N _inst_2)) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulZeroOneClass.toMulOneClass.{u2} M _inst_1) (MulZeroOneClass.toMulOneClass.{u1} N _inst_2) (MonoidWithZeroHomClass.toMonoidHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidWithZeroHom.monoidWithZeroHomClass.{u2, u1} M N _inst_1 _inst_2)))) f) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M (MulZeroOneClass.toMulOneClass.{u2} M _inst_1)) (MulOneClass.toMul.{u1} N (MulZeroOneClass.toMulOneClass.{u1} N _inst_2)) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulZeroOneClass.toMulOneClass.{u2} M _inst_1) (MulZeroOneClass.toMulOneClass.{u1} N _inst_2) (MonoidWithZeroHomClass.toMonoidHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidWithZeroHom.monoidWithZeroHomClass.{u2, u1} M N _inst_1 _inst_2)))) g)) -> (Eq.{max (succ u2) (succ u1)} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) f g)
-Case conversion may be inaccurate. Consider using '#align monoid_with_zero_hom.coe_inj MonoidWithZeroHom.coe_injₓ'. -/
 /-- Deprecated: use `fun_like.coe_injective` instead. -/
 theorem MonoidWithZeroHom.coe_inj [MulZeroOneClass M] [MulZeroOneClass N] ⦃f g : M →*₀ N⦄
     (h : (f : M → N) = g) : f = g :=
   FunLike.coe_injective h
 #align monoid_with_zero_hom.coe_inj MonoidWithZeroHom.coe_inj
 
-/- warning: one_hom.ext_iff -> OneHom.ext_iff is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : One.{u1} M] [_inst_2 : One.{u2} N] {f : OneHom.{u1, u2} M N _inst_1 _inst_2} {g : OneHom.{u1, u2} M N _inst_1 _inst_2}, Iff (Eq.{max (succ u2) (succ u1)} (OneHom.{u1, u2} M N _inst_1 _inst_2) f g) (forall (x : M), Eq.{succ u2} N (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (OneHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : OneHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (OneHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f x) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (OneHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : OneHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (OneHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) g x))
-but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : One.{u2} M] [_inst_2 : One.{u1} N] {f : OneHom.{u2, u1} M N _inst_1 _inst_2} {g : OneHom.{u2, u1} M N _inst_1 _inst_2}, Iff (Eq.{max (succ u2) (succ u1)} (OneHom.{u2, u1} M N _inst_1 _inst_2) f g) (forall (x : M), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1264 : M) => N) x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (OneHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1264 : M) => N) _x) (OneHomClass.toFunLike.{max u2 u1, u2, u1} (OneHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (OneHom.oneHomClass.{u2, u1} M N _inst_1 _inst_2)) f x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (OneHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1264 : M) => N) _x) (OneHomClass.toFunLike.{max u2 u1, u2, u1} (OneHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (OneHom.oneHomClass.{u2, u1} M N _inst_1 _inst_2)) g x))
-Case conversion may be inaccurate. Consider using '#align one_hom.ext_iff OneHom.ext_iffₓ'. -/
 /-- Deprecated: use `fun_like.ext_iff` instead. -/
 @[to_additive "Deprecated: use `fun_like.ext_iff` instead."]
 theorem OneHom.ext_iff [One M] [One N] {f g : OneHom M N} : f = g ↔ ∀ x, f x = g x :=
@@ -1147,12 +835,6 @@ theorem OneHom.ext_iff [One M] [One N] {f g : OneHom M N} : f = g ↔ ∀ x, f x
 #align one_hom.ext_iff OneHom.ext_iff
 #align zero_hom.ext_iff ZeroHom.ext_iff
 
-/- warning: mul_hom.ext_iff -> MulHom.ext_iff is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] {f : MulHom.{u1, u2} M N _inst_1 _inst_2} {g : MulHom.{u1, u2} M N _inst_1 _inst_2}, Iff (Eq.{max (succ u2) (succ u1)} (MulHom.{u1, u2} M N _inst_1 _inst_2) f g) (forall (x : M), Eq.{succ u2} N (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MulHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MulHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MulHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f x) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MulHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MulHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MulHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) g x))
-but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : Mul.{u2} M] [_inst_2 : Mul.{u1} N] {f : MulHom.{u2, u1} M N _inst_1 _inst_2} {g : MulHom.{u2, u1} M N _inst_1 _inst_2}, Iff (Eq.{max (succ u2) (succ u1)} (MulHom.{u2, u1} M N _inst_1 _inst_2) f g) (forall (x : M), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) f x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) g x))
-Case conversion may be inaccurate. Consider using '#align mul_hom.ext_iff MulHom.ext_iffₓ'. -/
 /-- Deprecated: use `fun_like.ext_iff` instead. -/
 @[to_additive "Deprecated: use `fun_like.ext_iff` instead."]
 theorem MulHom.ext_iff [Mul M] [Mul N] {f g : M →ₙ* N} : f = g ↔ ∀ x, f x = g x :=
@@ -1160,12 +842,6 @@ theorem MulHom.ext_iff [Mul M] [Mul N] {f g : M →ₙ* N} : f = g ↔ ∀ x, f
 #align mul_hom.ext_iff MulHom.ext_iff
 #align add_hom.ext_iff AddHom.ext_iff
 
-/- warning: monoid_hom.ext_iff -> MonoidHom.ext_iff is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N] {f : MonoidHom.{u1, u2} M N _inst_1 _inst_2} {g : MonoidHom.{u1, u2} M N _inst_1 _inst_2}, Iff (Eq.{max (succ u2) (succ u1)} (MonoidHom.{u1, u2} M N _inst_1 _inst_2) f g) (forall (x : M), Eq.{succ u2} N (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MonoidHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MonoidHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f x) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MonoidHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MonoidHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) g x))
-but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u1} N] {f : MonoidHom.{u2, u1} M N _inst_1 _inst_2} {g : MonoidHom.{u2, u1} M N _inst_1 _inst_2}, Iff (Eq.{max (succ u2) (succ u1)} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) f g) (forall (x : M), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2))) f x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2))) g x))
-Case conversion may be inaccurate. Consider using '#align monoid_hom.ext_iff MonoidHom.ext_iffₓ'. -/
 /-- Deprecated: use `fun_like.ext_iff` instead. -/
 @[to_additive "Deprecated: use `fun_like.ext_iff` instead."]
 theorem MonoidHom.ext_iff [MulOneClass M] [MulOneClass N] {f g : M →* N} : f = g ↔ ∀ x, f x = g x :=
@@ -1173,12 +849,6 @@ theorem MonoidHom.ext_iff [MulOneClass M] [MulOneClass N] {f g : M →* N} : f =
 #align monoid_hom.ext_iff MonoidHom.ext_iff
 #align add_monoid_hom.ext_iff AddMonoidHom.ext_iff
 
-/- warning: monoid_with_zero_hom.ext_iff -> MonoidWithZeroHom.ext_iff is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulZeroOneClass.{u1} M] [_inst_2 : MulZeroOneClass.{u2} N] {f : MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2} {g : MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2}, Iff (Eq.{max (succ u2) (succ u1)} (MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) f g) (forall (x : M), Eq.{succ u2} N (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MonoidWithZeroHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f x) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MonoidWithZeroHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) g x))
-but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : MulZeroOneClass.{u2} M] [_inst_2 : MulZeroOneClass.{u1} N] {f : MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2} {g : MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2}, Iff (Eq.{max (succ u2) (succ u1)} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) f g) (forall (x : M), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M (MulZeroOneClass.toMulOneClass.{u2} M _inst_1)) (MulOneClass.toMul.{u1} N (MulZeroOneClass.toMulOneClass.{u1} N _inst_2)) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulZeroOneClass.toMulOneClass.{u2} M _inst_1) (MulZeroOneClass.toMulOneClass.{u1} N _inst_2) (MonoidWithZeroHomClass.toMonoidHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidWithZeroHom.monoidWithZeroHomClass.{u2, u1} M N _inst_1 _inst_2)))) f x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M (MulZeroOneClass.toMulOneClass.{u2} M _inst_1)) (MulOneClass.toMul.{u1} N (MulZeroOneClass.toMulOneClass.{u1} N _inst_2)) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulZeroOneClass.toMulOneClass.{u2} M _inst_1) (MulZeroOneClass.toMulOneClass.{u1} N _inst_2) (MonoidWithZeroHomClass.toMonoidHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidWithZeroHom.monoidWithZeroHomClass.{u2, u1} M N _inst_1 _inst_2)))) g x))
-Case conversion may be inaccurate. Consider using '#align monoid_with_zero_hom.ext_iff MonoidWithZeroHom.ext_iffₓ'. -/
 /-- Deprecated: use `fun_like.ext_iff` instead. -/
 theorem MonoidWithZeroHom.ext_iff [MulZeroOneClass M] [MulZeroOneClass N] {f g : M →*₀ N} :
     f = g ↔ ∀ x, f x = g x :=
@@ -1187,36 +857,18 @@ theorem MonoidWithZeroHom.ext_iff [MulZeroOneClass M] [MulZeroOneClass N] {f g :
 
 end Deprecated
 
-/- warning: one_hom.mk_coe -> OneHom.mk_coe is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : One.{u1} M] [_inst_2 : One.{u2} N] (f : OneHom.{u1, u2} M N _inst_1 _inst_2) (h1 : Eq.{succ u2} N (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (OneHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : OneHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (OneHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f (OfNat.ofNat.{u1} M 1 (OfNat.mk.{u1} M 1 (One.one.{u1} M _inst_1)))) (OfNat.ofNat.{u2} N 1 (OfNat.mk.{u2} N 1 (One.one.{u2} N _inst_2)))), Eq.{max (succ u2) (succ u1)} (OneHom.{u1, u2} M N _inst_1 _inst_2) (OneHom.mk.{u1, u2} M N _inst_1 _inst_2 (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (OneHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : OneHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (OneHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f) h1) f
-but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : One.{u2} M] [_inst_2 : One.{u1} N] (f : OneHom.{u2, u1} M N _inst_1 _inst_2) (h1 : Eq.{succ u1} N (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (OneHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1264 : M) => N) _x) (OneHomClass.toFunLike.{max u2 u1, u2, u1} (OneHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (OneHom.oneHomClass.{u2, u1} M N _inst_1 _inst_2)) f (OfNat.ofNat.{u2} M 1 (One.toOfNat1.{u2} M _inst_1))) (OfNat.ofNat.{u1} N 1 (One.toOfNat1.{u1} N _inst_2))), Eq.{max (succ u2) (succ u1)} (OneHom.{u2, u1} M N _inst_1 _inst_2) (OneHom.mk.{u2, u1} M N _inst_1 _inst_2 (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (OneHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1264 : M) => N) _x) (OneHomClass.toFunLike.{max u2 u1, u2, u1} (OneHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (OneHom.oneHomClass.{u2, u1} M N _inst_1 _inst_2)) f) h1) f
-Case conversion may be inaccurate. Consider using '#align one_hom.mk_coe OneHom.mk_coeₓ'. -/
 @[simp, to_additive]
 theorem OneHom.mk_coe [One M] [One N] (f : OneHom M N) (h1) : OneHom.mk f h1 = f :=
   OneHom.ext fun _ => rfl
 #align one_hom.mk_coe OneHom.mk_coe
 #align zero_hom.mk_coe ZeroHom.mk_coe
 
-/- warning: mul_hom.mk_coe -> MulHom.mk_coe is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] (f : MulHom.{u1, u2} M N _inst_1 _inst_2) (hmul : forall (x : M) (y : M), Eq.{succ u2} N (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MulHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MulHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MulHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f (HMul.hMul.{u1, u1, u1} M M M (instHMul.{u1} M _inst_1) x y)) (HMul.hMul.{u2, u2, u2} N N N (instHMul.{u2} N _inst_2) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MulHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MulHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MulHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f x) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MulHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MulHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MulHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f y))), Eq.{max (succ u2) (succ u1)} (MulHom.{u1, u2} M N _inst_1 _inst_2) (MulHom.mk.{u1, u2} M N _inst_1 _inst_2 (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MulHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MulHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MulHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f) hmul) f
-but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : Mul.{u2} M] [_inst_2 : Mul.{u1} N] (f : MulHom.{u2, u1} M N _inst_1 _inst_2) (hmul : forall (x : M) (y : M), Eq.{succ u1} N (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) f (HMul.hMul.{u2, u2, u2} M M M (instHMul.{u2} M _inst_1) x y)) (HMul.hMul.{u1, u1, u1} N N N (instHMul.{u1} N _inst_2) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) f x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) f y))), Eq.{max (succ u2) (succ u1)} (MulHom.{u2, u1} M N _inst_1 _inst_2) (MulHom.mk.{u2, u1} M N _inst_1 _inst_2 (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) f) hmul) f
-Case conversion may be inaccurate. Consider using '#align mul_hom.mk_coe MulHom.mk_coeₓ'. -/
 @[simp, to_additive]
 theorem MulHom.mk_coe [Mul M] [Mul N] (f : M →ₙ* N) (hmul) : MulHom.mk f hmul = f :=
   MulHom.ext fun _ => rfl
 #align mul_hom.mk_coe MulHom.mk_coe
 #align add_hom.mk_coe AddHom.mk_coe
 
-/- warning: monoid_hom.mk_coe -> MonoidHom.mk_coe is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N] (f : MonoidHom.{u1, u2} M N _inst_1 _inst_2) (h1 : Eq.{succ u2} N (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MonoidHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MonoidHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f (OfNat.ofNat.{u1} M 1 (OfNat.mk.{u1} M 1 (One.one.{u1} M (MulOneClass.toHasOne.{u1} M _inst_1))))) (OfNat.ofNat.{u2} N 1 (OfNat.mk.{u2} N 1 (One.one.{u2} N (MulOneClass.toHasOne.{u2} N _inst_2))))) (hmul : forall (x : M) (y : M), Eq.{succ u2} N (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MonoidHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MonoidHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f (HMul.hMul.{u1, u1, u1} M M M (instHMul.{u1} M (MulOneClass.toHasMul.{u1} M _inst_1)) x y)) (HMul.hMul.{u2, u2, u2} N N N (instHMul.{u2} N (MulOneClass.toHasMul.{u2} N _inst_2)) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MonoidHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MonoidHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f x) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MonoidHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MonoidHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f y))), Eq.{max (succ u2) (succ u1)} (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.mk.{u1, u2} M N _inst_1 _inst_2 (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MonoidHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MonoidHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f) h1 hmul) f
-but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u1} N] (f : MonoidHom.{u2, u1} M N _inst_1 _inst_2) (h1 : forall (x : M) (y : M), Eq.{succ u1} N (OneHom.toFun.{u2, u1} M N (MulOneClass.toOne.{u2} M _inst_1) (MulOneClass.toOne.{u1} N _inst_2) (OneHomClass.toOneHom.{u2, u1, max u2 u1} M N (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MulOneClass.toOne.{u2} M _inst_1) (MulOneClass.toOne.{u1} N _inst_2) (MonoidHomClass.toOneHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2)) f) (HMul.hMul.{u2, u2, u2} M M M (instHMul.{u2} M (MulOneClass.toMul.{u2} M _inst_1)) x y)) (HMul.hMul.{u1, u1, u1} N N N (instHMul.{u1} N (MulOneClass.toMul.{u1} N _inst_2)) (OneHom.toFun.{u2, u1} M N (MulOneClass.toOne.{u2} M _inst_1) (MulOneClass.toOne.{u1} N _inst_2) (OneHomClass.toOneHom.{u2, u1, max u2 u1} M N (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MulOneClass.toOne.{u2} M _inst_1) (MulOneClass.toOne.{u1} N _inst_2) (MonoidHomClass.toOneHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2)) f) x) (OneHom.toFun.{u2, u1} M N (MulOneClass.toOne.{u2} M _inst_1) (MulOneClass.toOne.{u1} N _inst_2) (OneHomClass.toOneHom.{u2, u1, max u2 u1} M N (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MulOneClass.toOne.{u2} M _inst_1) (MulOneClass.toOne.{u1} N _inst_2) (MonoidHomClass.toOneHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2)) f) y))), Eq.{max (succ u2) (succ u1)} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.mk.{u2, u1} M N _inst_1 _inst_2 (OneHomClass.toOneHom.{u2, u1, max u2 u1} M N (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MulOneClass.toOne.{u2} M _inst_1) (MulOneClass.toOne.{u1} N _inst_2) (MonoidHomClass.toOneHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2)) f) h1) f
-Case conversion may be inaccurate. Consider using '#align monoid_hom.mk_coe MonoidHom.mk_coeₓ'. -/
 @[simp, to_additive]
 theorem MonoidHom.mk_coe [MulOneClass M] [MulOneClass N] (f : M →* N) (h1 hmul) :
     MonoidHom.mk f h1 hmul = f :=
@@ -1224,12 +876,6 @@ theorem MonoidHom.mk_coe [MulOneClass M] [MulOneClass N] (f : M →* N) (h1 hmul
 #align monoid_hom.mk_coe MonoidHom.mk_coe
 #align add_monoid_hom.mk_coe AddMonoidHom.mk_coe
 
-/- warning: monoid_with_zero_hom.mk_coe -> MonoidWithZeroHom.mk_coe is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulZeroOneClass.{u1} M] [_inst_2 : MulZeroOneClass.{u2} N] (f : MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) (h0 : Eq.{succ u2} N (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MonoidWithZeroHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) 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} N 0 (OfNat.mk.{u2} N 0 (Zero.zero.{u2} N (MulZeroClass.toHasZero.{u2} N (MulZeroOneClass.toMulZeroClass.{u2} N _inst_2)))))) (h1 : Eq.{succ u2} N (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MonoidWithZeroHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) 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} N 1 (OfNat.mk.{u2} N 1 (One.one.{u2} N (MulOneClass.toHasOne.{u2} N (MulZeroOneClass.toMulOneClass.{u2} N _inst_2)))))) (hmul : forall (x : M) (y : M), Eq.{succ u2} N (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MonoidWithZeroHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f (HMul.hMul.{u1, u1, u1} M M M (instHMul.{u1} M (MulOneClass.toHasMul.{u1} M (MulZeroOneClass.toMulOneClass.{u1} M _inst_1))) x y)) (HMul.hMul.{u2, u2, u2} N N N (instHMul.{u2} N (MulOneClass.toHasMul.{u2} N (MulZeroOneClass.toMulOneClass.{u2} N _inst_2))) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MonoidWithZeroHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f x) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MonoidWithZeroHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f y))), Eq.{max (succ u2) (succ u1)} (MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) (MonoidWithZeroHom.mk.{u1, u2} M N _inst_1 _inst_2 (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MonoidWithZeroHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f) h0 h1 hmul) f
-but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : MulZeroOneClass.{u2} M] [_inst_2 : MulZeroOneClass.{u1} N] (f : MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) (h0 : Eq.{succ u1} N (ZeroHom.toFun.{u2, u1} M N (MulZeroOneClass.toZero.{u2} M _inst_1) (MulZeroOneClass.toZero.{u1} N _inst_2) (ZeroHomClass.toZeroHom.{u2, u1, max u2 u1} M N (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) (MulZeroOneClass.toZero.{u2} M _inst_1) (MulZeroOneClass.toZero.{u1} N _inst_2) (MonoidWithZeroHomClass.toZeroHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidWithZeroHom.monoidWithZeroHomClass.{u2, u1} M N _inst_1 _inst_2)) f) (OfNat.ofNat.{u2} M 1 (One.toOfNat1.{u2} M (MulOneClass.toOne.{u2} M (MulZeroOneClass.toMulOneClass.{u2} M _inst_1))))) (OfNat.ofNat.{u1} N 1 (One.toOfNat1.{u1} N (MulOneClass.toOne.{u1} N (MulZeroOneClass.toMulOneClass.{u1} N _inst_2))))) (h1 : forall (x : M) (y : M), Eq.{succ u1} N (ZeroHom.toFun.{u2, u1} M N (MulZeroOneClass.toZero.{u2} M _inst_1) (MulZeroOneClass.toZero.{u1} N _inst_2) (ZeroHomClass.toZeroHom.{u2, u1, max u2 u1} M N (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) (MulZeroOneClass.toZero.{u2} M _inst_1) (MulZeroOneClass.toZero.{u1} N _inst_2) (MonoidWithZeroHomClass.toZeroHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidWithZeroHom.monoidWithZeroHomClass.{u2, u1} M N _inst_1 _inst_2)) f) (HMul.hMul.{u2, u2, u2} M M M (instHMul.{u2} M (MulOneClass.toMul.{u2} M (MulZeroOneClass.toMulOneClass.{u2} M _inst_1))) x y)) (HMul.hMul.{u1, u1, u1} N N N (instHMul.{u1} N (MulOneClass.toMul.{u1} N (MulZeroOneClass.toMulOneClass.{u1} N _inst_2))) (ZeroHom.toFun.{u2, u1} M N (MulZeroOneClass.toZero.{u2} M _inst_1) (MulZeroOneClass.toZero.{u1} N _inst_2) (ZeroHomClass.toZeroHom.{u2, u1, max u2 u1} M N (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) (MulZeroOneClass.toZero.{u2} M _inst_1) (MulZeroOneClass.toZero.{u1} N _inst_2) (MonoidWithZeroHomClass.toZeroHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidWithZeroHom.monoidWithZeroHomClass.{u2, u1} M N _inst_1 _inst_2)) f) x) (ZeroHom.toFun.{u2, u1} M N (MulZeroOneClass.toZero.{u2} M _inst_1) (MulZeroOneClass.toZero.{u1} N _inst_2) (ZeroHomClass.toZeroHom.{u2, u1, max u2 u1} M N (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) (MulZeroOneClass.toZero.{u2} M _inst_1) (MulZeroOneClass.toZero.{u1} N _inst_2) (MonoidWithZeroHomClass.toZeroHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidWithZeroHom.monoidWithZeroHomClass.{u2, u1} M N _inst_1 _inst_2)) f) y))), Eq.{max (succ u2) (succ u1)} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) (MonoidWithZeroHom.mk.{u2, u1} M N _inst_1 _inst_2 (ZeroHomClass.toZeroHom.{u2, u1, max u2 u1} M N (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) (MulZeroOneClass.toZero.{u2} M _inst_1) (MulZeroOneClass.toZero.{u1} N _inst_2) (MonoidWithZeroHomClass.toZeroHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidWithZeroHom.monoidWithZeroHomClass.{u2, u1} M N _inst_1 _inst_2)) f) h0 h1) f
-Case conversion may be inaccurate. Consider using '#align monoid_with_zero_hom.mk_coe MonoidWithZeroHom.mk_coeₓ'. -/
 @[simp]
 theorem MonoidWithZeroHom.mk_coe [MulZeroOneClass M] [MulZeroOneClass N] (f : M →*₀ N)
     (h0 h1 hmul) : MonoidWithZeroHom.mk f h0 h1 hmul = f :=
@@ -1251,12 +897,6 @@ protected def OneHom.copy {hM : One M} {hN : One N} (f : OneHom M N) (f' : M →
 #align zero_hom.copy ZeroHom.copy
 -/
 
-/- warning: one_hom.coe_copy -> OneHom.coe_copy is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} {N : Type.{u2}} {hM : One.{u1} M} {hN : One.{u2} N} (f : OneHom.{u1, u2} M N hM hN) (f' : M -> N) (h : Eq.{max (succ u1) (succ u2)} (M -> N) f' (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (OneHom.{u1, u2} M N hM hN) (fun (_x : OneHom.{u1, u2} M N hM hN) => M -> N) (OneHom.hasCoeToFun.{u1, u2} M N hM hN) f)), Eq.{max (succ u1) (succ u2)} (M -> N) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (OneHom.{u1, u2} M N hM hN) (fun (_x : OneHom.{u1, u2} M N hM hN) => M -> N) (OneHom.hasCoeToFun.{u1, u2} M N hM hN) (OneHom.copy.{u1, u2} M N hM hN f f' h)) f'
-but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} {hM : One.{u2} M} {hN : One.{u1} N} (f : OneHom.{u2, u1} M N hM hN) (f' : M -> N) (h : Eq.{max (succ u2) (succ u1)} (M -> N) f' (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (OneHom.{u2, u1} M N hM hN) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1264 : M) => N) _x) (OneHomClass.toFunLike.{max u2 u1, u2, u1} (OneHom.{u2, u1} M N hM hN) M N hM hN (OneHom.oneHomClass.{u2, u1} M N hM hN)) f)), Eq.{max (succ u2) (succ u1)} (forall (ᾰ : M), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1264 : M) => N) ᾰ) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (OneHom.{u2, u1} M N hM hN) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1264 : M) => N) _x) (OneHomClass.toFunLike.{max u2 u1, u2, u1} (OneHom.{u2, u1} M N hM hN) M N hM hN (OneHom.oneHomClass.{u2, u1} M N hM hN)) (OneHom.copy.{u2, u1} M N hM hN f f' h)) f'
-Case conversion may be inaccurate. Consider using '#align one_hom.coe_copy OneHom.coe_copyₓ'. -/
 @[simp, to_additive]
 theorem OneHom.coe_copy {hM : One M} {hN : One N} (f : OneHom M N) (f' : M → N) (h : f' = f) :
     ⇑(f.copy f' h) = f' :=
@@ -1264,12 +904,6 @@ theorem OneHom.coe_copy {hM : One M} {hN : One N} (f : OneHom M N) (f' : M → N
 #align one_hom.coe_copy OneHom.coe_copy
 #align zero_hom.coe_copy ZeroHom.coe_copy
 
-/- warning: one_hom.coe_copy_eq -> OneHom.coe_copy_eq is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} {N : Type.{u2}} {hM : One.{u1} M} {hN : One.{u2} N} (f : OneHom.{u1, u2} M N hM hN) (f' : M -> N) (h : Eq.{max (succ u1) (succ u2)} (M -> N) f' (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (OneHom.{u1, u2} M N hM hN) (fun (_x : OneHom.{u1, u2} M N hM hN) => M -> N) (OneHom.hasCoeToFun.{u1, u2} M N hM hN) f)), Eq.{max (succ u2) (succ u1)} (OneHom.{u1, u2} M N hM hN) (OneHom.copy.{u1, u2} M N hM hN f f' h) f
-but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} {hM : One.{u2} M} {hN : One.{u1} N} (f : OneHom.{u2, u1} M N hM hN) (f' : M -> N) (h : Eq.{max (succ u2) (succ u1)} (M -> N) f' (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (OneHom.{u2, u1} M N hM hN) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1264 : M) => N) _x) (OneHomClass.toFunLike.{max u2 u1, u2, u1} (OneHom.{u2, u1} M N hM hN) M N hM hN (OneHom.oneHomClass.{u2, u1} M N hM hN)) f)), Eq.{max (succ u2) (succ u1)} (OneHom.{u2, u1} M N hM hN) (OneHom.copy.{u2, u1} M N hM hN f f' h) f
-Case conversion may be inaccurate. Consider using '#align one_hom.coe_copy_eq OneHom.coe_copy_eqₓ'. -/
 @[to_additive]
 theorem OneHom.coe_copy_eq {hM : One M} {hN : One N} (f : OneHom M N) (f' : M → N) (h : f' = f) :
     f.copy f' h = f :=
@@ -1290,12 +924,6 @@ protected def MulHom.copy {hM : Mul M} {hN : Mul N} (f : M →ₙ* N) (f' : M 
 #align add_hom.copy AddHom.copy
 -/
 
-/- warning: mul_hom.coe_copy -> MulHom.coe_copy is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} {N : Type.{u2}} {hM : Mul.{u1} M} {hN : Mul.{u2} N} (f : MulHom.{u1, u2} M N hM hN) (f' : M -> N) (h : Eq.{max (succ u1) (succ u2)} (M -> N) f' (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MulHom.{u1, u2} M N hM hN) (fun (_x : MulHom.{u1, u2} M N hM hN) => M -> N) (MulHom.hasCoeToFun.{u1, u2} M N hM hN) f)), Eq.{max (succ u1) (succ u2)} (M -> N) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MulHom.{u1, u2} M N hM hN) (fun (_x : MulHom.{u1, u2} M N hM hN) => M -> N) (MulHom.hasCoeToFun.{u1, u2} M N hM hN) (MulHom.copy.{u1, u2} M N hM hN f f' h)) f'
-but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} {hM : Mul.{u2} M} {hN : Mul.{u1} N} (f : MulHom.{u2, u1} M N hM hN) (f' : M -> N) (h : Eq.{max (succ u2) (succ u1)} (M -> N) f' (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N hM hN) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N hM hN) M N hM hN (MulHom.mulHomClass.{u2, u1} M N hM hN)) f)), Eq.{max (succ u2) (succ u1)} (forall (ᾰ : M), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) ᾰ) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N hM hN) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N hM hN) M N hM hN (MulHom.mulHomClass.{u2, u1} M N hM hN)) (MulHom.copy.{u2, u1} M N hM hN f f' h)) f'
-Case conversion may be inaccurate. Consider using '#align mul_hom.coe_copy MulHom.coe_copyₓ'. -/
 @[simp, to_additive]
 theorem MulHom.coe_copy {hM : Mul M} {hN : Mul N} (f : M →ₙ* N) (f' : M → N) (h : f' = f) :
     ⇑(f.copy f' h) = f' :=
@@ -1303,12 +931,6 @@ theorem MulHom.coe_copy {hM : Mul M} {hN : Mul N} (f : M →ₙ* N) (f' : M →
 #align mul_hom.coe_copy MulHom.coe_copy
 #align add_hom.coe_copy AddHom.coe_copy
 
-/- warning: mul_hom.coe_copy_eq -> MulHom.coe_copy_eq is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} {N : Type.{u2}} {hM : Mul.{u1} M} {hN : Mul.{u2} N} (f : MulHom.{u1, u2} M N hM hN) (f' : M -> N) (h : Eq.{max (succ u1) (succ u2)} (M -> N) f' (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MulHom.{u1, u2} M N hM hN) (fun (_x : MulHom.{u1, u2} M N hM hN) => M -> N) (MulHom.hasCoeToFun.{u1, u2} M N hM hN) f)), Eq.{max (succ u2) (succ u1)} (MulHom.{u1, u2} M N hM hN) (MulHom.copy.{u1, u2} M N hM hN f f' h) f
-but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} {hM : Mul.{u2} M} {hN : Mul.{u1} N} (f : MulHom.{u2, u1} M N hM hN) (f' : M -> N) (h : Eq.{max (succ u2) (succ u1)} (M -> N) f' (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N hM hN) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N hM hN) M N hM hN (MulHom.mulHomClass.{u2, u1} M N hM hN)) f)), Eq.{max (succ u2) (succ u1)} (MulHom.{u2, u1} M N hM hN) (MulHom.copy.{u2, u1} M N hM hN f f' h) f
-Case conversion may be inaccurate. Consider using '#align mul_hom.coe_copy_eq MulHom.coe_copy_eqₓ'. -/
 @[to_additive]
 theorem MulHom.coe_copy_eq {hM : Mul M} {hN : Mul N} (f : M →ₙ* N) (f' : M → N) (h : f' = f) :
     f.copy f' h = f :=
@@ -1316,12 +938,6 @@ theorem MulHom.coe_copy_eq {hM : Mul M} {hN : Mul N} (f : M →ₙ* N) (f' : M 
 #align mul_hom.coe_copy_eq MulHom.coe_copy_eq
 #align add_hom.coe_copy_eq AddHom.coe_copy_eq
 
-/- warning: monoid_hom.copy -> MonoidHom.copy is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} {N : Type.{u2}} {hM : MulOneClass.{u1} M} {hN : MulOneClass.{u2} N} (f : MonoidHom.{u1, u2} M N hM hN) (f' : M -> N), (Eq.{max (succ u1) (succ u2)} (M -> N) f' (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} M N hM hN) (fun (_x : MonoidHom.{u1, u2} M N hM hN) => M -> N) (MonoidHom.hasCoeToFun.{u1, u2} M N hM hN) f)) -> (MonoidHom.{u1, u2} M N hM hN)
-but is expected to have type
-  forall {M : Type.{u1}} {N : Type.{u2}} [hM : MulOneClass.{u1} M] [hN : MulOneClass.{u2} N] (f : MonoidHom.{u1, u2} M N hM hN) (f' : M -> N), (Eq.{max (succ u1) (succ u2)} (M -> N) f' (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (MonoidHom.{u1, u2} M N hM hN) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{max u1 u2, u1, u2} (MonoidHom.{u1, u2} M N hM hN) M N (MulOneClass.toMul.{u1} M hM) (MulOneClass.toMul.{u2} N hN) (MonoidHomClass.toMulHomClass.{max u1 u2, u1, u2} (MonoidHom.{u1, u2} M N hM hN) M N hM hN (MonoidHom.monoidHomClass.{u1, u2} M N hM hN))) f)) -> (MonoidHom.{u1, u2} M N hM hN)
-Case conversion may be inaccurate. Consider using '#align monoid_hom.copy MonoidHom.copyₓ'. -/
 /-- Copy of a `monoid_hom` with a new `to_fun` equal to the old one. Useful to fix
 definitional equalities. -/
 @[to_additive
@@ -1332,12 +948,6 @@ protected def MonoidHom.copy {hM : MulOneClass M} {hN : MulOneClass N} (f : M 
 #align monoid_hom.copy MonoidHom.copy
 #align add_monoid_hom.copy AddMonoidHom.copy
 
-/- warning: monoid_hom.coe_copy -> MonoidHom.coe_copy is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} {N : Type.{u2}} {hM : MulOneClass.{u1} M} {hN : MulOneClass.{u2} N} (f : MonoidHom.{u1, u2} M N hM hN) (f' : M -> N) (h : Eq.{max (succ u1) (succ u2)} (M -> N) f' (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} M N hM hN) (fun (_x : MonoidHom.{u1, u2} M N hM hN) => M -> N) (MonoidHom.hasCoeToFun.{u1, u2} M N hM hN) f)), Eq.{max (succ u1) (succ u2)} (M -> N) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} M N hM hN) (fun (_x : MonoidHom.{u1, u2} M N hM hN) => M -> N) (MonoidHom.hasCoeToFun.{u1, u2} M N hM hN) (MonoidHom.copy.{u1, u2} M N hM hN f f' h)) f'
-but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} {hM : MulOneClass.{u2} M} {hN : MulOneClass.{u1} N} (f : MonoidHom.{u2, u1} M N hM hN) (f' : M -> N) (h : Eq.{max (succ u2) (succ u1)} (M -> N) f' (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M N hM hN) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N hM hN) M N (MulOneClass.toMul.{u2} M hM) (MulOneClass.toMul.{u1} N hN) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N hM hN) M N hM hN (MonoidHom.monoidHomClass.{u2, u1} M N hM hN))) f)), Eq.{max (succ u2) (succ u1)} (forall (ᾰ : M), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) ᾰ) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M N hM hN) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N hM hN) M N (MulOneClass.toMul.{u2} M hM) (MulOneClass.toMul.{u1} N hN) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N hM hN) M N hM hN (MonoidHom.monoidHomClass.{u2, u1} M N hM hN))) (MonoidHom.copy.{u2, u1} M N hM hN f f' h)) f'
-Case conversion may be inaccurate. Consider using '#align monoid_hom.coe_copy MonoidHom.coe_copyₓ'. -/
 @[simp, to_additive]
 theorem MonoidHom.coe_copy {hM : MulOneClass M} {hN : MulOneClass N} (f : M →* N) (f' : M → N)
     (h : f' = f) : ⇑(f.copy f' h) = f' :=
@@ -1345,12 +955,6 @@ theorem MonoidHom.coe_copy {hM : MulOneClass M} {hN : MulOneClass N} (f : M →*
 #align monoid_hom.coe_copy MonoidHom.coe_copy
 #align add_monoid_hom.coe_copy AddMonoidHom.coe_copy
 
-/- warning: monoid_hom.copy_eq -> MonoidHom.copy_eq is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} {N : Type.{u2}} {hM : MulOneClass.{u1} M} {hN : MulOneClass.{u2} N} (f : MonoidHom.{u1, u2} M N hM hN) (f' : M -> N) (h : Eq.{max (succ u1) (succ u2)} (M -> N) f' (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} M N hM hN) (fun (_x : MonoidHom.{u1, u2} M N hM hN) => M -> N) (MonoidHom.hasCoeToFun.{u1, u2} M N hM hN) f)), Eq.{max (succ u2) (succ u1)} (MonoidHom.{u1, u2} M N hM hN) (MonoidHom.copy.{u1, u2} M N hM hN f f' h) f
-but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} {hM : MulOneClass.{u2} M} {hN : MulOneClass.{u1} N} (f : MonoidHom.{u2, u1} M N hM hN) (f' : M -> N) (h : Eq.{max (succ u2) (succ u1)} (M -> N) f' (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M N hM hN) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N hM hN) M N (MulOneClass.toMul.{u2} M hM) (MulOneClass.toMul.{u1} N hN) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N hM hN) M N hM hN (MonoidHom.monoidHomClass.{u2, u1} M N hM hN))) f)), Eq.{max (succ u2) (succ u1)} (MonoidHom.{u2, u1} M N hM hN) (MonoidHom.copy.{u2, u1} M N hM hN f f' h) f
-Case conversion may be inaccurate. Consider using '#align monoid_hom.copy_eq MonoidHom.copy_eqₓ'. -/
 @[to_additive]
 theorem MonoidHom.copy_eq {hM : MulOneClass M} {hN : MulOneClass N} (f : M →* N) (f' : M → N)
     (h : f' = f) : f.copy f' h = f :=
@@ -1358,12 +962,6 @@ theorem MonoidHom.copy_eq {hM : MulOneClass M} {hN : MulOneClass N} (f : M →*
 #align monoid_hom.copy_eq MonoidHom.copy_eq
 #align add_monoid_hom.copy_eq AddMonoidHom.copy_eq
 
-/- warning: monoid_with_zero_hom.copy -> MonoidWithZeroHom.copy is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} {N : Type.{u2}} {hM : MulZeroOneClass.{u1} M} {hN : MulZeroOneClass.{u2} N} (f : MonoidWithZeroHom.{u1, u2} M N hM hN) (f' : M -> N), (Eq.{max (succ u1) (succ u2)} (M -> N) f' (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidWithZeroHom.{u1, u2} M N hM hN) (fun (_x : MonoidWithZeroHom.{u1, u2} M N hM hN) => M -> N) (MonoidWithZeroHom.hasCoeToFun.{u1, u2} M N hM hN) f)) -> (MonoidHom.{u1, u2} M N (MulZeroOneClass.toMulOneClass.{u1} M hM) (MulZeroOneClass.toMulOneClass.{u2} N hN))
-but is expected to have type
-  forall {M : Type.{u1}} {N : Type.{u2}} [hM : MulZeroOneClass.{u1} M] [hN : MulZeroOneClass.{u2} N] (f : MonoidWithZeroHom.{u1, u2} M N hM hN) (f' : M -> N), (Eq.{max (succ u1) (succ u2)} (M -> N) f' (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (MonoidWithZeroHom.{u1, u2} M N hM hN) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{max u1 u2, u1, u2} (MonoidWithZeroHom.{u1, u2} M N hM hN) M N (MulOneClass.toMul.{u1} M (MulZeroOneClass.toMulOneClass.{u1} M hM)) (MulOneClass.toMul.{u2} N (MulZeroOneClass.toMulOneClass.{u2} N hN)) (MonoidHomClass.toMulHomClass.{max u1 u2, u1, u2} (MonoidWithZeroHom.{u1, u2} M N hM hN) M N (MulZeroOneClass.toMulOneClass.{u1} M hM) (MulZeroOneClass.toMulOneClass.{u2} N hN) (MonoidWithZeroHomClass.toMonoidHomClass.{max u1 u2, u1, u2} (MonoidWithZeroHom.{u1, u2} M N hM hN) M N hM hN (MonoidWithZeroHom.monoidWithZeroHomClass.{u1, u2} M N hM hN)))) f)) -> (MonoidHom.{u1, u2} M N (MulZeroOneClass.toMulOneClass.{u1} M hM) (MulZeroOneClass.toMulOneClass.{u2} N hN))
-Case conversion may be inaccurate. Consider using '#align monoid_with_zero_hom.copy MonoidWithZeroHom.copyₓ'. -/
 /-- Copy of a `monoid_hom` with a new `to_fun` equal to the old one. Useful to fix
 definitional equalities. -/
 protected def MonoidWithZeroHom.copy {hM : MulZeroOneClass M} {hN : MulZeroOneClass N} (f : M →*₀ N)
@@ -1371,47 +969,23 @@ protected def MonoidWithZeroHom.copy {hM : MulZeroOneClass M} {hN : MulZeroOneCl
   { f.toZeroHom.copy f' h, f.toMonoidHom.copy f' h with }
 #align monoid_with_zero_hom.copy MonoidWithZeroHom.copy
 
-/- warning: monoid_with_zero_hom.coe_copy -> MonoidWithZeroHom.coe_copy is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} {N : Type.{u2}} {hM : MulZeroOneClass.{u1} M} {hN : MulZeroOneClass.{u2} N} (f : MonoidWithZeroHom.{u1, u2} M N hM hN) (f' : M -> N) (h : Eq.{max (succ u1) (succ u2)} (M -> N) f' (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidWithZeroHom.{u1, u2} M N hM hN) (fun (_x : MonoidWithZeroHom.{u1, u2} M N hM hN) => M -> N) (MonoidWithZeroHom.hasCoeToFun.{u1, u2} M N hM hN) f)), Eq.{max (succ u1) (succ u2)} (M -> N) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} M N (MulZeroOneClass.toMulOneClass.{u1} M hM) (MulZeroOneClass.toMulOneClass.{u2} N hN)) (fun (_x : MonoidHom.{u1, u2} M N (MulZeroOneClass.toMulOneClass.{u1} M hM) (MulZeroOneClass.toMulOneClass.{u2} N hN)) => M -> N) (MonoidHom.hasCoeToFun.{u1, u2} M N (MulZeroOneClass.toMulOneClass.{u1} M hM) (MulZeroOneClass.toMulOneClass.{u2} N hN)) (MonoidWithZeroHom.copy.{u1, u2} M N hM hN f f' h)) f'
-but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} {hM : MulZeroOneClass.{u2} M} {hN : MulZeroOneClass.{u1} N} (f : MonoidWithZeroHom.{u2, u1} M N hM hN) (f' : M -> N) (h : Eq.{max (succ u2) (succ u1)} (M -> N) f' (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidWithZeroHom.{u2, u1} M N hM hN) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N hM hN) M N (MulOneClass.toMul.{u2} M (MulZeroOneClass.toMulOneClass.{u2} M hM)) (MulOneClass.toMul.{u1} N (MulZeroOneClass.toMulOneClass.{u1} N hN)) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N hM hN) M N (MulZeroOneClass.toMulOneClass.{u2} M hM) (MulZeroOneClass.toMulOneClass.{u1} N hN) (MonoidWithZeroHomClass.toMonoidHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N hM hN) M N hM hN (MonoidWithZeroHom.monoidWithZeroHomClass.{u2, u1} M N hM hN)))) f)), Eq.{max (succ u2) (succ u1)} (forall (ᾰ : M), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) ᾰ) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M N (MulZeroOneClass.toMulOneClass.{u2} M hM) (MulZeroOneClass.toMulOneClass.{u1} N hN)) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N (MulZeroOneClass.toMulOneClass.{u2} M hM) (MulZeroOneClass.toMulOneClass.{u1} N hN)) M N (MulOneClass.toMul.{u2} M (MulZeroOneClass.toMulOneClass.{u2} M hM)) (MulOneClass.toMul.{u1} N (MulZeroOneClass.toMulOneClass.{u1} N hN)) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N (MulZeroOneClass.toMulOneClass.{u2} M hM) (MulZeroOneClass.toMulOneClass.{u1} N hN)) M N (MulZeroOneClass.toMulOneClass.{u2} M hM) (MulZeroOneClass.toMulOneClass.{u1} N hN) (MonoidHom.monoidHomClass.{u2, u1} M N (MulZeroOneClass.toMulOneClass.{u2} M hM) (MulZeroOneClass.toMulOneClass.{u1} N hN)))) (MonoidWithZeroHom.copy.{u2, u1} M N hM hN f f' h)) f'
-Case conversion may be inaccurate. Consider using '#align monoid_with_zero_hom.coe_copy MonoidWithZeroHom.coe_copyₓ'. -/
 @[simp]
 theorem MonoidWithZeroHom.coe_copy {hM : MulZeroOneClass M} {hN : MulZeroOneClass N} (f : M →*₀ N)
     (f' : M → N) (h : f' = f) : ⇑(f.copy f' h) = f' :=
   rfl
 #align monoid_with_zero_hom.coe_copy MonoidWithZeroHom.coe_copy
 
-/- warning: monoid_with_zero_hom.copy_eq -> MonoidWithZeroHom.copy_eq is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} {N : Type.{u2}} {hM : MulZeroOneClass.{u1} M} {hN : MulZeroOneClass.{u2} N} (f : MonoidWithZeroHom.{u1, u2} M N hM hN) (f' : M -> N) (h : Eq.{max (succ u1) (succ u2)} (M -> N) f' (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidWithZeroHom.{u1, u2} M N hM hN) (fun (_x : MonoidWithZeroHom.{u1, u2} M N hM hN) => M -> N) (MonoidWithZeroHom.hasCoeToFun.{u1, u2} M N hM hN) f)), Eq.{max (succ u2) (succ u1)} (MonoidHom.{u1, u2} M N (MulZeroOneClass.toMulOneClass.{u1} M hM) (MulZeroOneClass.toMulOneClass.{u2} N hN)) (MonoidWithZeroHom.copy.{u1, u2} M N hM hN f f' h) ((fun (a : Sort.{max (succ u2) (succ u1)}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{max (succ u2) (succ u1), max (succ u2) (succ u1)} a b] => self.0) (MonoidWithZeroHom.{u1, u2} M N hM hN) (MonoidHom.{u1, u2} M N (MulZeroOneClass.toMulOneClass.{u1} M hM) (MulZeroOneClass.toMulOneClass.{u2} N hN)) (HasLiftT.mk.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (MonoidWithZeroHom.{u1, u2} M N hM hN) (MonoidHom.{u1, u2} M N (MulZeroOneClass.toMulOneClass.{u1} M hM) (MulZeroOneClass.toMulOneClass.{u2} N hN)) (CoeTCₓ.coe.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (MonoidWithZeroHom.{u1, u2} M N hM hN) (MonoidHom.{u1, u2} M N (MulZeroOneClass.toMulOneClass.{u1} M hM) (MulZeroOneClass.toMulOneClass.{u2} N hN)) (MonoidHom.hasCoeT.{u1, u2, max u2 u1} M N (MonoidWithZeroHom.{u1, u2} M N hM hN) (MulZeroOneClass.toMulOneClass.{u1} M hM) (MulZeroOneClass.toMulOneClass.{u2} N hN) (MonoidWithZeroHomClass.toMonoidHomClass.{max u2 u1, u1, u2} (MonoidWithZeroHom.{u1, u2} M N hM hN) M N hM hN (MonoidWithZeroHom.monoidWithZeroHomClass.{u1, u2} M N hM hN))))) f)
-but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} {hM : MulZeroOneClass.{u2} M} {hN : MulZeroOneClass.{u1} N} (f : MonoidWithZeroHom.{u2, u1} M N hM hN) (f' : M -> N) (h : Eq.{max (succ u2) (succ u1)} (M -> N) f' (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidWithZeroHom.{u2, u1} M N hM hN) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N hM hN) M N (MulOneClass.toMul.{u2} M (MulZeroOneClass.toMulOneClass.{u2} M hM)) (MulOneClass.toMul.{u1} N (MulZeroOneClass.toMulOneClass.{u1} N hN)) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N hM hN) M N (MulZeroOneClass.toMulOneClass.{u2} M hM) (MulZeroOneClass.toMulOneClass.{u1} N hN) (MonoidWithZeroHomClass.toMonoidHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N hM hN) M N hM hN (MonoidWithZeroHom.monoidWithZeroHomClass.{u2, u1} M N hM hN)))) f)), Eq.{max (succ u2) (succ u1)} (MonoidHom.{u2, u1} M N (MulZeroOneClass.toMulOneClass.{u2} M hM) (MulZeroOneClass.toMulOneClass.{u1} N hN)) (MonoidWithZeroHom.copy.{u2, u1} M N hM hN f f' h) (MonoidHomClass.toMonoidHom.{u2, u1, max u2 u1} M N (MonoidWithZeroHom.{u2, u1} M N hM hN) (MulZeroOneClass.toMulOneClass.{u2} M hM) (MulZeroOneClass.toMulOneClass.{u1} N hN) (MonoidWithZeroHomClass.toMonoidHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N hM hN) M N hM hN (MonoidWithZeroHom.monoidWithZeroHomClass.{u2, u1} M N hM hN)) f)
-Case conversion may be inaccurate. Consider using '#align monoid_with_zero_hom.copy_eq MonoidWithZeroHom.copy_eqₓ'. -/
 theorem MonoidWithZeroHom.copy_eq {hM : MulZeroOneClass M} {hN : MulZeroOneClass N} (f : M →*₀ N)
     (f' : M → N) (h : f' = f) : f.copy f' h = f :=
   FunLike.ext' h
 #align monoid_with_zero_hom.copy_eq MonoidWithZeroHom.copy_eq
 
-/- warning: one_hom.map_one -> OneHom.map_one is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : One.{u1} M] [_inst_2 : One.{u2} N] (f : OneHom.{u1, u2} M N _inst_1 _inst_2), Eq.{succ u2} N (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (OneHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : OneHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (OneHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f (OfNat.ofNat.{u1} M 1 (OfNat.mk.{u1} M 1 (One.one.{u1} M _inst_1)))) (OfNat.ofNat.{u2} N 1 (OfNat.mk.{u2} N 1 (One.one.{u2} N _inst_2)))
-but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : One.{u2} M] [_inst_2 : One.{u1} N] (f : OneHom.{u2, u1} M N _inst_1 _inst_2), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1264 : M) => N) (OfNat.ofNat.{u2} M 1 (One.toOfNat1.{u2} M _inst_1))) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (OneHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1264 : M) => N) _x) (OneHomClass.toFunLike.{max u2 u1, u2, u1} (OneHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (OneHom.oneHomClass.{u2, u1} M N _inst_1 _inst_2)) f (OfNat.ofNat.{u2} M 1 (One.toOfNat1.{u2} M _inst_1))) (OfNat.ofNat.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1264 : M) => N) (OfNat.ofNat.{u2} M 1 (One.toOfNat1.{u2} M _inst_1))) 1 (One.toOfNat1.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1264 : M) => N) (OfNat.ofNat.{u2} M 1 (One.toOfNat1.{u2} M _inst_1))) _inst_2))
-Case conversion may be inaccurate. Consider using '#align one_hom.map_one OneHom.map_oneₓ'. -/
 @[to_additive]
 protected theorem OneHom.map_one [One M] [One N] (f : OneHom M N) : f 1 = 1 :=
   f.map_one'
 #align one_hom.map_one OneHom.map_one
 #align zero_hom.map_zero ZeroHom.map_zero
 
-/- warning: monoid_hom.map_one -> MonoidHom.map_one is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N] (f : MonoidHom.{u1, u2} M N _inst_1 _inst_2), Eq.{succ u2} N (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MonoidHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MonoidHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f (OfNat.ofNat.{u1} M 1 (OfNat.mk.{u1} M 1 (One.one.{u1} M (MulOneClass.toHasOne.{u1} M _inst_1))))) (OfNat.ofNat.{u2} N 1 (OfNat.mk.{u2} N 1 (One.one.{u2} N (MulOneClass.toHasOne.{u2} N _inst_2))))
-but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u1} N] (f : MonoidHom.{u2, u1} M N _inst_1 _inst_2), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) (OfNat.ofNat.{u2} M 1 (One.toOfNat1.{u2} M (MulOneClass.toOne.{u2} M _inst_1)))) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2))) f (OfNat.ofNat.{u2} M 1 (One.toOfNat1.{u2} M (MulOneClass.toOne.{u2} M _inst_1)))) (OfNat.ofNat.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) (OfNat.ofNat.{u2} M 1 (One.toOfNat1.{u2} M (MulOneClass.toOne.{u2} M _inst_1)))) 1 (One.toOfNat1.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) (OfNat.ofNat.{u2} M 1 (One.toOfNat1.{u2} M (MulOneClass.toOne.{u2} M _inst_1)))) (MulOneClass.toOne.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) (OfNat.ofNat.{u2} M 1 (One.toOfNat1.{u2} M (MulOneClass.toOne.{u2} M _inst_1)))) _inst_2)))
-Case conversion may be inaccurate. Consider using '#align monoid_hom.map_one MonoidHom.map_oneₓ'. -/
 /-- If `f` is a monoid homomorphism then `f 1 = 1`. -/
 @[to_additive]
 protected theorem MonoidHom.map_one [MulOneClass M] [MulOneClass N] (f : M →* N) : f 1 = 1 :=
@@ -1419,12 +993,6 @@ protected theorem MonoidHom.map_one [MulOneClass M] [MulOneClass N] (f : M →*
 #align monoid_hom.map_one MonoidHom.map_one
 #align add_monoid_hom.map_zero AddMonoidHom.map_zero
 
-/- warning: monoid_with_zero_hom.map_one -> MonoidWithZeroHom.map_one is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulZeroOneClass.{u1} M] [_inst_2 : MulZeroOneClass.{u2} N] (f : MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2), Eq.{succ u2} N (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MonoidWithZeroHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) 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} N 1 (OfNat.mk.{u2} N 1 (One.one.{u2} N (MulOneClass.toHasOne.{u2} N (MulZeroOneClass.toMulOneClass.{u2} N _inst_2)))))
-but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : MulZeroOneClass.{u2} M] [_inst_2 : MulZeroOneClass.{u1} N] (f : MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) (OfNat.ofNat.{u2} M 1 (One.toOfNat1.{u2} M (MulOneClass.toOne.{u2} M (MulZeroOneClass.toMulOneClass.{u2} M _inst_1))))) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M (MulZeroOneClass.toMulOneClass.{u2} M _inst_1)) (MulOneClass.toMul.{u1} N (MulZeroOneClass.toMulOneClass.{u1} N _inst_2)) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulZeroOneClass.toMulOneClass.{u2} M _inst_1) (MulZeroOneClass.toMulOneClass.{u1} N _inst_2) (MonoidWithZeroHomClass.toMonoidHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidWithZeroHom.monoidWithZeroHomClass.{u2, u1} M N _inst_1 _inst_2)))) f (OfNat.ofNat.{u2} M 1 (One.toOfNat1.{u2} M (MulOneClass.toOne.{u2} M (MulZeroOneClass.toMulOneClass.{u2} M _inst_1))))) (OfNat.ofNat.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) (OfNat.ofNat.{u2} M 1 (One.toOfNat1.{u2} M (MulOneClass.toOne.{u2} M (MulZeroOneClass.toMulOneClass.{u2} M _inst_1))))) 1 (One.toOfNat1.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) (OfNat.ofNat.{u2} M 1 (One.toOfNat1.{u2} M (MulOneClass.toOne.{u2} M (MulZeroOneClass.toMulOneClass.{u2} M _inst_1))))) (MulOneClass.toOne.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) (OfNat.ofNat.{u2} M 1 (One.toOfNat1.{u2} M (MulOneClass.toOne.{u2} M (MulZeroOneClass.toMulOneClass.{u2} M _inst_1))))) (MulZeroOneClass.toMulOneClass.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) (OfNat.ofNat.{u2} M 1 (One.toOfNat1.{u2} M (MulOneClass.toOne.{u2} M (MulZeroOneClass.toMulOneClass.{u2} M _inst_1))))) _inst_2))))
-Case conversion may be inaccurate. Consider using '#align monoid_with_zero_hom.map_one MonoidWithZeroHom.map_oneₓ'. -/
 protected theorem MonoidWithZeroHom.map_one [MulZeroOneClass M] [MulZeroOneClass N] (f : M →*₀ N) :
     f 1 = 1 :=
   f.map_one'
@@ -1433,35 +1001,17 @@ protected theorem MonoidWithZeroHom.map_one [MulZeroOneClass M] [MulZeroOneClass
 /-- If `f` is an additive monoid homomorphism then `f 0 = 0`. -/
 add_decl_doc AddMonoidHom.map_zero
 
-/- warning: monoid_with_zero_hom.map_zero -> MonoidWithZeroHom.map_zero is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulZeroOneClass.{u1} M] [_inst_2 : MulZeroOneClass.{u2} N] (f : MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2), Eq.{succ u2} N (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MonoidWithZeroHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) 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} N 0 (OfNat.mk.{u2} N 0 (Zero.zero.{u2} N (MulZeroClass.toHasZero.{u2} N (MulZeroOneClass.toMulZeroClass.{u2} N _inst_2)))))
-but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : MulZeroOneClass.{u2} M] [_inst_2 : MulZeroOneClass.{u1} N] (f : MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) (OfNat.ofNat.{u2} M 0 (Zero.toOfNat0.{u2} M (MulZeroOneClass.toZero.{u2} M _inst_1)))) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M (MulZeroOneClass.toMulOneClass.{u2} M _inst_1)) (MulOneClass.toMul.{u1} N (MulZeroOneClass.toMulOneClass.{u1} N _inst_2)) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulZeroOneClass.toMulOneClass.{u2} M _inst_1) (MulZeroOneClass.toMulOneClass.{u1} N _inst_2) (MonoidWithZeroHomClass.toMonoidHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidWithZeroHom.monoidWithZeroHomClass.{u2, u1} M N _inst_1 _inst_2)))) f (OfNat.ofNat.{u2} M 0 (Zero.toOfNat0.{u2} M (MulZeroOneClass.toZero.{u2} M _inst_1)))) (OfNat.ofNat.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) (OfNat.ofNat.{u2} M 0 (Zero.toOfNat0.{u2} M (MulZeroOneClass.toZero.{u2} M _inst_1)))) 0 (Zero.toOfNat0.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) (OfNat.ofNat.{u2} M 0 (Zero.toOfNat0.{u2} M (MulZeroOneClass.toZero.{u2} M _inst_1)))) (MulZeroOneClass.toZero.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) (OfNat.ofNat.{u2} M 0 (Zero.toOfNat0.{u2} M (MulZeroOneClass.toZero.{u2} M _inst_1)))) _inst_2)))
-Case conversion may be inaccurate. Consider using '#align monoid_with_zero_hom.map_zero MonoidWithZeroHom.map_zeroₓ'. -/
 protected theorem MonoidWithZeroHom.map_zero [MulZeroOneClass M] [MulZeroOneClass N] (f : M →*₀ N) :
     f 0 = 0 :=
   f.map_zero'
 #align monoid_with_zero_hom.map_zero MonoidWithZeroHom.map_zero
 
-/- warning: mul_hom.map_mul -> MulHom.map_mul is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] (f : MulHom.{u1, u2} M N _inst_1 _inst_2) (a : M) (b : M), Eq.{succ u2} N (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MulHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MulHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MulHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f (HMul.hMul.{u1, u1, u1} M M M (instHMul.{u1} M _inst_1) a b)) (HMul.hMul.{u2, u2, u2} N N N (instHMul.{u2} N _inst_2) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MulHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MulHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MulHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f a) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MulHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MulHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MulHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f b))
-but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : Mul.{u2} M] [_inst_2 : Mul.{u1} N] (f : MulHom.{u2, u1} M N _inst_1 _inst_2) (a : M) (b : M), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) (HMul.hMul.{u2, u2, u2} M M M (instHMul.{u2} M _inst_1) a b)) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) f (HMul.hMul.{u2, u2, u2} M M M (instHMul.{u2} M _inst_1) a b)) (HMul.hMul.{u1, u1, u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) a) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) b) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) a) (instHMul.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) a) _inst_2) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) f a) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) f b))
-Case conversion may be inaccurate. Consider using '#align mul_hom.map_mul MulHom.map_mulₓ'. -/
 @[to_additive]
 protected theorem MulHom.map_mul [Mul M] [Mul N] (f : M →ₙ* N) (a b : M) : f (a * b) = f a * f b :=
   f.map_mul' a b
 #align mul_hom.map_mul MulHom.map_mul
 #align add_hom.map_add AddHom.map_add
 
-/- warning: monoid_hom.map_mul -> MonoidHom.map_mul is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N] (f : MonoidHom.{u1, u2} M N _inst_1 _inst_2) (a : M) (b : M), Eq.{succ u2} N (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MonoidHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MonoidHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f (HMul.hMul.{u1, u1, u1} M M M (instHMul.{u1} M (MulOneClass.toHasMul.{u1} M _inst_1)) a b)) (HMul.hMul.{u2, u2, u2} N N N (instHMul.{u2} N (MulOneClass.toHasMul.{u2} N _inst_2)) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MonoidHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MonoidHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f a) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MonoidHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MonoidHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f b))
-but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u1} N] (f : MonoidHom.{u2, u1} M N _inst_1 _inst_2) (a : M) (b : M), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) (HMul.hMul.{u2, u2, u2} M M M (instHMul.{u2} M (MulOneClass.toMul.{u2} M _inst_1)) a b)) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2))) f (HMul.hMul.{u2, u2, u2} M M M (instHMul.{u2} M (MulOneClass.toMul.{u2} M _inst_1)) a b)) (HMul.hMul.{u1, u1, u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) a) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) b) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) a) (instHMul.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) a) (MulOneClass.toMul.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) a) _inst_2)) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2))) f a) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2))) f b))
-Case conversion may be inaccurate. Consider using '#align monoid_hom.map_mul MonoidHom.map_mulₓ'. -/
 /-- If `f` is a monoid homomorphism then `f (a * b) = f a * f b`. -/
 @[to_additive]
 protected theorem MonoidHom.map_mul [MulOneClass M] [MulOneClass N] (f : M →* N) (a b : M) :
@@ -1470,12 +1020,6 @@ protected theorem MonoidHom.map_mul [MulOneClass M] [MulOneClass N] (f : M →*
 #align monoid_hom.map_mul MonoidHom.map_mul
 #align add_monoid_hom.map_add AddMonoidHom.map_add
 
-/- warning: monoid_with_zero_hom.map_mul -> MonoidWithZeroHom.map_mul is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulZeroOneClass.{u1} M] [_inst_2 : MulZeroOneClass.{u2} N] (f : MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) (a : M) (b : M), Eq.{succ u2} N (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MonoidWithZeroHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) 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} N N N (instHMul.{u2} N (MulZeroClass.toHasMul.{u2} N (MulZeroOneClass.toMulZeroClass.{u2} N _inst_2))) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MonoidWithZeroHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f a) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MonoidWithZeroHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f b))
-but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : MulZeroOneClass.{u2} M] [_inst_2 : MulZeroOneClass.{u1} N] (f : MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) (a : M) (b : M), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) (HMul.hMul.{u2, u2, u2} M M M (instHMul.{u2} M (MulZeroClass.toMul.{u2} M (MulZeroOneClass.toMulZeroClass.{u2} M _inst_1))) a b)) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M (MulZeroOneClass.toMulOneClass.{u2} M _inst_1)) (MulOneClass.toMul.{u1} N (MulZeroOneClass.toMulOneClass.{u1} N _inst_2)) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulZeroOneClass.toMulOneClass.{u2} M _inst_1) (MulZeroOneClass.toMulOneClass.{u1} N _inst_2) (MonoidWithZeroHomClass.toMonoidHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidWithZeroHom.monoidWithZeroHomClass.{u2, u1} M N _inst_1 _inst_2)))) f (HMul.hMul.{u2, u2, u2} M M M (instHMul.{u2} M (MulZeroClass.toMul.{u2} M (MulZeroOneClass.toMulZeroClass.{u2} M _inst_1))) a b)) (HMul.hMul.{u1, u1, u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) a) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) b) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) a) (instHMul.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) a) (MulZeroClass.toMul.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) a) (MulZeroOneClass.toMulZeroClass.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) a) _inst_2))) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M (MulZeroOneClass.toMulOneClass.{u2} M _inst_1)) (MulOneClass.toMul.{u1} N (MulZeroOneClass.toMulOneClass.{u1} N _inst_2)) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulZeroOneClass.toMulOneClass.{u2} M _inst_1) (MulZeroOneClass.toMulOneClass.{u1} N _inst_2) (MonoidWithZeroHomClass.toMonoidHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidWithZeroHom.monoidWithZeroHomClass.{u2, u1} M N _inst_1 _inst_2)))) f a) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M (MulZeroOneClass.toMulOneClass.{u2} M _inst_1)) (MulOneClass.toMul.{u1} N (MulZeroOneClass.toMulOneClass.{u1} N _inst_2)) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulZeroOneClass.toMulOneClass.{u2} M _inst_1) (MulZeroOneClass.toMulOneClass.{u1} N _inst_2) (MonoidWithZeroHomClass.toMonoidHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidWithZeroHom.monoidWithZeroHomClass.{u2, u1} M N _inst_1 _inst_2)))) f b))
-Case conversion may be inaccurate. Consider using '#align monoid_with_zero_hom.map_mul MonoidWithZeroHom.map_mulₓ'. -/
 protected theorem MonoidWithZeroHom.map_mul [MulZeroOneClass M] [MulZeroOneClass N] (f : M →*₀ N)
     (a b : M) : f (a * b) = f a * f b :=
   f.map_mul' a b
@@ -1490,12 +1034,6 @@ variable {mM : MulOneClass M} {mN : MulOneClass N} [MonoidHomClass F M N]
 
 include mM mN
 
-/- warning: monoid_hom.map_exists_right_inv -> MonoidHom.map_exists_right_inv is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} {N : Type.{u2}} {F : Type.{u3}} {mM : MulOneClass.{u1} M} {mN : MulOneClass.{u2} N} [_inst_1 : MonoidHomClass.{u3, u1, u2} F M N mM mN] (f : F) {x : M}, (Exists.{succ u1} M (fun (y : M) => Eq.{succ u1} M (HMul.hMul.{u1, u1, u1} M M M (instHMul.{u1} M (MulOneClass.toHasMul.{u1} M mM)) x y) (OfNat.ofNat.{u1} M 1 (OfNat.mk.{u1} M 1 (One.one.{u1} M (MulOneClass.toHasOne.{u1} M mM)))))) -> (Exists.{succ u2} N (fun (y : N) => Eq.{succ u2} N (HMul.hMul.{u2, u2, u2} N N N (instHMul.{u2} N (MulOneClass.toHasMul.{u2} N mN)) (coeFn.{succ u3, max (succ u1) (succ u2)} F (fun (_x : F) => M -> N) (FunLike.hasCoeToFun.{succ u3, succ u1, succ u2} F M (fun (_x : M) => N) (MulHomClass.toFunLike.{u3, u1, u2} F M N (MulOneClass.toHasMul.{u1} M mM) (MulOneClass.toHasMul.{u2} N mN) (MonoidHomClass.toMulHomClass.{u3, u1, u2} F M N mM mN _inst_1))) f x) y) (OfNat.ofNat.{u2} N 1 (OfNat.mk.{u2} N 1 (One.one.{u2} N (MulOneClass.toHasOne.{u2} N mN))))))
-but is expected to have type
-  forall {M : Type.{u3}} {N : Type.{u2}} {F : Type.{u1}} [mM : MulOneClass.{u3} M] [mN : MulOneClass.{u2} N] [_inst_1 : MonoidHomClass.{u1, u3, u2} F M N mM mN] (f : F) {x : M}, (Exists.{succ u3} M (fun (y : M) => Eq.{succ u3} M (HMul.hMul.{u3, u3, u3} M M M (instHMul.{u3} M (MulOneClass.toMul.{u3} M mM)) x y) (OfNat.ofNat.{u3} M 1 (One.toOfNat1.{u3} M (MulOneClass.toOne.{u3} M mM))))) -> (Exists.{succ u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) x) (fun (y : (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) x) => Eq.{succ u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) x) (HMul.hMul.{u2, u2, u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) x) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) x) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) x) (instHMul.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) x) (MulOneClass.toMul.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) x) mN)) (FunLike.coe.{succ u1, succ u3, succ u2} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{u1, u3, u2} F M N (MulOneClass.toMul.{u3} M mM) (MulOneClass.toMul.{u2} N mN) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F M N mM mN _inst_1)) f x) y) (OfNat.ofNat.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) x) 1 (One.toOfNat1.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) x) (MulOneClass.toOne.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) x) mN)))))
-Case conversion may be inaccurate. Consider using '#align monoid_hom.map_exists_right_inv MonoidHom.map_exists_right_invₓ'. -/
 /-- Given a monoid homomorphism `f : M →* N` and an element `x : M`, if `x` has a right inverse,
 then `f x` has a right inverse too. For elements invertible on both sides see `is_unit.map`. -/
 @[to_additive
@@ -1506,12 +1044,6 @@ theorem map_exists_right_inv (f : F) {x : M} (hx : ∃ y, x * y = 1) : ∃ y, f
 #align monoid_hom.map_exists_right_inv MonoidHom.map_exists_right_inv
 #align add_monoid_hom.map_exists_right_neg AddMonoidHom.map_exists_right_neg
 
-/- warning: monoid_hom.map_exists_left_inv -> MonoidHom.map_exists_left_inv is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} {N : Type.{u2}} {F : Type.{u3}} {mM : MulOneClass.{u1} M} {mN : MulOneClass.{u2} N} [_inst_1 : MonoidHomClass.{u3, u1, u2} F M N mM mN] (f : F) {x : M}, (Exists.{succ u1} M (fun (y : M) => Eq.{succ u1} M (HMul.hMul.{u1, u1, u1} M M M (instHMul.{u1} M (MulOneClass.toHasMul.{u1} M mM)) y x) (OfNat.ofNat.{u1} M 1 (OfNat.mk.{u1} M 1 (One.one.{u1} M (MulOneClass.toHasOne.{u1} M mM)))))) -> (Exists.{succ u2} N (fun (y : N) => Eq.{succ u2} N (HMul.hMul.{u2, u2, u2} N N N (instHMul.{u2} N (MulOneClass.toHasMul.{u2} N mN)) y (coeFn.{succ u3, max (succ u1) (succ u2)} F (fun (_x : F) => M -> N) (FunLike.hasCoeToFun.{succ u3, succ u1, succ u2} F M (fun (_x : M) => N) (MulHomClass.toFunLike.{u3, u1, u2} F M N (MulOneClass.toHasMul.{u1} M mM) (MulOneClass.toHasMul.{u2} N mN) (MonoidHomClass.toMulHomClass.{u3, u1, u2} F M N mM mN _inst_1))) f x)) (OfNat.ofNat.{u2} N 1 (OfNat.mk.{u2} N 1 (One.one.{u2} N (MulOneClass.toHasOne.{u2} N mN))))))
-but is expected to have type
-  forall {M : Type.{u3}} {N : Type.{u2}} {F : Type.{u1}} [mM : MulOneClass.{u3} M] [mN : MulOneClass.{u2} N] [_inst_1 : MonoidHomClass.{u1, u3, u2} F M N mM mN] (f : F) {x : M}, (Exists.{succ u3} M (fun (y : M) => Eq.{succ u3} M (HMul.hMul.{u3, u3, u3} M M M (instHMul.{u3} M (MulOneClass.toMul.{u3} M mM)) y x) (OfNat.ofNat.{u3} M 1 (One.toOfNat1.{u3} M (MulOneClass.toOne.{u3} M mM))))) -> (Exists.{succ u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) x) (fun (y : (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) x) => Eq.{succ u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) x) (HMul.hMul.{u2, u2, u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) x) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) x) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) x) (instHMul.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) x) (MulOneClass.toMul.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) x) mN)) y (FunLike.coe.{succ u1, succ u3, succ u2} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{u1, u3, u2} F M N (MulOneClass.toMul.{u3} M mM) (MulOneClass.toMul.{u2} N mN) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F M N mM mN _inst_1)) f x)) (OfNat.ofNat.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) x) 1 (One.toOfNat1.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) x) (MulOneClass.toOne.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) x) mN)))))
-Case conversion may be inaccurate. Consider using '#align monoid_hom.map_exists_left_inv MonoidHom.map_exists_left_invₓ'. -/
 /-- Given a monoid homomorphism `f : M →* N` and an element `x : M`, if `x` has a left inverse,
 then `f x` has a left inverse too. For elements invertible on both sides see `is_unit.map`. -/
 @[to_additive
@@ -1540,23 +1072,11 @@ def invMonoidHom : α →* α where
 #align neg_add_monoid_hom negAddMonoidHom
 -/
 
-/- warning: coe_inv_monoid_hom -> coe_invMonoidHom is a dubious translation:
-lean 3 declaration is
-  forall {α : Type.{u1}} [_inst_1 : DivisionCommMonoid.{u1} α], Eq.{succ u1} ((fun (_x : MonoidHom.{u1, u1} α α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (DivisionMonoid.toDivInvMonoid.{u1} α (DivisionCommMonoid.toDivisionMonoid.{u1} α _inst_1)))) (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (DivisionMonoid.toDivInvMonoid.{u1} α (DivisionCommMonoid.toDivisionMonoid.{u1} α _inst_1))))) => α -> α) (invMonoidHom.{u1} α _inst_1)) (coeFn.{succ u1, succ u1} (MonoidHom.{u1, u1} α α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (DivisionMonoid.toDivInvMonoid.{u1} α (DivisionCommMonoid.toDivisionMonoid.{u1} α _inst_1)))) (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (DivisionMonoid.toDivInvMonoid.{u1} α (DivisionCommMonoid.toDivisionMonoid.{u1} α _inst_1))))) (fun (_x : MonoidHom.{u1, u1} α α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (DivisionMonoid.toDivInvMonoid.{u1} α (DivisionCommMonoid.toDivisionMonoid.{u1} α _inst_1)))) (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (DivisionMonoid.toDivInvMonoid.{u1} α (DivisionCommMonoid.toDivisionMonoid.{u1} α _inst_1))))) => α -> α) (MonoidHom.hasCoeToFun.{u1, u1} α α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (DivisionMonoid.toDivInvMonoid.{u1} α (DivisionCommMonoid.toDivisionMonoid.{u1} α _inst_1)))) (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (DivisionMonoid.toDivInvMonoid.{u1} α (DivisionCommMonoid.toDivisionMonoid.{u1} α _inst_1))))) (invMonoidHom.{u1} α _inst_1)) (Inv.inv.{u1} α (DivInvMonoid.toHasInv.{u1} α (DivisionMonoid.toDivInvMonoid.{u1} α (DivisionCommMonoid.toDivisionMonoid.{u1} α _inst_1))))
-but is expected to have type
-  forall {α : Type.{u1}} [_inst_1 : DivisionCommMonoid.{u1} α], Eq.{succ u1} (forall (a : α), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : α) => α) a) (FunLike.coe.{succ u1, succ u1, succ u1} (MonoidHom.{u1, u1} α α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (DivisionMonoid.toDivInvMonoid.{u1} α (DivisionCommMonoid.toDivisionMonoid.{u1} α _inst_1)))) (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (DivisionMonoid.toDivInvMonoid.{u1} α (DivisionCommMonoid.toDivisionMonoid.{u1} α _inst_1))))) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : α) => α) _x) (MulHomClass.toFunLike.{u1, u1, u1} (MonoidHom.{u1, u1} α α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (DivisionMonoid.toDivInvMonoid.{u1} α (DivisionCommMonoid.toDivisionMonoid.{u1} α _inst_1)))) (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (DivisionMonoid.toDivInvMonoid.{u1} α (DivisionCommMonoid.toDivisionMonoid.{u1} α _inst_1))))) α α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (DivisionMonoid.toDivInvMonoid.{u1} α (DivisionCommMonoid.toDivisionMonoid.{u1} α _inst_1))))) (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (DivisionMonoid.toDivInvMonoid.{u1} α (DivisionCommMonoid.toDivisionMonoid.{u1} α _inst_1))))) (MonoidHomClass.toMulHomClass.{u1, u1, u1} (MonoidHom.{u1, u1} α α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (DivisionMonoid.toDivInvMonoid.{u1} α (DivisionCommMonoid.toDivisionMonoid.{u1} α _inst_1)))) (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (DivisionMonoid.toDivInvMonoid.{u1} α (DivisionCommMonoid.toDivisionMonoid.{u1} α _inst_1))))) α α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (DivisionMonoid.toDivInvMonoid.{u1} α (DivisionCommMonoid.toDivisionMonoid.{u1} α _inst_1)))) (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (DivisionMonoid.toDivInvMonoid.{u1} α (DivisionCommMonoid.toDivisionMonoid.{u1} α _inst_1)))) (MonoidHom.monoidHomClass.{u1, u1} α α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (DivisionMonoid.toDivInvMonoid.{u1} α (DivisionCommMonoid.toDivisionMonoid.{u1} α _inst_1)))) (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (DivisionMonoid.toDivInvMonoid.{u1} α (DivisionCommMonoid.toDivisionMonoid.{u1} α _inst_1))))))) (invMonoidHom.{u1} α _inst_1)) (Inv.inv.{u1} α (InvOneClass.toInv.{u1} α (DivInvOneMonoid.toInvOneClass.{u1} α (DivisionMonoid.toDivInvOneMonoid.{u1} α (DivisionCommMonoid.toDivisionMonoid.{u1} α _inst_1)))))
-Case conversion may be inaccurate. Consider using '#align coe_inv_monoid_hom coe_invMonoidHomₓ'. -/
 @[simp]
 theorem coe_invMonoidHom : (invMonoidHom : α → α) = Inv.inv :=
   rfl
 #align coe_inv_monoid_hom coe_invMonoidHom
 
-/- warning: inv_monoid_hom_apply -> invMonoidHom_apply is a dubious translation:
-lean 3 declaration is
-  forall {α : Type.{u1}} [_inst_1 : DivisionCommMonoid.{u1} α] (a : α), Eq.{succ u1} α (coeFn.{succ u1, succ u1} (MonoidHom.{u1, u1} α α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (DivisionMonoid.toDivInvMonoid.{u1} α (DivisionCommMonoid.toDivisionMonoid.{u1} α _inst_1)))) (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (DivisionMonoid.toDivInvMonoid.{u1} α (DivisionCommMonoid.toDivisionMonoid.{u1} α _inst_1))))) (fun (_x : MonoidHom.{u1, u1} α α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (DivisionMonoid.toDivInvMonoid.{u1} α (DivisionCommMonoid.toDivisionMonoid.{u1} α _inst_1)))) (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (DivisionMonoid.toDivInvMonoid.{u1} α (DivisionCommMonoid.toDivisionMonoid.{u1} α _inst_1))))) => α -> α) (MonoidHom.hasCoeToFun.{u1, u1} α α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (DivisionMonoid.toDivInvMonoid.{u1} α (DivisionCommMonoid.toDivisionMonoid.{u1} α _inst_1)))) (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (DivisionMonoid.toDivInvMonoid.{u1} α (DivisionCommMonoid.toDivisionMonoid.{u1} α _inst_1))))) (invMonoidHom.{u1} α _inst_1) a) (Inv.inv.{u1} α (DivInvMonoid.toHasInv.{u1} α (DivisionMonoid.toDivInvMonoid.{u1} α (DivisionCommMonoid.toDivisionMonoid.{u1} α _inst_1))) a)
-but is expected to have type
-  forall {α : Type.{u1}} [_inst_1 : DivisionCommMonoid.{u1} α] (a : α), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : α) => α) a) (FunLike.coe.{succ u1, succ u1, succ u1} (MonoidHom.{u1, u1} α α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (DivisionMonoid.toDivInvMonoid.{u1} α (DivisionCommMonoid.toDivisionMonoid.{u1} α _inst_1)))) (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (DivisionMonoid.toDivInvMonoid.{u1} α (DivisionCommMonoid.toDivisionMonoid.{u1} α _inst_1))))) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : α) => α) _x) (MulHomClass.toFunLike.{u1, u1, u1} (MonoidHom.{u1, u1} α α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (DivisionMonoid.toDivInvMonoid.{u1} α (DivisionCommMonoid.toDivisionMonoid.{u1} α _inst_1)))) (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (DivisionMonoid.toDivInvMonoid.{u1} α (DivisionCommMonoid.toDivisionMonoid.{u1} α _inst_1))))) α α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (DivisionMonoid.toDivInvMonoid.{u1} α (DivisionCommMonoid.toDivisionMonoid.{u1} α _inst_1))))) (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (DivisionMonoid.toDivInvMonoid.{u1} α (DivisionCommMonoid.toDivisionMonoid.{u1} α _inst_1))))) (MonoidHomClass.toMulHomClass.{u1, u1, u1} (MonoidHom.{u1, u1} α α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (DivisionMonoid.toDivInvMonoid.{u1} α (DivisionCommMonoid.toDivisionMonoid.{u1} α _inst_1)))) (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (DivisionMonoid.toDivInvMonoid.{u1} α (DivisionCommMonoid.toDivisionMonoid.{u1} α _inst_1))))) α α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (DivisionMonoid.toDivInvMonoid.{u1} α (DivisionCommMonoid.toDivisionMonoid.{u1} α _inst_1)))) (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (DivisionMonoid.toDivInvMonoid.{u1} α (DivisionCommMonoid.toDivisionMonoid.{u1} α _inst_1)))) (MonoidHom.monoidHomClass.{u1, u1} α α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (DivisionMonoid.toDivInvMonoid.{u1} α (DivisionCommMonoid.toDivisionMonoid.{u1} α _inst_1)))) (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (DivisionMonoid.toDivInvMonoid.{u1} α (DivisionCommMonoid.toDivisionMonoid.{u1} α _inst_1))))))) (invMonoidHom.{u1} α _inst_1) a) (Inv.inv.{u1} α (InvOneClass.toInv.{u1} α (DivInvOneMonoid.toInvOneClass.{u1} α (DivisionMonoid.toDivInvOneMonoid.{u1} α (DivisionCommMonoid.toDivisionMonoid.{u1} α _inst_1)))) a)
-Case conversion may be inaccurate. Consider using '#align inv_monoid_hom_apply invMonoidHom_applyₓ'. -/
 @[simp]
 theorem invMonoidHom_apply (a : α) : invMonoidHom a = a⁻¹ :=
   rfl
@@ -1674,12 +1194,6 @@ add_decl_doc AddHom.comp
 /-- Composition of additive monoid morphisms as an additive monoid morphism. -/
 add_decl_doc AddMonoidHom.comp
 
-/- warning: one_hom.coe_comp -> OneHom.coe_comp is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} {N : Type.{u2}} {P : Type.{u3}} [_inst_1 : One.{u1} M] [_inst_2 : One.{u2} N] [_inst_3 : One.{u3} P] (g : OneHom.{u2, u3} N P _inst_2 _inst_3) (f : OneHom.{u1, u2} M N _inst_1 _inst_2), Eq.{max (succ u1) (succ u3)} (M -> P) (coeFn.{max (succ u3) (succ u1), max (succ u1) (succ u3)} (OneHom.{u1, u3} M P _inst_1 _inst_3) (fun (_x : OneHom.{u1, u3} M P _inst_1 _inst_3) => M -> P) (OneHom.hasCoeToFun.{u1, u3} M P _inst_1 _inst_3) (OneHom.comp.{u1, u2, u3} M N P _inst_1 _inst_2 _inst_3 g f)) (Function.comp.{succ u1, succ u2, succ u3} M N P (coeFn.{max (succ u3) (succ u2), max (succ u2) (succ u3)} (OneHom.{u2, u3} N P _inst_2 _inst_3) (fun (_x : OneHom.{u2, u3} N P _inst_2 _inst_3) => N -> P) (OneHom.hasCoeToFun.{u2, u3} N P _inst_2 _inst_3) g) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (OneHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : OneHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (OneHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f))
-but is expected to have type
-  forall {M : Type.{u3}} {N : Type.{u2}} {P : Type.{u1}} [_inst_1 : One.{u3} M] [_inst_2 : One.{u2} N] [_inst_3 : One.{u1} P] (g : OneHom.{u2, u1} N P _inst_2 _inst_3) (f : OneHom.{u3, u2} M N _inst_1 _inst_2), Eq.{max (succ u3) (succ u1)} (M -> P) (FunLike.coe.{max (succ u3) (succ u1), succ u3, succ u1} (OneHom.{u3, u1} M P _inst_1 _inst_3) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1264 : M) => P) _x) (OneHomClass.toFunLike.{max u3 u1, u3, u1} (OneHom.{u3, u1} M P _inst_1 _inst_3) M P _inst_1 _inst_3 (OneHom.oneHomClass.{u3, u1} M P _inst_1 _inst_3)) (OneHom.comp.{u3, u2, u1} M N P _inst_1 _inst_2 _inst_3 g f)) (Function.comp.{succ u3, succ u2, succ u1} M N P (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (OneHom.{u2, u1} N P _inst_2 _inst_3) N (fun (_x : N) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1264 : N) => P) _x) (OneHomClass.toFunLike.{max u2 u1, u2, u1} (OneHom.{u2, u1} N P _inst_2 _inst_3) N P _inst_2 _inst_3 (OneHom.oneHomClass.{u2, u1} N P _inst_2 _inst_3)) g) (FunLike.coe.{max (succ u3) (succ u2), succ u3, succ u2} (OneHom.{u3, u2} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1264 : M) => N) _x) (OneHomClass.toFunLike.{max u3 u2, u3, u2} (OneHom.{u3, u2} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (OneHom.oneHomClass.{u3, u2} M N _inst_1 _inst_2)) f))
-Case conversion may be inaccurate. Consider using '#align one_hom.coe_comp OneHom.coe_compₓ'. -/
 @[simp, to_additive]
 theorem OneHom.coe_comp [One M] [One N] [One P] (g : OneHom N P) (f : OneHom M N) :
     ⇑(g.comp f) = g ∘ f :=
@@ -1687,24 +1201,12 @@ theorem OneHom.coe_comp [One M] [One N] [One P] (g : OneHom N P) (f : OneHom M N
 #align one_hom.coe_comp OneHom.coe_comp
 #align zero_hom.coe_comp ZeroHom.coe_comp
 
-/- warning: mul_hom.coe_comp -> MulHom.coe_comp is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} {N : Type.{u2}} {P : Type.{u3}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] [_inst_3 : Mul.{u3} P] (g : MulHom.{u2, u3} N P _inst_2 _inst_3) (f : MulHom.{u1, u2} M N _inst_1 _inst_2), Eq.{max (succ u1) (succ u3)} (M -> P) (coeFn.{max (succ u3) (succ u1), max (succ u1) (succ u3)} (MulHom.{u1, u3} M P _inst_1 _inst_3) (fun (_x : MulHom.{u1, u3} M P _inst_1 _inst_3) => M -> P) (MulHom.hasCoeToFun.{u1, u3} M P _inst_1 _inst_3) (MulHom.comp.{u1, u2, u3} M N P _inst_1 _inst_2 _inst_3 g f)) (Function.comp.{succ u1, succ u2, succ u3} M N P (coeFn.{max (succ u3) (succ u2), max (succ u2) (succ u3)} (MulHom.{u2, u3} N P _inst_2 _inst_3) (fun (_x : MulHom.{u2, u3} N P _inst_2 _inst_3) => N -> P) (MulHom.hasCoeToFun.{u2, u3} N P _inst_2 _inst_3) g) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MulHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MulHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MulHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f))
-but is expected to have type
-  forall {M : Type.{u3}} {N : Type.{u2}} {P : Type.{u1}} [_inst_1 : Mul.{u3} M] [_inst_2 : Mul.{u2} N] [_inst_3 : Mul.{u1} P] (g : MulHom.{u2, u1} N P _inst_2 _inst_3) (f : MulHom.{u3, u2} M N _inst_1 _inst_2), Eq.{max (succ u3) (succ u1)} (M -> P) (FunLike.coe.{max (succ u3) (succ u1), succ u3, succ u1} (MulHom.{u3, u1} M P _inst_1 _inst_3) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => P) _x) (MulHomClass.toFunLike.{max u3 u1, u3, u1} (MulHom.{u3, u1} M P _inst_1 _inst_3) M P _inst_1 _inst_3 (MulHom.mulHomClass.{u3, u1} M P _inst_1 _inst_3)) (MulHom.comp.{u3, u2, u1} M N P _inst_1 _inst_2 _inst_3 g f)) (Function.comp.{succ u3, succ u2, succ u1} M N P (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} N P _inst_2 _inst_3) N (fun (_x : N) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : N) => P) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} N P _inst_2 _inst_3) N P _inst_2 _inst_3 (MulHom.mulHomClass.{u2, u1} N P _inst_2 _inst_3)) g) (FunLike.coe.{max (succ u3) (succ u2), succ u3, succ u2} (MulHom.{u3, u2} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{max u3 u2, u3, u2} (MulHom.{u3, u2} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u3, u2} M N _inst_1 _inst_2)) f))
-Case conversion may be inaccurate. Consider using '#align mul_hom.coe_comp MulHom.coe_compₓ'. -/
 @[simp, to_additive]
 theorem MulHom.coe_comp [Mul M] [Mul N] [Mul P] (g : N →ₙ* P) (f : M →ₙ* N) : ⇑(g.comp f) = g ∘ f :=
   rfl
 #align mul_hom.coe_comp MulHom.coe_comp
 #align add_hom.coe_comp AddHom.coe_comp
 
-/- warning: monoid_hom.coe_comp -> MonoidHom.coe_comp is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} {N : Type.{u2}} {P : Type.{u3}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N] [_inst_3 : MulOneClass.{u3} P] (g : MonoidHom.{u2, u3} N P _inst_2 _inst_3) (f : MonoidHom.{u1, u2} M N _inst_1 _inst_2), Eq.{max (succ u1) (succ u3)} (M -> P) (coeFn.{max (succ u3) (succ u1), max (succ u1) (succ u3)} (MonoidHom.{u1, u3} M P _inst_1 _inst_3) (fun (_x : MonoidHom.{u1, u3} M P _inst_1 _inst_3) => M -> P) (MonoidHom.hasCoeToFun.{u1, u3} M P _inst_1 _inst_3) (MonoidHom.comp.{u1, u2, u3} M N P _inst_1 _inst_2 _inst_3 g f)) (Function.comp.{succ u1, succ u2, succ u3} M N P (coeFn.{max (succ u3) (succ u2), max (succ u2) (succ u3)} (MonoidHom.{u2, u3} N P _inst_2 _inst_3) (fun (_x : MonoidHom.{u2, u3} N P _inst_2 _inst_3) => N -> P) (MonoidHom.hasCoeToFun.{u2, u3} N P _inst_2 _inst_3) g) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MonoidHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MonoidHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f))
-but is expected to have type
-  forall {M : Type.{u3}} {N : Type.{u2}} {P : Type.{u1}} [_inst_1 : MulOneClass.{u3} M] [_inst_2 : MulOneClass.{u2} N] [_inst_3 : MulOneClass.{u1} P] (g : MonoidHom.{u2, u1} N P _inst_2 _inst_3) (f : MonoidHom.{u3, u2} M N _inst_1 _inst_2), Eq.{max (succ u3) (succ u1)} (M -> P) (FunLike.coe.{max (succ u3) (succ u1), succ u3, succ u1} (MonoidHom.{u3, u1} M P _inst_1 _inst_3) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => P) _x) (MulHomClass.toFunLike.{max u3 u1, u3, u1} (MonoidHom.{u3, u1} M P _inst_1 _inst_3) M P (MulOneClass.toMul.{u3} M _inst_1) (MulOneClass.toMul.{u1} P _inst_3) (MonoidHomClass.toMulHomClass.{max u3 u1, u3, u1} (MonoidHom.{u3, u1} M P _inst_1 _inst_3) M P _inst_1 _inst_3 (MonoidHom.monoidHomClass.{u3, u1} M P _inst_1 _inst_3))) (MonoidHom.comp.{u3, u2, u1} M N P _inst_1 _inst_2 _inst_3 g f)) (Function.comp.{succ u3, succ u2, succ u1} M N P (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} N P _inst_2 _inst_3) N (fun (_x : N) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : N) => P) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} N P _inst_2 _inst_3) N P (MulOneClass.toMul.{u2} N _inst_2) (MulOneClass.toMul.{u1} P _inst_3) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} N P _inst_2 _inst_3) N P _inst_2 _inst_3 (MonoidHom.monoidHomClass.{u2, u1} N P _inst_2 _inst_3))) g) (FunLike.coe.{max (succ u3) (succ u2), succ u3, succ u2} (MonoidHom.{u3, u2} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{max u3 u2, u3, u2} (MonoidHom.{u3, u2} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u3} M _inst_1) (MulOneClass.toMul.{u2} N _inst_2) (MonoidHomClass.toMulHomClass.{max u3 u2, u3, u2} (MonoidHom.{u3, u2} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidHom.monoidHomClass.{u3, u2} M N _inst_1 _inst_2))) f))
-Case conversion may be inaccurate. Consider using '#align monoid_hom.coe_comp MonoidHom.coe_compₓ'. -/
 @[simp, to_additive]
 theorem MonoidHom.coe_comp [MulOneClass M] [MulOneClass N] [MulOneClass P] (g : N →* P)
     (f : M →* N) : ⇑(g.comp f) = g ∘ f :=
@@ -1712,24 +1214,12 @@ theorem MonoidHom.coe_comp [MulOneClass M] [MulOneClass N] [MulOneClass P] (g :
 #align monoid_hom.coe_comp MonoidHom.coe_comp
 #align add_monoid_hom.coe_comp AddMonoidHom.coe_comp
 
-/- warning: monoid_with_zero_hom.coe_comp -> MonoidWithZeroHom.coe_comp is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} {N : Type.{u2}} {P : Type.{u3}} [_inst_1 : MulZeroOneClass.{u1} M] [_inst_2 : MulZeroOneClass.{u2} N] [_inst_3 : MulZeroOneClass.{u3} P] (g : MonoidWithZeroHom.{u2, u3} N P _inst_2 _inst_3) (f : MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2), Eq.{max (succ u1) (succ u3)} (M -> P) (coeFn.{max (succ u3) (succ u1), max (succ u1) (succ u3)} (MonoidWithZeroHom.{u1, u3} M P _inst_1 _inst_3) (fun (_x : MonoidWithZeroHom.{u1, u3} M P _inst_1 _inst_3) => M -> P) (MonoidWithZeroHom.hasCoeToFun.{u1, u3} M P _inst_1 _inst_3) (MonoidWithZeroHom.comp.{u1, u2, u3} M N P _inst_1 _inst_2 _inst_3 g f)) (Function.comp.{succ u1, succ u2, succ u3} M N P (coeFn.{max (succ u3) (succ u2), max (succ u2) (succ u3)} (MonoidWithZeroHom.{u2, u3} N P _inst_2 _inst_3) (fun (_x : MonoidWithZeroHom.{u2, u3} N P _inst_2 _inst_3) => N -> P) (MonoidWithZeroHom.hasCoeToFun.{u2, u3} N P _inst_2 _inst_3) g) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MonoidWithZeroHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f))
-but is expected to have type
-  forall {M : Type.{u3}} {N : Type.{u2}} {P : Type.{u1}} [_inst_1 : MulZeroOneClass.{u3} M] [_inst_2 : MulZeroOneClass.{u2} N] [_inst_3 : MulZeroOneClass.{u1} P] (g : MonoidWithZeroHom.{u2, u1} N P _inst_2 _inst_3) (f : MonoidWithZeroHom.{u3, u2} M N _inst_1 _inst_2), Eq.{max (succ u3) (succ u1)} (M -> P) (FunLike.coe.{max (succ u3) (succ u1), succ u3, succ u1} (MonoidWithZeroHom.{u3, u1} M P _inst_1 _inst_3) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => P) _x) (MulHomClass.toFunLike.{max u3 u1, u3, u1} (MonoidWithZeroHom.{u3, u1} M P _inst_1 _inst_3) M P (MulOneClass.toMul.{u3} M (MulZeroOneClass.toMulOneClass.{u3} M _inst_1)) (MulOneClass.toMul.{u1} P (MulZeroOneClass.toMulOneClass.{u1} P _inst_3)) (MonoidHomClass.toMulHomClass.{max u3 u1, u3, u1} (MonoidWithZeroHom.{u3, u1} M P _inst_1 _inst_3) M P (MulZeroOneClass.toMulOneClass.{u3} M _inst_1) (MulZeroOneClass.toMulOneClass.{u1} P _inst_3) (MonoidWithZeroHomClass.toMonoidHomClass.{max u3 u1, u3, u1} (MonoidWithZeroHom.{u3, u1} M P _inst_1 _inst_3) M P _inst_1 _inst_3 (MonoidWithZeroHom.monoidWithZeroHomClass.{u3, u1} M P _inst_1 _inst_3)))) (MonoidWithZeroHom.comp.{u3, u2, u1} M N P _inst_1 _inst_2 _inst_3 g f)) (Function.comp.{succ u3, succ u2, succ u1} M N P (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidWithZeroHom.{u2, u1} N P _inst_2 _inst_3) N (fun (_x : N) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : N) => P) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} N P _inst_2 _inst_3) N P (MulOneClass.toMul.{u2} N (MulZeroOneClass.toMulOneClass.{u2} N _inst_2)) (MulOneClass.toMul.{u1} P (MulZeroOneClass.toMulOneClass.{u1} P _inst_3)) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} N P _inst_2 _inst_3) N P (MulZeroOneClass.toMulOneClass.{u2} N _inst_2) (MulZeroOneClass.toMulOneClass.{u1} P _inst_3) (MonoidWithZeroHomClass.toMonoidHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} N P _inst_2 _inst_3) N P _inst_2 _inst_3 (MonoidWithZeroHom.monoidWithZeroHomClass.{u2, u1} N P _inst_2 _inst_3)))) g) (FunLike.coe.{max (succ u3) (succ u2), succ u3, succ u2} (MonoidWithZeroHom.{u3, u2} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{max u3 u2, u3, u2} (MonoidWithZeroHom.{u3, u2} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u3} M (MulZeroOneClass.toMulOneClass.{u3} M _inst_1)) (MulOneClass.toMul.{u2} N (MulZeroOneClass.toMulOneClass.{u2} N _inst_2)) (MonoidHomClass.toMulHomClass.{max u3 u2, u3, u2} (MonoidWithZeroHom.{u3, u2} M N _inst_1 _inst_2) M N (MulZeroOneClass.toMulOneClass.{u3} M _inst_1) (MulZeroOneClass.toMulOneClass.{u2} N _inst_2) (MonoidWithZeroHomClass.toMonoidHomClass.{max u3 u2, u3, u2} (MonoidWithZeroHom.{u3, u2} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidWithZeroHom.monoidWithZeroHomClass.{u3, u2} M N _inst_1 _inst_2)))) f))
-Case conversion may be inaccurate. Consider using '#align monoid_with_zero_hom.coe_comp MonoidWithZeroHom.coe_compₓ'. -/
 @[simp]
 theorem MonoidWithZeroHom.coe_comp [MulZeroOneClass M] [MulZeroOneClass N] [MulZeroOneClass P]
     (g : N →*₀ P) (f : M →*₀ N) : ⇑(g.comp f) = g ∘ f :=
   rfl
 #align monoid_with_zero_hom.coe_comp MonoidWithZeroHom.coe_comp
 
-/- warning: one_hom.comp_apply -> OneHom.comp_apply is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} {N : Type.{u2}} {P : Type.{u3}} [_inst_1 : One.{u1} M] [_inst_2 : One.{u2} N] [_inst_3 : One.{u3} P] (g : OneHom.{u2, u3} N P _inst_2 _inst_3) (f : OneHom.{u1, u2} M N _inst_1 _inst_2) (x : M), Eq.{succ u3} P (coeFn.{max (succ u3) (succ u1), max (succ u1) (succ u3)} (OneHom.{u1, u3} M P _inst_1 _inst_3) (fun (_x : OneHom.{u1, u3} M P _inst_1 _inst_3) => M -> P) (OneHom.hasCoeToFun.{u1, u3} M P _inst_1 _inst_3) (OneHom.comp.{u1, u2, u3} M N P _inst_1 _inst_2 _inst_3 g f) x) (coeFn.{max (succ u3) (succ u2), max (succ u2) (succ u3)} (OneHom.{u2, u3} N P _inst_2 _inst_3) (fun (_x : OneHom.{u2, u3} N P _inst_2 _inst_3) => N -> P) (OneHom.hasCoeToFun.{u2, u3} N P _inst_2 _inst_3) g (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (OneHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : OneHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (OneHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f x))
-but is expected to have type
-  forall {M : Type.{u3}} {N : Type.{u2}} {P : Type.{u1}} [_inst_1 : One.{u3} M] [_inst_2 : One.{u2} N] [_inst_3 : One.{u1} P] (g : OneHom.{u2, u1} N P _inst_2 _inst_3) (f : OneHom.{u3, u2} M N _inst_1 _inst_2) (x : M), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1264 : M) => P) x) (FunLike.coe.{max (succ u3) (succ u1), succ u3, succ u1} (OneHom.{u3, u1} M P _inst_1 _inst_3) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1264 : M) => P) _x) (OneHomClass.toFunLike.{max u3 u1, u3, u1} (OneHom.{u3, u1} M P _inst_1 _inst_3) M P _inst_1 _inst_3 (OneHom.oneHomClass.{u3, u1} M P _inst_1 _inst_3)) (OneHom.comp.{u3, u2, u1} M N P _inst_1 _inst_2 _inst_3 g f) x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (OneHom.{u2, u1} N P _inst_2 _inst_3) N (fun (_x : N) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1264 : N) => P) _x) (OneHomClass.toFunLike.{max u2 u1, u2, u1} (OneHom.{u2, u1} N P _inst_2 _inst_3) N P _inst_2 _inst_3 (OneHom.oneHomClass.{u2, u1} N P _inst_2 _inst_3)) g (FunLike.coe.{max (succ u3) (succ u2), succ u3, succ u2} (OneHom.{u3, u2} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1264 : M) => N) _x) (OneHomClass.toFunLike.{max u3 u2, u3, u2} (OneHom.{u3, u2} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (OneHom.oneHomClass.{u3, u2} M N _inst_1 _inst_2)) f x))
-Case conversion may be inaccurate. Consider using '#align one_hom.comp_apply OneHom.comp_applyₓ'. -/
 @[to_additive]
 theorem OneHom.comp_apply [One M] [One N] [One P] (g : OneHom N P) (f : OneHom M N) (x : M) :
     g.comp f x = g (f x) :=
@@ -1737,12 +1227,6 @@ theorem OneHom.comp_apply [One M] [One N] [One P] (g : OneHom N P) (f : OneHom M
 #align one_hom.comp_apply OneHom.comp_apply
 #align zero_hom.comp_apply ZeroHom.comp_apply
 
-/- warning: mul_hom.comp_apply -> MulHom.comp_apply is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} {N : Type.{u2}} {P : Type.{u3}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] [_inst_3 : Mul.{u3} P] (g : MulHom.{u2, u3} N P _inst_2 _inst_3) (f : MulHom.{u1, u2} M N _inst_1 _inst_2) (x : M), Eq.{succ u3} P (coeFn.{max (succ u3) (succ u1), max (succ u1) (succ u3)} (MulHom.{u1, u3} M P _inst_1 _inst_3) (fun (_x : MulHom.{u1, u3} M P _inst_1 _inst_3) => M -> P) (MulHom.hasCoeToFun.{u1, u3} M P _inst_1 _inst_3) (MulHom.comp.{u1, u2, u3} M N P _inst_1 _inst_2 _inst_3 g f) x) (coeFn.{max (succ u3) (succ u2), max (succ u2) (succ u3)} (MulHom.{u2, u3} N P _inst_2 _inst_3) (fun (_x : MulHom.{u2, u3} N P _inst_2 _inst_3) => N -> P) (MulHom.hasCoeToFun.{u2, u3} N P _inst_2 _inst_3) g (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MulHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MulHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MulHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f x))
-but is expected to have type
-  forall {M : Type.{u3}} {N : Type.{u2}} {P : Type.{u1}} [_inst_1 : Mul.{u3} M] [_inst_2 : Mul.{u2} N] [_inst_3 : Mul.{u1} P] (g : MulHom.{u2, u1} N P _inst_2 _inst_3) (f : MulHom.{u3, u2} M N _inst_1 _inst_2) (x : M), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => P) x) (FunLike.coe.{max (succ u3) (succ u1), succ u3, succ u1} (MulHom.{u3, u1} M P _inst_1 _inst_3) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => P) _x) (MulHomClass.toFunLike.{max u3 u1, u3, u1} (MulHom.{u3, u1} M P _inst_1 _inst_3) M P _inst_1 _inst_3 (MulHom.mulHomClass.{u3, u1} M P _inst_1 _inst_3)) (MulHom.comp.{u3, u2, u1} M N P _inst_1 _inst_2 _inst_3 g f) x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} N P _inst_2 _inst_3) N (fun (_x : N) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : N) => P) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} N P _inst_2 _inst_3) N P _inst_2 _inst_3 (MulHom.mulHomClass.{u2, u1} N P _inst_2 _inst_3)) g (FunLike.coe.{max (succ u3) (succ u2), succ u3, succ u2} (MulHom.{u3, u2} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{max u3 u2, u3, u2} (MulHom.{u3, u2} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u3, u2} M N _inst_1 _inst_2)) f x))
-Case conversion may be inaccurate. Consider using '#align mul_hom.comp_apply MulHom.comp_applyₓ'. -/
 @[to_additive]
 theorem MulHom.comp_apply [Mul M] [Mul N] [Mul P] (g : N →ₙ* P) (f : M →ₙ* N) (x : M) :
     g.comp f x = g (f x) :=
@@ -1750,12 +1234,6 @@ theorem MulHom.comp_apply [Mul M] [Mul N] [Mul P] (g : N →ₙ* P) (f : M →
 #align mul_hom.comp_apply MulHom.comp_apply
 #align add_hom.comp_apply AddHom.comp_apply
 
-/- warning: monoid_hom.comp_apply -> MonoidHom.comp_apply is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} {N : Type.{u2}} {P : Type.{u3}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N] [_inst_3 : MulOneClass.{u3} P] (g : MonoidHom.{u2, u3} N P _inst_2 _inst_3) (f : MonoidHom.{u1, u2} M N _inst_1 _inst_2) (x : M), Eq.{succ u3} P (coeFn.{max (succ u3) (succ u1), max (succ u1) (succ u3)} (MonoidHom.{u1, u3} M P _inst_1 _inst_3) (fun (_x : MonoidHom.{u1, u3} M P _inst_1 _inst_3) => M -> P) (MonoidHom.hasCoeToFun.{u1, u3} M P _inst_1 _inst_3) (MonoidHom.comp.{u1, u2, u3} M N P _inst_1 _inst_2 _inst_3 g f) x) (coeFn.{max (succ u3) (succ u2), max (succ u2) (succ u3)} (MonoidHom.{u2, u3} N P _inst_2 _inst_3) (fun (_x : MonoidHom.{u2, u3} N P _inst_2 _inst_3) => N -> P) (MonoidHom.hasCoeToFun.{u2, u3} N P _inst_2 _inst_3) g (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MonoidHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MonoidHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f x))
-but is expected to have type
-  forall {M : Type.{u3}} {N : Type.{u2}} {P : Type.{u1}} [_inst_1 : MulOneClass.{u3} M] [_inst_2 : MulOneClass.{u2} N] [_inst_3 : MulOneClass.{u1} P] (g : MonoidHom.{u2, u1} N P _inst_2 _inst_3) (f : MonoidHom.{u3, u2} M N _inst_1 _inst_2) (x : M), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => P) x) (FunLike.coe.{max (succ u3) (succ u1), succ u3, succ u1} (MonoidHom.{u3, u1} M P _inst_1 _inst_3) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => P) _x) (MulHomClass.toFunLike.{max u3 u1, u3, u1} (MonoidHom.{u3, u1} M P _inst_1 _inst_3) M P (MulOneClass.toMul.{u3} M _inst_1) (MulOneClass.toMul.{u1} P _inst_3) (MonoidHomClass.toMulHomClass.{max u3 u1, u3, u1} (MonoidHom.{u3, u1} M P _inst_1 _inst_3) M P _inst_1 _inst_3 (MonoidHom.monoidHomClass.{u3, u1} M P _inst_1 _inst_3))) (MonoidHom.comp.{u3, u2, u1} M N P _inst_1 _inst_2 _inst_3 g f) x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} N P _inst_2 _inst_3) N (fun (_x : N) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : N) => P) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} N P _inst_2 _inst_3) N P (MulOneClass.toMul.{u2} N _inst_2) (MulOneClass.toMul.{u1} P _inst_3) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} N P _inst_2 _inst_3) N P _inst_2 _inst_3 (MonoidHom.monoidHomClass.{u2, u1} N P _inst_2 _inst_3))) g (FunLike.coe.{max (succ u3) (succ u2), succ u3, succ u2} (MonoidHom.{u3, u2} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{max u3 u2, u3, u2} (MonoidHom.{u3, u2} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u3} M _inst_1) (MulOneClass.toMul.{u2} N _inst_2) (MonoidHomClass.toMulHomClass.{max u3 u2, u3, u2} (MonoidHom.{u3, u2} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidHom.monoidHomClass.{u3, u2} M N _inst_1 _inst_2))) f x))
-Case conversion may be inaccurate. Consider using '#align monoid_hom.comp_apply MonoidHom.comp_applyₓ'. -/
 @[to_additive]
 theorem MonoidHom.comp_apply [MulOneClass M] [MulOneClass N] [MulOneClass P] (g : N →* P)
     (f : M →* N) (x : M) : g.comp f x = g (f x) :=
@@ -1763,23 +1241,11 @@ theorem MonoidHom.comp_apply [MulOneClass M] [MulOneClass N] [MulOneClass P] (g
 #align monoid_hom.comp_apply MonoidHom.comp_apply
 #align add_monoid_hom.comp_apply AddMonoidHom.comp_apply
 
-/- warning: monoid_with_zero_hom.comp_apply -> MonoidWithZeroHom.comp_apply is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} {N : Type.{u2}} {P : Type.{u3}} [_inst_1 : MulZeroOneClass.{u1} M] [_inst_2 : MulZeroOneClass.{u2} N] [_inst_3 : MulZeroOneClass.{u3} P] (g : MonoidWithZeroHom.{u2, u3} N P _inst_2 _inst_3) (f : MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) (x : M), Eq.{succ u3} P (coeFn.{max (succ u3) (succ u1), max (succ u1) (succ u3)} (MonoidWithZeroHom.{u1, u3} M P _inst_1 _inst_3) (fun (_x : MonoidWithZeroHom.{u1, u3} M P _inst_1 _inst_3) => M -> P) (MonoidWithZeroHom.hasCoeToFun.{u1, u3} M P _inst_1 _inst_3) (MonoidWithZeroHom.comp.{u1, u2, u3} M N P _inst_1 _inst_2 _inst_3 g f) x) (coeFn.{max (succ u3) (succ u2), max (succ u2) (succ u3)} (MonoidWithZeroHom.{u2, u3} N P _inst_2 _inst_3) (fun (_x : MonoidWithZeroHom.{u2, u3} N P _inst_2 _inst_3) => N -> P) (MonoidWithZeroHom.hasCoeToFun.{u2, u3} N P _inst_2 _inst_3) g (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MonoidWithZeroHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f x))
-but is expected to have type
-  forall {M : Type.{u3}} {N : Type.{u2}} {P : Type.{u1}} [_inst_1 : MulZeroOneClass.{u3} M] [_inst_2 : MulZeroOneClass.{u2} N] [_inst_3 : MulZeroOneClass.{u1} P] (g : MonoidWithZeroHom.{u2, u1} N P _inst_2 _inst_3) (f : MonoidWithZeroHom.{u3, u2} M N _inst_1 _inst_2) (x : M), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => P) x) (FunLike.coe.{max (succ u3) (succ u1), succ u3, succ u1} (MonoidWithZeroHom.{u3, u1} M P _inst_1 _inst_3) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => P) _x) (MulHomClass.toFunLike.{max u3 u1, u3, u1} (MonoidWithZeroHom.{u3, u1} M P _inst_1 _inst_3) M P (MulOneClass.toMul.{u3} M (MulZeroOneClass.toMulOneClass.{u3} M _inst_1)) (MulOneClass.toMul.{u1} P (MulZeroOneClass.toMulOneClass.{u1} P _inst_3)) (MonoidHomClass.toMulHomClass.{max u3 u1, u3, u1} (MonoidWithZeroHom.{u3, u1} M P _inst_1 _inst_3) M P (MulZeroOneClass.toMulOneClass.{u3} M _inst_1) (MulZeroOneClass.toMulOneClass.{u1} P _inst_3) (MonoidWithZeroHomClass.toMonoidHomClass.{max u3 u1, u3, u1} (MonoidWithZeroHom.{u3, u1} M P _inst_1 _inst_3) M P _inst_1 _inst_3 (MonoidWithZeroHom.monoidWithZeroHomClass.{u3, u1} M P _inst_1 _inst_3)))) (MonoidWithZeroHom.comp.{u3, u2, u1} M N P _inst_1 _inst_2 _inst_3 g f) x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidWithZeroHom.{u2, u1} N P _inst_2 _inst_3) N (fun (_x : N) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : N) => P) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} N P _inst_2 _inst_3) N P (MulOneClass.toMul.{u2} N (MulZeroOneClass.toMulOneClass.{u2} N _inst_2)) (MulOneClass.toMul.{u1} P (MulZeroOneClass.toMulOneClass.{u1} P _inst_3)) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} N P _inst_2 _inst_3) N P (MulZeroOneClass.toMulOneClass.{u2} N _inst_2) (MulZeroOneClass.toMulOneClass.{u1} P _inst_3) (MonoidWithZeroHomClass.toMonoidHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} N P _inst_2 _inst_3) N P _inst_2 _inst_3 (MonoidWithZeroHom.monoidWithZeroHomClass.{u2, u1} N P _inst_2 _inst_3)))) g (FunLike.coe.{max (succ u3) (succ u2), succ u3, succ u2} (MonoidWithZeroHom.{u3, u2} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{max u3 u2, u3, u2} (MonoidWithZeroHom.{u3, u2} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u3} M (MulZeroOneClass.toMulOneClass.{u3} M _inst_1)) (MulOneClass.toMul.{u2} N (MulZeroOneClass.toMulOneClass.{u2} N _inst_2)) (MonoidHomClass.toMulHomClass.{max u3 u2, u3, u2} (MonoidWithZeroHom.{u3, u2} M N _inst_1 _inst_2) M N (MulZeroOneClass.toMulOneClass.{u3} M _inst_1) (MulZeroOneClass.toMulOneClass.{u2} N _inst_2) (MonoidWithZeroHomClass.toMonoidHomClass.{max u3 u2, u3, u2} (MonoidWithZeroHom.{u3, u2} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidWithZeroHom.monoidWithZeroHomClass.{u3, u2} M N _inst_1 _inst_2)))) f x))
-Case conversion may be inaccurate. Consider using '#align monoid_with_zero_hom.comp_apply MonoidWithZeroHom.comp_applyₓ'. -/
 theorem MonoidWithZeroHom.comp_apply [MulZeroOneClass M] [MulZeroOneClass N] [MulZeroOneClass P]
     (g : N →*₀ P) (f : M →*₀ N) (x : M) : g.comp f x = g (f x) :=
   rfl
 #align monoid_with_zero_hom.comp_apply MonoidWithZeroHom.comp_apply
 
-/- warning: one_hom.comp_assoc -> OneHom.comp_assoc is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} {N : Type.{u2}} {P : Type.{u3}} {Q : Type.{u4}} [_inst_1 : One.{u1} M] [_inst_2 : One.{u2} N] [_inst_3 : One.{u3} P] [_inst_4 : One.{u4} Q] (f : OneHom.{u1, u2} M N _inst_1 _inst_2) (g : OneHom.{u2, u3} N P _inst_2 _inst_3) (h : OneHom.{u3, u4} P Q _inst_3 _inst_4), Eq.{max (succ u4) (succ u1)} (OneHom.{u1, u4} M Q _inst_1 _inst_4) (OneHom.comp.{u1, u2, u4} M N Q _inst_1 _inst_2 _inst_4 (OneHom.comp.{u2, u3, u4} N P Q _inst_2 _inst_3 _inst_4 h g) f) (OneHom.comp.{u1, u3, u4} M P Q _inst_1 _inst_3 _inst_4 h (OneHom.comp.{u1, u2, u3} M N P _inst_1 _inst_2 _inst_3 g f))
-but is expected to have type
-  forall {M : Type.{u3}} {N : Type.{u2}} {P : Type.{u1}} {Q : Type.{u4}} [_inst_1 : One.{u3} M] [_inst_2 : One.{u2} N] [_inst_3 : One.{u1} P] [_inst_4 : One.{u4} Q] (f : OneHom.{u3, u2} M N _inst_1 _inst_2) (g : OneHom.{u2, u1} N P _inst_2 _inst_3) (h : OneHom.{u1, u4} P Q _inst_3 _inst_4), Eq.{max (succ u3) (succ u4)} (OneHom.{u3, u4} M Q _inst_1 _inst_4) (OneHom.comp.{u3, u2, u4} M N Q _inst_1 _inst_2 _inst_4 (OneHom.comp.{u2, u1, u4} N P Q _inst_2 _inst_3 _inst_4 h g) f) (OneHom.comp.{u3, u1, u4} M P Q _inst_1 _inst_3 _inst_4 h (OneHom.comp.{u3, u2, u1} M N P _inst_1 _inst_2 _inst_3 g f))
-Case conversion may be inaccurate. Consider using '#align one_hom.comp_assoc OneHom.comp_assocₓ'. -/
 /-- Composition of monoid homomorphisms is associative. -/
 @[to_additive "Composition of additive monoid homomorphisms is associative."]
 theorem OneHom.comp_assoc {Q : Type _} [One M] [One N] [One P] [One Q] (f : OneHom M N)
@@ -1788,12 +1254,6 @@ theorem OneHom.comp_assoc {Q : Type _} [One M] [One N] [One P] [One Q] (f : OneH
 #align one_hom.comp_assoc OneHom.comp_assoc
 #align zero_hom.comp_assoc ZeroHom.comp_assoc
 
-/- warning: mul_hom.comp_assoc -> MulHom.comp_assoc is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} {N : Type.{u2}} {P : Type.{u3}} {Q : Type.{u4}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] [_inst_3 : Mul.{u3} P] [_inst_4 : Mul.{u4} Q] (f : MulHom.{u1, u2} M N _inst_1 _inst_2) (g : MulHom.{u2, u3} N P _inst_2 _inst_3) (h : MulHom.{u3, u4} P Q _inst_3 _inst_4), Eq.{max (succ u4) (succ u1)} (MulHom.{u1, u4} M Q _inst_1 _inst_4) (MulHom.comp.{u1, u2, u4} M N Q _inst_1 _inst_2 _inst_4 (MulHom.comp.{u2, u3, u4} N P Q _inst_2 _inst_3 _inst_4 h g) f) (MulHom.comp.{u1, u3, u4} M P Q _inst_1 _inst_3 _inst_4 h (MulHom.comp.{u1, u2, u3} M N P _inst_1 _inst_2 _inst_3 g f))
-but is expected to have type
-  forall {M : Type.{u3}} {N : Type.{u2}} {P : Type.{u1}} {Q : Type.{u4}} [_inst_1 : Mul.{u3} M] [_inst_2 : Mul.{u2} N] [_inst_3 : Mul.{u1} P] [_inst_4 : Mul.{u4} Q] (f : MulHom.{u3, u2} M N _inst_1 _inst_2) (g : MulHom.{u2, u1} N P _inst_2 _inst_3) (h : MulHom.{u1, u4} P Q _inst_3 _inst_4), Eq.{max (succ u3) (succ u4)} (MulHom.{u3, u4} M Q _inst_1 _inst_4) (MulHom.comp.{u3, u2, u4} M N Q _inst_1 _inst_2 _inst_4 (MulHom.comp.{u2, u1, u4} N P Q _inst_2 _inst_3 _inst_4 h g) f) (MulHom.comp.{u3, u1, u4} M P Q _inst_1 _inst_3 _inst_4 h (MulHom.comp.{u3, u2, u1} M N P _inst_1 _inst_2 _inst_3 g f))
-Case conversion may be inaccurate. Consider using '#align mul_hom.comp_assoc MulHom.comp_assocₓ'. -/
 @[to_additive]
 theorem MulHom.comp_assoc {Q : Type _} [Mul M] [Mul N] [Mul P] [Mul Q] (f : M →ₙ* N) (g : N →ₙ* P)
     (h : P →ₙ* Q) : (h.comp g).comp f = h.comp (g.comp f) :=
@@ -1801,12 +1261,6 @@ theorem MulHom.comp_assoc {Q : Type _} [Mul M] [Mul N] [Mul P] [Mul Q] (f : M 
 #align mul_hom.comp_assoc MulHom.comp_assoc
 #align add_hom.comp_assoc AddHom.comp_assoc
 
-/- warning: monoid_hom.comp_assoc -> MonoidHom.comp_assoc is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} {N : Type.{u2}} {P : Type.{u3}} {Q : Type.{u4}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N] [_inst_3 : MulOneClass.{u3} P] [_inst_4 : MulOneClass.{u4} Q] (f : MonoidHom.{u1, u2} M N _inst_1 _inst_2) (g : MonoidHom.{u2, u3} N P _inst_2 _inst_3) (h : MonoidHom.{u3, u4} P Q _inst_3 _inst_4), Eq.{max (succ u4) (succ u1)} (MonoidHom.{u1, u4} M Q _inst_1 _inst_4) (MonoidHom.comp.{u1, u2, u4} M N Q _inst_1 _inst_2 _inst_4 (MonoidHom.comp.{u2, u3, u4} N P Q _inst_2 _inst_3 _inst_4 h g) f) (MonoidHom.comp.{u1, u3, u4} M P Q _inst_1 _inst_3 _inst_4 h (MonoidHom.comp.{u1, u2, u3} M N P _inst_1 _inst_2 _inst_3 g f))
-but is expected to have type
-  forall {M : Type.{u3}} {N : Type.{u2}} {P : Type.{u1}} {Q : Type.{u4}} [_inst_1 : MulOneClass.{u3} M] [_inst_2 : MulOneClass.{u2} N] [_inst_3 : MulOneClass.{u1} P] [_inst_4 : MulOneClass.{u4} Q] (f : MonoidHom.{u3, u2} M N _inst_1 _inst_2) (g : MonoidHom.{u2, u1} N P _inst_2 _inst_3) (h : MonoidHom.{u1, u4} P Q _inst_3 _inst_4), Eq.{max (succ u3) (succ u4)} (MonoidHom.{u3, u4} M Q _inst_1 _inst_4) (MonoidHom.comp.{u3, u2, u4} M N Q _inst_1 _inst_2 _inst_4 (MonoidHom.comp.{u2, u1, u4} N P Q _inst_2 _inst_3 _inst_4 h g) f) (MonoidHom.comp.{u3, u1, u4} M P Q _inst_1 _inst_3 _inst_4 h (MonoidHom.comp.{u3, u2, u1} M N P _inst_1 _inst_2 _inst_3 g f))
-Case conversion may be inaccurate. Consider using '#align monoid_hom.comp_assoc MonoidHom.comp_assocₓ'. -/
 @[to_additive]
 theorem MonoidHom.comp_assoc {Q : Type _} [MulOneClass M] [MulOneClass N] [MulOneClass P]
     [MulOneClass Q] (f : M →* N) (g : N →* P) (h : P →* Q) :
@@ -1815,24 +1269,12 @@ theorem MonoidHom.comp_assoc {Q : Type _} [MulOneClass M] [MulOneClass N] [MulOn
 #align monoid_hom.comp_assoc MonoidHom.comp_assoc
 #align add_monoid_hom.comp_assoc AddMonoidHom.comp_assoc
 
-/- warning: monoid_with_zero_hom.comp_assoc -> MonoidWithZeroHom.comp_assoc is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} {N : Type.{u2}} {P : Type.{u3}} {Q : Type.{u4}} [_inst_1 : MulZeroOneClass.{u1} M] [_inst_2 : MulZeroOneClass.{u2} N] [_inst_3 : MulZeroOneClass.{u3} P] [_inst_4 : MulZeroOneClass.{u4} Q] (f : MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) (g : MonoidWithZeroHom.{u2, u3} N P _inst_2 _inst_3) (h : MonoidWithZeroHom.{u3, u4} P Q _inst_3 _inst_4), Eq.{max (succ u4) (succ u1)} (MonoidWithZeroHom.{u1, u4} M Q _inst_1 _inst_4) (MonoidWithZeroHom.comp.{u1, u2, u4} M N Q _inst_1 _inst_2 _inst_4 (MonoidWithZeroHom.comp.{u2, u3, u4} N P Q _inst_2 _inst_3 _inst_4 h g) f) (MonoidWithZeroHom.comp.{u1, u3, u4} M P Q _inst_1 _inst_3 _inst_4 h (MonoidWithZeroHom.comp.{u1, u2, u3} M N P _inst_1 _inst_2 _inst_3 g f))
-but is expected to have type
-  forall {M : Type.{u3}} {N : Type.{u2}} {P : Type.{u1}} {Q : Type.{u4}} [_inst_1 : MulZeroOneClass.{u3} M] [_inst_2 : MulZeroOneClass.{u2} N] [_inst_3 : MulZeroOneClass.{u1} P] [_inst_4 : MulZeroOneClass.{u4} Q] (f : MonoidWithZeroHom.{u3, u2} M N _inst_1 _inst_2) (g : MonoidWithZeroHom.{u2, u1} N P _inst_2 _inst_3) (h : MonoidWithZeroHom.{u1, u4} P Q _inst_3 _inst_4), Eq.{max (succ u3) (succ u4)} (MonoidWithZeroHom.{u3, u4} M Q _inst_1 _inst_4) (MonoidWithZeroHom.comp.{u3, u2, u4} M N Q _inst_1 _inst_2 _inst_4 (MonoidWithZeroHom.comp.{u2, u1, u4} N P Q _inst_2 _inst_3 _inst_4 h g) f) (MonoidWithZeroHom.comp.{u3, u1, u4} M P Q _inst_1 _inst_3 _inst_4 h (MonoidWithZeroHom.comp.{u3, u2, u1} M N P _inst_1 _inst_2 _inst_3 g f))
-Case conversion may be inaccurate. Consider using '#align monoid_with_zero_hom.comp_assoc MonoidWithZeroHom.comp_assocₓ'. -/
 theorem MonoidWithZeroHom.comp_assoc {Q : Type _} [MulZeroOneClass M] [MulZeroOneClass N]
     [MulZeroOneClass P] [MulZeroOneClass Q] (f : M →*₀ N) (g : N →*₀ P) (h : P →*₀ Q) :
     (h.comp g).comp f = h.comp (g.comp f) :=
   rfl
 #align monoid_with_zero_hom.comp_assoc MonoidWithZeroHom.comp_assoc
 
-/- warning: one_hom.cancel_right -> OneHom.cancel_right is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} {N : Type.{u2}} {P : Type.{u3}} [_inst_1 : One.{u1} M] [_inst_2 : One.{u2} N] [_inst_3 : One.{u3} P] {g₁ : OneHom.{u2, u3} N P _inst_2 _inst_3} {g₂ : OneHom.{u2, u3} N P _inst_2 _inst_3} {f : OneHom.{u1, u2} M N _inst_1 _inst_2}, (Function.Surjective.{succ u1, succ u2} M N (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (OneHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : OneHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (OneHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f)) -> (Iff (Eq.{max (succ u3) (succ u1)} (OneHom.{u1, u3} M P _inst_1 _inst_3) (OneHom.comp.{u1, u2, u3} M N P _inst_1 _inst_2 _inst_3 g₁ f) (OneHom.comp.{u1, u2, u3} M N P _inst_1 _inst_2 _inst_3 g₂ f)) (Eq.{max (succ u3) (succ u2)} (OneHom.{u2, u3} N P _inst_2 _inst_3) g₁ g₂))
-but is expected to have type
-  forall {M : Type.{u3}} {N : Type.{u2}} {P : Type.{u1}} [_inst_1 : One.{u3} M] [_inst_2 : One.{u2} N] [_inst_3 : One.{u1} P] {g₁ : OneHom.{u2, u1} N P _inst_2 _inst_3} {g₂ : OneHom.{u2, u1} N P _inst_2 _inst_3} {f : OneHom.{u3, u2} M N _inst_1 _inst_2}, (Function.Surjective.{succ u3, succ u2} M N (FunLike.coe.{max (succ u3) (succ u2), succ u3, succ u2} (OneHom.{u3, u2} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1264 : M) => N) _x) (OneHomClass.toFunLike.{max u3 u2, u3, u2} (OneHom.{u3, u2} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (OneHom.oneHomClass.{u3, u2} M N _inst_1 _inst_2)) f)) -> (Iff (Eq.{max (succ u3) (succ u1)} (OneHom.{u3, u1} M P _inst_1 _inst_3) (OneHom.comp.{u3, u2, u1} M N P _inst_1 _inst_2 _inst_3 g₁ f) (OneHom.comp.{u3, u2, u1} M N P _inst_1 _inst_2 _inst_3 g₂ f)) (Eq.{max (succ u2) (succ u1)} (OneHom.{u2, u1} N P _inst_2 _inst_3) g₁ g₂))
-Case conversion may be inaccurate. Consider using '#align one_hom.cancel_right OneHom.cancel_rightₓ'. -/
 @[to_additive]
 theorem OneHom.cancel_right [One M] [One N] [One P] {g₁ g₂ : OneHom N P} {f : OneHom M N}
     (hf : Function.Surjective f) : g₁.comp f = g₂.comp f ↔ g₁ = g₂ :=
@@ -1840,12 +1282,6 @@ theorem OneHom.cancel_right [One M] [One N] [One P] {g₁ g₂ : OneHom N P} {f
 #align one_hom.cancel_right OneHom.cancel_right
 #align zero_hom.cancel_right ZeroHom.cancel_right
 
-/- warning: mul_hom.cancel_right -> MulHom.cancel_right is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} {N : Type.{u2}} {P : Type.{u3}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] [_inst_3 : Mul.{u3} P] {g₁ : MulHom.{u2, u3} N P _inst_2 _inst_3} {g₂ : MulHom.{u2, u3} N P _inst_2 _inst_3} {f : MulHom.{u1, u2} M N _inst_1 _inst_2}, (Function.Surjective.{succ u1, succ u2} M N (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MulHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MulHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MulHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f)) -> (Iff (Eq.{max (succ u3) (succ u1)} (MulHom.{u1, u3} M P _inst_1 _inst_3) (MulHom.comp.{u1, u2, u3} M N P _inst_1 _inst_2 _inst_3 g₁ f) (MulHom.comp.{u1, u2, u3} M N P _inst_1 _inst_2 _inst_3 g₂ f)) (Eq.{max (succ u3) (succ u2)} (MulHom.{u2, u3} N P _inst_2 _inst_3) g₁ g₂))
-but is expected to have type
-  forall {M : Type.{u3}} {N : Type.{u2}} {P : Type.{u1}} [_inst_1 : Mul.{u3} M] [_inst_2 : Mul.{u2} N] [_inst_3 : Mul.{u1} P] {g₁ : MulHom.{u2, u1} N P _inst_2 _inst_3} {g₂ : MulHom.{u2, u1} N P _inst_2 _inst_3} {f : MulHom.{u3, u2} M N _inst_1 _inst_2}, (Function.Surjective.{succ u3, succ u2} M N (FunLike.coe.{max (succ u3) (succ u2), succ u3, succ u2} (MulHom.{u3, u2} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{max u3 u2, u3, u2} (MulHom.{u3, u2} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u3, u2} M N _inst_1 _inst_2)) f)) -> (Iff (Eq.{max (succ u3) (succ u1)} (MulHom.{u3, u1} M P _inst_1 _inst_3) (MulHom.comp.{u3, u2, u1} M N P _inst_1 _inst_2 _inst_3 g₁ f) (MulHom.comp.{u3, u2, u1} M N P _inst_1 _inst_2 _inst_3 g₂ f)) (Eq.{max (succ u2) (succ u1)} (MulHom.{u2, u1} N P _inst_2 _inst_3) g₁ g₂))
-Case conversion may be inaccurate. Consider using '#align mul_hom.cancel_right MulHom.cancel_rightₓ'. -/
 @[to_additive]
 theorem MulHom.cancel_right [Mul M] [Mul N] [Mul P] {g₁ g₂ : N →ₙ* P} {f : M →ₙ* N}
     (hf : Function.Surjective f) : g₁.comp f = g₂.comp f ↔ g₁ = g₂ :=
@@ -1853,12 +1289,6 @@ theorem MulHom.cancel_right [Mul M] [Mul N] [Mul P] {g₁ g₂ : N →ₙ* P} {f
 #align mul_hom.cancel_right MulHom.cancel_right
 #align add_hom.cancel_right AddHom.cancel_right
 
-/- warning: monoid_hom.cancel_right -> MonoidHom.cancel_right is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} {N : Type.{u2}} {P : Type.{u3}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N] [_inst_3 : MulOneClass.{u3} P] {g₁ : MonoidHom.{u2, u3} N P _inst_2 _inst_3} {g₂ : MonoidHom.{u2, u3} N P _inst_2 _inst_3} {f : MonoidHom.{u1, u2} M N _inst_1 _inst_2}, (Function.Surjective.{succ u1, succ u2} M N (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MonoidHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MonoidHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f)) -> (Iff (Eq.{max (succ u3) (succ u1)} (MonoidHom.{u1, u3} M P _inst_1 _inst_3) (MonoidHom.comp.{u1, u2, u3} M N P _inst_1 _inst_2 _inst_3 g₁ f) (MonoidHom.comp.{u1, u2, u3} M N P _inst_1 _inst_2 _inst_3 g₂ f)) (Eq.{max (succ u3) (succ u2)} (MonoidHom.{u2, u3} N P _inst_2 _inst_3) g₁ g₂))
-but is expected to have type
-  forall {M : Type.{u3}} {N : Type.{u2}} {P : Type.{u1}} [_inst_1 : MulOneClass.{u3} M] [_inst_2 : MulOneClass.{u2} N] [_inst_3 : MulOneClass.{u1} P] {g₁ : MonoidHom.{u2, u1} N P _inst_2 _inst_3} {g₂ : MonoidHom.{u2, u1} N P _inst_2 _inst_3} {f : MonoidHom.{u3, u2} M N _inst_1 _inst_2}, (Function.Surjective.{succ u3, succ u2} M N (FunLike.coe.{max (succ u3) (succ u2), succ u3, succ u2} (MonoidHom.{u3, u2} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{max u3 u2, u3, u2} (MonoidHom.{u3, u2} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u3} M _inst_1) (MulOneClass.toMul.{u2} N _inst_2) (MonoidHomClass.toMulHomClass.{max u3 u2, u3, u2} (MonoidHom.{u3, u2} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidHom.monoidHomClass.{u3, u2} M N _inst_1 _inst_2))) f)) -> (Iff (Eq.{max (succ u3) (succ u1)} (MonoidHom.{u3, u1} M P _inst_1 _inst_3) (MonoidHom.comp.{u3, u2, u1} M N P _inst_1 _inst_2 _inst_3 g₁ f) (MonoidHom.comp.{u3, u2, u1} M N P _inst_1 _inst_2 _inst_3 g₂ f)) (Eq.{max (succ u2) (succ u1)} (MonoidHom.{u2, u1} N P _inst_2 _inst_3) g₁ g₂))
-Case conversion may be inaccurate. Consider using '#align monoid_hom.cancel_right MonoidHom.cancel_rightₓ'. -/
 @[to_additive]
 theorem MonoidHom.cancel_right [MulOneClass M] [MulOneClass N] [MulOneClass P] {g₁ g₂ : N →* P}
     {f : M →* N} (hf : Function.Surjective f) : g₁.comp f = g₂.comp f ↔ g₁ = g₂ :=
@@ -1866,24 +1296,12 @@ theorem MonoidHom.cancel_right [MulOneClass M] [MulOneClass N] [MulOneClass P] {
 #align monoid_hom.cancel_right MonoidHom.cancel_right
 #align add_monoid_hom.cancel_right AddMonoidHom.cancel_right
 
-/- warning: monoid_with_zero_hom.cancel_right -> MonoidWithZeroHom.cancel_right is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} {N : Type.{u2}} {P : Type.{u3}} [_inst_1 : MulZeroOneClass.{u1} M] [_inst_2 : MulZeroOneClass.{u2} N] [_inst_3 : MulZeroOneClass.{u3} P] {g₁ : MonoidWithZeroHom.{u2, u3} N P _inst_2 _inst_3} {g₂ : MonoidWithZeroHom.{u2, u3} N P _inst_2 _inst_3} {f : MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2}, (Function.Surjective.{succ u1, succ u2} M N (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MonoidWithZeroHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f)) -> (Iff (Eq.{max (succ u3) (succ u1)} (MonoidWithZeroHom.{u1, u3} M P _inst_1 _inst_3) (MonoidWithZeroHom.comp.{u1, u2, u3} M N P _inst_1 _inst_2 _inst_3 g₁ f) (MonoidWithZeroHom.comp.{u1, u2, u3} M N P _inst_1 _inst_2 _inst_3 g₂ f)) (Eq.{max (succ u3) (succ u2)} (MonoidWithZeroHom.{u2, u3} N P _inst_2 _inst_3) g₁ g₂))
-but is expected to have type
-  forall {M : Type.{u3}} {N : Type.{u2}} {P : Type.{u1}} [_inst_1 : MulZeroOneClass.{u3} M] [_inst_2 : MulZeroOneClass.{u2} N] [_inst_3 : MulZeroOneClass.{u1} P] {g₁ : MonoidWithZeroHom.{u2, u1} N P _inst_2 _inst_3} {g₂ : MonoidWithZeroHom.{u2, u1} N P _inst_2 _inst_3} {f : MonoidWithZeroHom.{u3, u2} M N _inst_1 _inst_2}, (Function.Surjective.{succ u3, succ u2} M N (FunLike.coe.{max (succ u3) (succ u2), succ u3, succ u2} (MonoidWithZeroHom.{u3, u2} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{max u3 u2, u3, u2} (MonoidWithZeroHom.{u3, u2} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u3} M (MulZeroOneClass.toMulOneClass.{u3} M _inst_1)) (MulOneClass.toMul.{u2} N (MulZeroOneClass.toMulOneClass.{u2} N _inst_2)) (MonoidHomClass.toMulHomClass.{max u3 u2, u3, u2} (MonoidWithZeroHom.{u3, u2} M N _inst_1 _inst_2) M N (MulZeroOneClass.toMulOneClass.{u3} M _inst_1) (MulZeroOneClass.toMulOneClass.{u2} N _inst_2) (MonoidWithZeroHomClass.toMonoidHomClass.{max u3 u2, u3, u2} (MonoidWithZeroHom.{u3, u2} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidWithZeroHom.monoidWithZeroHomClass.{u3, u2} M N _inst_1 _inst_2)))) f)) -> (Iff (Eq.{max (succ u3) (succ u1)} (MonoidWithZeroHom.{u3, u1} M P _inst_1 _inst_3) (MonoidWithZeroHom.comp.{u3, u2, u1} M N P _inst_1 _inst_2 _inst_3 g₁ f) (MonoidWithZeroHom.comp.{u3, u2, u1} M N P _inst_1 _inst_2 _inst_3 g₂ f)) (Eq.{max (succ u2) (succ u1)} (MonoidWithZeroHom.{u2, u1} N P _inst_2 _inst_3) g₁ g₂))
-Case conversion may be inaccurate. Consider using '#align monoid_with_zero_hom.cancel_right MonoidWithZeroHom.cancel_rightₓ'. -/
 theorem MonoidWithZeroHom.cancel_right [MulZeroOneClass M] [MulZeroOneClass N] [MulZeroOneClass P]
     {g₁ g₂ : N →*₀ P} {f : M →*₀ N} (hf : Function.Surjective f) :
     g₁.comp f = g₂.comp f ↔ g₁ = g₂ :=
   ⟨fun h => MonoidWithZeroHom.ext <| hf.forall.2 (MonoidWithZeroHom.ext_iff.1 h), fun h => h ▸ rfl⟩
 #align monoid_with_zero_hom.cancel_right MonoidWithZeroHom.cancel_right
 
-/- warning: one_hom.cancel_left -> OneHom.cancel_left is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} {N : Type.{u2}} {P : Type.{u3}} [_inst_1 : One.{u1} M] [_inst_2 : One.{u2} N] [_inst_3 : One.{u3} P] {g : OneHom.{u2, u3} N P _inst_2 _inst_3} {f₁ : OneHom.{u1, u2} M N _inst_1 _inst_2} {f₂ : OneHom.{u1, u2} M N _inst_1 _inst_2}, (Function.Injective.{succ u2, succ u3} N P (coeFn.{max (succ u3) (succ u2), max (succ u2) (succ u3)} (OneHom.{u2, u3} N P _inst_2 _inst_3) (fun (_x : OneHom.{u2, u3} N P _inst_2 _inst_3) => N -> P) (OneHom.hasCoeToFun.{u2, u3} N P _inst_2 _inst_3) g)) -> (Iff (Eq.{max (succ u3) (succ u1)} (OneHom.{u1, u3} M P _inst_1 _inst_3) (OneHom.comp.{u1, u2, u3} M N P _inst_1 _inst_2 _inst_3 g f₁) (OneHom.comp.{u1, u2, u3} M N P _inst_1 _inst_2 _inst_3 g f₂)) (Eq.{max (succ u2) (succ u1)} (OneHom.{u1, u2} M N _inst_1 _inst_2) f₁ f₂))
-but is expected to have type
-  forall {M : Type.{u3}} {N : Type.{u2}} {P : Type.{u1}} [_inst_1 : One.{u3} M] [_inst_2 : One.{u2} N] [_inst_3 : One.{u1} P] {g : OneHom.{u2, u1} N P _inst_2 _inst_3} {f₁ : OneHom.{u3, u2} M N _inst_1 _inst_2} {f₂ : OneHom.{u3, u2} M N _inst_1 _inst_2}, (Function.Injective.{succ u2, succ u1} N P (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (OneHom.{u2, u1} N P _inst_2 _inst_3) N (fun (_x : N) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1264 : N) => P) _x) (OneHomClass.toFunLike.{max u2 u1, u2, u1} (OneHom.{u2, u1} N P _inst_2 _inst_3) N P _inst_2 _inst_3 (OneHom.oneHomClass.{u2, u1} N P _inst_2 _inst_3)) g)) -> (Iff (Eq.{max (succ u3) (succ u1)} (OneHom.{u3, u1} M P _inst_1 _inst_3) (OneHom.comp.{u3, u2, u1} M N P _inst_1 _inst_2 _inst_3 g f₁) (OneHom.comp.{u3, u2, u1} M N P _inst_1 _inst_2 _inst_3 g f₂)) (Eq.{max (succ u3) (succ u2)} (OneHom.{u3, u2} M N _inst_1 _inst_2) f₁ f₂))
-Case conversion may be inaccurate. Consider using '#align one_hom.cancel_left OneHom.cancel_leftₓ'. -/
 @[to_additive]
 theorem OneHom.cancel_left [One M] [One N] [One P] {g : OneHom N P} {f₁ f₂ : OneHom M N}
     (hg : Function.Injective g) : g.comp f₁ = g.comp f₂ ↔ f₁ = f₂ :=
@@ -1892,12 +1310,6 @@ theorem OneHom.cancel_left [One M] [One N] [One P] {g : OneHom N P} {f₁ f₂ :
 #align one_hom.cancel_left OneHom.cancel_left
 #align zero_hom.cancel_left ZeroHom.cancel_left
 
-/- warning: mul_hom.cancel_left -> MulHom.cancel_left is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} {N : Type.{u2}} {P : Type.{u3}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] [_inst_3 : Mul.{u3} P] {g : MulHom.{u2, u3} N P _inst_2 _inst_3} {f₁ : MulHom.{u1, u2} M N _inst_1 _inst_2} {f₂ : MulHom.{u1, u2} M N _inst_1 _inst_2}, (Function.Injective.{succ u2, succ u3} N P (coeFn.{max (succ u3) (succ u2), max (succ u2) (succ u3)} (MulHom.{u2, u3} N P _inst_2 _inst_3) (fun (_x : MulHom.{u2, u3} N P _inst_2 _inst_3) => N -> P) (MulHom.hasCoeToFun.{u2, u3} N P _inst_2 _inst_3) g)) -> (Iff (Eq.{max (succ u3) (succ u1)} (MulHom.{u1, u3} M P _inst_1 _inst_3) (MulHom.comp.{u1, u2, u3} M N P _inst_1 _inst_2 _inst_3 g f₁) (MulHom.comp.{u1, u2, u3} M N P _inst_1 _inst_2 _inst_3 g f₂)) (Eq.{max (succ u2) (succ u1)} (MulHom.{u1, u2} M N _inst_1 _inst_2) f₁ f₂))
-but is expected to have type
-  forall {M : Type.{u3}} {N : Type.{u2}} {P : Type.{u1}} [_inst_1 : Mul.{u3} M] [_inst_2 : Mul.{u2} N] [_inst_3 : Mul.{u1} P] {g : MulHom.{u2, u1} N P _inst_2 _inst_3} {f₁ : MulHom.{u3, u2} M N _inst_1 _inst_2} {f₂ : MulHom.{u3, u2} M N _inst_1 _inst_2}, (Function.Injective.{succ u2, succ u1} N P (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} N P _inst_2 _inst_3) N (fun (_x : N) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : N) => P) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} N P _inst_2 _inst_3) N P _inst_2 _inst_3 (MulHom.mulHomClass.{u2, u1} N P _inst_2 _inst_3)) g)) -> (Iff (Eq.{max (succ u3) (succ u1)} (MulHom.{u3, u1} M P _inst_1 _inst_3) (MulHom.comp.{u3, u2, u1} M N P _inst_1 _inst_2 _inst_3 g f₁) (MulHom.comp.{u3, u2, u1} M N P _inst_1 _inst_2 _inst_3 g f₂)) (Eq.{max (succ u3) (succ u2)} (MulHom.{u3, u2} M N _inst_1 _inst_2) f₁ f₂))
-Case conversion may be inaccurate. Consider using '#align mul_hom.cancel_left MulHom.cancel_leftₓ'. -/
 @[to_additive]
 theorem MulHom.cancel_left [Mul M] [Mul N] [Mul P] {g : N →ₙ* P} {f₁ f₂ : M →ₙ* N}
     (hg : Function.Injective g) : g.comp f₁ = g.comp f₂ ↔ f₁ = f₂ :=
@@ -1906,12 +1318,6 @@ theorem MulHom.cancel_left [Mul M] [Mul N] [Mul P] {g : N →ₙ* P} {f₁ f₂
 #align mul_hom.cancel_left MulHom.cancel_left
 #align add_hom.cancel_left AddHom.cancel_left
 
-/- warning: monoid_hom.cancel_left -> MonoidHom.cancel_left is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} {N : Type.{u2}} {P : Type.{u3}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N] [_inst_3 : MulOneClass.{u3} P] {g : MonoidHom.{u2, u3} N P _inst_2 _inst_3} {f₁ : MonoidHom.{u1, u2} M N _inst_1 _inst_2} {f₂ : MonoidHom.{u1, u2} M N _inst_1 _inst_2}, (Function.Injective.{succ u2, succ u3} N P (coeFn.{max (succ u3) (succ u2), max (succ u2) (succ u3)} (MonoidHom.{u2, u3} N P _inst_2 _inst_3) (fun (_x : MonoidHom.{u2, u3} N P _inst_2 _inst_3) => N -> P) (MonoidHom.hasCoeToFun.{u2, u3} N P _inst_2 _inst_3) g)) -> (Iff (Eq.{max (succ u3) (succ u1)} (MonoidHom.{u1, u3} M P _inst_1 _inst_3) (MonoidHom.comp.{u1, u2, u3} M N P _inst_1 _inst_2 _inst_3 g f₁) (MonoidHom.comp.{u1, u2, u3} M N P _inst_1 _inst_2 _inst_3 g f₂)) (Eq.{max (succ u2) (succ u1)} (MonoidHom.{u1, u2} M N _inst_1 _inst_2) f₁ f₂))
-but is expected to have type
-  forall {M : Type.{u3}} {N : Type.{u2}} {P : Type.{u1}} [_inst_1 : MulOneClass.{u3} M] [_inst_2 : MulOneClass.{u2} N] [_inst_3 : MulOneClass.{u1} P] {g : MonoidHom.{u2, u1} N P _inst_2 _inst_3} {f₁ : MonoidHom.{u3, u2} M N _inst_1 _inst_2} {f₂ : MonoidHom.{u3, u2} M N _inst_1 _inst_2}, (Function.Injective.{succ u2, succ u1} N P (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} N P _inst_2 _inst_3) N (fun (_x : N) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : N) => P) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} N P _inst_2 _inst_3) N P (MulOneClass.toMul.{u2} N _inst_2) (MulOneClass.toMul.{u1} P _inst_3) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} N P _inst_2 _inst_3) N P _inst_2 _inst_3 (MonoidHom.monoidHomClass.{u2, u1} N P _inst_2 _inst_3))) g)) -> (Iff (Eq.{max (succ u3) (succ u1)} (MonoidHom.{u3, u1} M P _inst_1 _inst_3) (MonoidHom.comp.{u3, u2, u1} M N P _inst_1 _inst_2 _inst_3 g f₁) (MonoidHom.comp.{u3, u2, u1} M N P _inst_1 _inst_2 _inst_3 g f₂)) (Eq.{max (succ u3) (succ u2)} (MonoidHom.{u3, u2} M N _inst_1 _inst_2) f₁ f₂))
-Case conversion may be inaccurate. Consider using '#align monoid_hom.cancel_left MonoidHom.cancel_leftₓ'. -/
 @[to_additive]
 theorem MonoidHom.cancel_left [MulOneClass M] [MulOneClass N] [MulOneClass P] {g : N →* P}
     {f₁ f₂ : M →* N} (hg : Function.Injective g) : g.comp f₁ = g.comp f₂ ↔ f₁ = f₂ :=
@@ -1920,12 +1326,6 @@ theorem MonoidHom.cancel_left [MulOneClass M] [MulOneClass N] [MulOneClass P] {g
 #align monoid_hom.cancel_left MonoidHom.cancel_left
 #align add_monoid_hom.cancel_left AddMonoidHom.cancel_left
 
-/- warning: monoid_with_zero_hom.cancel_left -> MonoidWithZeroHom.cancel_left is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} {N : Type.{u2}} {P : Type.{u3}} [_inst_1 : MulZeroOneClass.{u1} M] [_inst_2 : MulZeroOneClass.{u2} N] [_inst_3 : MulZeroOneClass.{u3} P] {g : MonoidWithZeroHom.{u2, u3} N P _inst_2 _inst_3} {f₁ : MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2} {f₂ : MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2}, (Function.Injective.{succ u2, succ u3} N P (coeFn.{max (succ u3) (succ u2), max (succ u2) (succ u3)} (MonoidWithZeroHom.{u2, u3} N P _inst_2 _inst_3) (fun (_x : MonoidWithZeroHom.{u2, u3} N P _inst_2 _inst_3) => N -> P) (MonoidWithZeroHom.hasCoeToFun.{u2, u3} N P _inst_2 _inst_3) g)) -> (Iff (Eq.{max (succ u3) (succ u1)} (MonoidWithZeroHom.{u1, u3} M P _inst_1 _inst_3) (MonoidWithZeroHom.comp.{u1, u2, u3} M N P _inst_1 _inst_2 _inst_3 g f₁) (MonoidWithZeroHom.comp.{u1, u2, u3} M N P _inst_1 _inst_2 _inst_3 g f₂)) (Eq.{max (succ u2) (succ u1)} (MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) f₁ f₂))
-but is expected to have type
-  forall {M : Type.{u3}} {N : Type.{u2}} {P : Type.{u1}} [_inst_1 : MulZeroOneClass.{u3} M] [_inst_2 : MulZeroOneClass.{u2} N] [_inst_3 : MulZeroOneClass.{u1} P] {g : MonoidWithZeroHom.{u2, u1} N P _inst_2 _inst_3} {f₁ : MonoidWithZeroHom.{u3, u2} M N _inst_1 _inst_2} {f₂ : MonoidWithZeroHom.{u3, u2} M N _inst_1 _inst_2}, (Function.Injective.{succ u2, succ u1} N P (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidWithZeroHom.{u2, u1} N P _inst_2 _inst_3) N (fun (_x : N) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : N) => P) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} N P _inst_2 _inst_3) N P (MulOneClass.toMul.{u2} N (MulZeroOneClass.toMulOneClass.{u2} N _inst_2)) (MulOneClass.toMul.{u1} P (MulZeroOneClass.toMulOneClass.{u1} P _inst_3)) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} N P _inst_2 _inst_3) N P (MulZeroOneClass.toMulOneClass.{u2} N _inst_2) (MulZeroOneClass.toMulOneClass.{u1} P _inst_3) (MonoidWithZeroHomClass.toMonoidHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} N P _inst_2 _inst_3) N P _inst_2 _inst_3 (MonoidWithZeroHom.monoidWithZeroHomClass.{u2, u1} N P _inst_2 _inst_3)))) g)) -> (Iff (Eq.{max (succ u3) (succ u1)} (MonoidWithZeroHom.{u3, u1} M P _inst_1 _inst_3) (MonoidWithZeroHom.comp.{u3, u2, u1} M N P _inst_1 _inst_2 _inst_3 g f₁) (MonoidWithZeroHom.comp.{u3, u2, u1} M N P _inst_1 _inst_2 _inst_3 g f₂)) (Eq.{max (succ u3) (succ u2)} (MonoidWithZeroHom.{u3, u2} M N _inst_1 _inst_2) f₁ f₂))
-Case conversion may be inaccurate. Consider using '#align monoid_with_zero_hom.cancel_left MonoidWithZeroHom.cancel_leftₓ'. -/
 theorem MonoidWithZeroHom.cancel_left [MulZeroOneClass M] [MulZeroOneClass N] [MulZeroOneClass P]
     {g : N →*₀ P} {f₁ f₂ : M →*₀ N} (hg : Function.Injective g) : g.comp f₁ = g.comp f₂ ↔ f₁ = f₂ :=
   ⟨fun h =>
@@ -1934,12 +1334,6 @@ theorem MonoidWithZeroHom.cancel_left [MulZeroOneClass M] [MulZeroOneClass N] [M
     fun h => h ▸ rfl⟩
 #align monoid_with_zero_hom.cancel_left MonoidWithZeroHom.cancel_left
 
-/- warning: monoid_hom.to_one_hom_injective -> MonoidHom.toOneHom_injective is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N], Function.Injective.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (OneHom.{u1, u2} M N (MulOneClass.toHasOne.{u1} M _inst_1) (MulOneClass.toHasOne.{u2} N _inst_2)) (MonoidHom.toOneHom.{u1, u2} M N _inst_1 _inst_2)
-but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u1} N], Function.Injective.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (OneHom.{u2, u1} M N (MulOneClass.toOne.{u2} M _inst_1) (MulOneClass.toOne.{u1} N _inst_2)) (MonoidHom.toOneHom.{u2, u1} M N _inst_1 _inst_2)
-Case conversion may be inaccurate. Consider using '#align monoid_hom.to_one_hom_injective MonoidHom.toOneHom_injectiveₓ'. -/
 @[to_additive]
 theorem MonoidHom.toOneHom_injective [MulOneClass M] [MulOneClass N] :
     Function.Injective (MonoidHom.toOneHom : (M →* N) → OneHom M N) := fun f g h =>
@@ -1947,12 +1341,6 @@ theorem MonoidHom.toOneHom_injective [MulOneClass M] [MulOneClass N] :
 #align monoid_hom.to_one_hom_injective MonoidHom.toOneHom_injective
 #align add_monoid_hom.to_zero_hom_injective AddMonoidHom.toZeroHom_injective
 
-/- warning: monoid_hom.to_mul_hom_injective -> MonoidHom.toMulHom_injective is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N], Function.Injective.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MulHom.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.toMulHom.{u1, u2} M N _inst_1 _inst_2)
-but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u1} N], Function.Injective.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MulHom.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2)) (MonoidHom.toMulHom.{u2, u1} M N _inst_1 _inst_2)
-Case conversion may be inaccurate. Consider using '#align monoid_hom.to_mul_hom_injective MonoidHom.toMulHom_injectiveₓ'. -/
 @[to_additive]
 theorem MonoidHom.toMulHom_injective [MulOneClass M] [MulOneClass N] :
     Function.Injective (MonoidHom.toMulHom : (M →* N) → M →ₙ* N) := fun f g h =>
@@ -1960,58 +1348,28 @@ theorem MonoidHom.toMulHom_injective [MulOneClass M] [MulOneClass N] :
 #align monoid_hom.to_mul_hom_injective MonoidHom.toMulHom_injective
 #align add_monoid_hom.to_add_hom_injective AddMonoidHom.toAddHom_injective
 
-/- warning: monoid_with_zero_hom.to_monoid_hom_injective -> MonoidWithZeroHom.toMonoidHom_injective is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulZeroOneClass.{u1} M] [_inst_2 : MulZeroOneClass.{u2} N], Function.Injective.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.{u1, u2} M N (MulZeroOneClass.toMulOneClass.{u1} M _inst_1) (MulZeroOneClass.toMulOneClass.{u2} N _inst_2)) (MonoidWithZeroHom.toMonoidHom.{u1, u2} M N _inst_1 _inst_2)
-but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : MulZeroOneClass.{u2} M] [_inst_2 : MulZeroOneClass.{u1} N], Function.Injective.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.{u2, u1} M N (MulZeroOneClass.toMulOneClass.{u2} M _inst_1) (MulZeroOneClass.toMulOneClass.{u1} N _inst_2)) (MonoidWithZeroHom.toMonoidHom.{u2, u1} M N _inst_1 _inst_2)
-Case conversion may be inaccurate. Consider using '#align monoid_with_zero_hom.to_monoid_hom_injective MonoidWithZeroHom.toMonoidHom_injectiveₓ'. -/
 theorem MonoidWithZeroHom.toMonoidHom_injective [MulZeroOneClass M] [MulZeroOneClass N] :
     Function.Injective (MonoidWithZeroHom.toMonoidHom : (M →*₀ N) → M →* N) := fun f g h =>
   MonoidWithZeroHom.ext <| MonoidHom.ext_iff.mp h
 #align monoid_with_zero_hom.to_monoid_hom_injective MonoidWithZeroHom.toMonoidHom_injective
 
-/- warning: monoid_with_zero_hom.to_zero_hom_injective -> MonoidWithZeroHom.toZeroHom_injective is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulZeroOneClass.{u1} M] [_inst_2 : MulZeroOneClass.{u2} N], Function.Injective.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) (ZeroHom.{u1, u2} M N (MulZeroClass.toHasZero.{u1} M (MulZeroOneClass.toMulZeroClass.{u1} M _inst_1)) (MulZeroClass.toHasZero.{u2} N (MulZeroOneClass.toMulZeroClass.{u2} N _inst_2))) (MonoidWithZeroHom.toZeroHom.{u1, u2} M N _inst_1 _inst_2)
-but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : MulZeroOneClass.{u2} M] [_inst_2 : MulZeroOneClass.{u1} N], Function.Injective.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) (ZeroHom.{u2, u1} M N (MulZeroOneClass.toZero.{u2} M _inst_1) (MulZeroOneClass.toZero.{u1} N _inst_2)) (MonoidWithZeroHom.toZeroHom.{u2, u1} M N _inst_1 _inst_2)
-Case conversion may be inaccurate. Consider using '#align monoid_with_zero_hom.to_zero_hom_injective MonoidWithZeroHom.toZeroHom_injectiveₓ'. -/
 theorem MonoidWithZeroHom.toZeroHom_injective [MulZeroOneClass M] [MulZeroOneClass N] :
     Function.Injective (MonoidWithZeroHom.toZeroHom : (M →*₀ N) → ZeroHom M N) := fun f g h =>
   MonoidWithZeroHom.ext <| ZeroHom.ext_iff.mp h
 #align monoid_with_zero_hom.to_zero_hom_injective MonoidWithZeroHom.toZeroHom_injective
 
-/- warning: one_hom.comp_id -> OneHom.comp_id is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : One.{u1} M] [_inst_2 : One.{u2} N] (f : OneHom.{u1, u2} M N _inst_1 _inst_2), Eq.{max (succ u2) (succ u1)} (OneHom.{u1, u2} M N _inst_1 _inst_2) (OneHom.comp.{u1, u1, u2} M M N _inst_1 _inst_1 _inst_2 f (OneHom.id.{u1} M _inst_1)) f
-but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : One.{u2} M] [_inst_2 : One.{u1} N] (f : OneHom.{u2, u1} M N _inst_1 _inst_2), Eq.{max (succ u2) (succ u1)} (OneHom.{u2, u1} M N _inst_1 _inst_2) (OneHom.comp.{u2, u2, u1} M M N _inst_1 _inst_1 _inst_2 f (OneHom.id.{u2} M _inst_1)) f
-Case conversion may be inaccurate. Consider using '#align one_hom.comp_id OneHom.comp_idₓ'. -/
 @[simp, to_additive]
 theorem OneHom.comp_id [One M] [One N] (f : OneHom M N) : f.comp (OneHom.id M) = f :=
   OneHom.ext fun x => rfl
 #align one_hom.comp_id OneHom.comp_id
 #align zero_hom.comp_id ZeroHom.comp_id
 
-/- warning: mul_hom.comp_id -> MulHom.comp_id is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] (f : MulHom.{u1, u2} M N _inst_1 _inst_2), Eq.{max (succ u2) (succ u1)} (MulHom.{u1, u2} M N _inst_1 _inst_2) (MulHom.comp.{u1, u1, u2} M M N _inst_1 _inst_1 _inst_2 f (MulHom.id.{u1} M _inst_1)) f
-but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : Mul.{u2} M] [_inst_2 : Mul.{u1} N] (f : MulHom.{u2, u1} M N _inst_1 _inst_2), Eq.{max (succ u2) (succ u1)} (MulHom.{u2, u1} M N _inst_1 _inst_2) (MulHom.comp.{u2, u2, u1} M M N _inst_1 _inst_1 _inst_2 f (MulHom.id.{u2} M _inst_1)) f
-Case conversion may be inaccurate. Consider using '#align mul_hom.comp_id MulHom.comp_idₓ'. -/
 @[simp, to_additive]
 theorem MulHom.comp_id [Mul M] [Mul N] (f : M →ₙ* N) : f.comp (MulHom.id M) = f :=
   MulHom.ext fun x => rfl
 #align mul_hom.comp_id MulHom.comp_id
 #align add_hom.comp_id AddHom.comp_id
 
-/- warning: monoid_hom.comp_id -> MonoidHom.comp_id is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N] (f : MonoidHom.{u1, u2} M N _inst_1 _inst_2), Eq.{max (succ u2) (succ u1)} (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.comp.{u1, u1, u2} M M N _inst_1 _inst_1 _inst_2 f (MonoidHom.id.{u1} M _inst_1)) f
-but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u1} N] (f : MonoidHom.{u2, u1} M N _inst_1 _inst_2), Eq.{max (succ u2) (succ u1)} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.comp.{u2, u2, u1} M M N _inst_1 _inst_1 _inst_2 f (MonoidHom.id.{u2} M _inst_1)) f
-Case conversion may be inaccurate. Consider using '#align monoid_hom.comp_id MonoidHom.comp_idₓ'. -/
 @[simp, to_additive]
 theorem MonoidHom.comp_id [MulOneClass M] [MulOneClass N] (f : M →* N) :
     f.comp (MonoidHom.id M) = f :=
@@ -2019,48 +1377,24 @@ theorem MonoidHom.comp_id [MulOneClass M] [MulOneClass N] (f : M →* N) :
 #align monoid_hom.comp_id MonoidHom.comp_id
 #align add_monoid_hom.comp_id AddMonoidHom.comp_id
 
-/- warning: monoid_with_zero_hom.comp_id -> MonoidWithZeroHom.comp_id is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulZeroOneClass.{u1} M] [_inst_2 : MulZeroOneClass.{u2} N] (f : MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2), Eq.{max (succ u2) (succ u1)} (MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) (MonoidWithZeroHom.comp.{u1, u1, u2} M M N _inst_1 _inst_1 _inst_2 f (MonoidWithZeroHom.id.{u1} M _inst_1)) f
-but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : MulZeroOneClass.{u2} M] [_inst_2 : MulZeroOneClass.{u1} N] (f : MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2), Eq.{max (succ u2) (succ u1)} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) (MonoidWithZeroHom.comp.{u2, u2, u1} M M N _inst_1 _inst_1 _inst_2 f (MonoidWithZeroHom.id.{u2} M _inst_1)) f
-Case conversion may be inaccurate. Consider using '#align monoid_with_zero_hom.comp_id MonoidWithZeroHom.comp_idₓ'. -/
 @[simp]
 theorem MonoidWithZeroHom.comp_id [MulZeroOneClass M] [MulZeroOneClass N] (f : M →*₀ N) :
     f.comp (MonoidWithZeroHom.id M) = f :=
   MonoidWithZeroHom.ext fun x => rfl
 #align monoid_with_zero_hom.comp_id MonoidWithZeroHom.comp_id
 
-/- warning: one_hom.id_comp -> OneHom.id_comp is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : One.{u1} M] [_inst_2 : One.{u2} N] (f : OneHom.{u1, u2} M N _inst_1 _inst_2), Eq.{max (succ u2) (succ u1)} (OneHom.{u1, u2} M N _inst_1 _inst_2) (OneHom.comp.{u1, u2, u2} M N N _inst_1 _inst_2 _inst_2 (OneHom.id.{u2} N _inst_2) f) f
-but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : One.{u2} M] [_inst_2 : One.{u1} N] (f : OneHom.{u2, u1} M N _inst_1 _inst_2), Eq.{max (succ u2) (succ u1)} (OneHom.{u2, u1} M N _inst_1 _inst_2) (OneHom.comp.{u2, u1, u1} M N N _inst_1 _inst_2 _inst_2 (OneHom.id.{u1} N _inst_2) f) f
-Case conversion may be inaccurate. Consider using '#align one_hom.id_comp OneHom.id_compₓ'. -/
 @[simp, to_additive]
 theorem OneHom.id_comp [One M] [One N] (f : OneHom M N) : (OneHom.id N).comp f = f :=
   OneHom.ext fun x => rfl
 #align one_hom.id_comp OneHom.id_comp
 #align zero_hom.id_comp ZeroHom.id_comp
 
-/- warning: mul_hom.id_comp -> MulHom.id_comp is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] (f : MulHom.{u1, u2} M N _inst_1 _inst_2), Eq.{max (succ u2) (succ u1)} (MulHom.{u1, u2} M N _inst_1 _inst_2) (MulHom.comp.{u1, u2, u2} M N N _inst_1 _inst_2 _inst_2 (MulHom.id.{u2} N _inst_2) f) f
-but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : Mul.{u2} M] [_inst_2 : Mul.{u1} N] (f : MulHom.{u2, u1} M N _inst_1 _inst_2), Eq.{max (succ u2) (succ u1)} (MulHom.{u2, u1} M N _inst_1 _inst_2) (MulHom.comp.{u2, u1, u1} M N N _inst_1 _inst_2 _inst_2 (MulHom.id.{u1} N _inst_2) f) f
-Case conversion may be inaccurate. Consider using '#align mul_hom.id_comp MulHom.id_compₓ'. -/
 @[simp, to_additive]
 theorem MulHom.id_comp [Mul M] [Mul N] (f : M →ₙ* N) : (MulHom.id N).comp f = f :=
   MulHom.ext fun x => rfl
 #align mul_hom.id_comp MulHom.id_comp
 #align add_hom.id_comp AddHom.id_comp
 
-/- warning: monoid_hom.id_comp -> MonoidHom.id_comp is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N] (f : MonoidHom.{u1, u2} M N _inst_1 _inst_2), Eq.{max (succ u2) (succ u1)} (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.comp.{u1, u2, u2} M N N _inst_1 _inst_2 _inst_2 (MonoidHom.id.{u2} N _inst_2) f) f
-but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u1} N] (f : MonoidHom.{u2, u1} M N _inst_1 _inst_2), Eq.{max (succ u2) (succ u1)} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (MonoidHom.comp.{u2, u1, u1} M N N _inst_1 _inst_2 _inst_2 (MonoidHom.id.{u1} N _inst_2) f) f
-Case conversion may be inaccurate. Consider using '#align monoid_hom.id_comp MonoidHom.id_compₓ'. -/
 @[simp, to_additive]
 theorem MonoidHom.id_comp [MulOneClass M] [MulOneClass N] (f : M →* N) :
     (MonoidHom.id N).comp f = f :=
@@ -2068,24 +1402,12 @@ theorem MonoidHom.id_comp [MulOneClass M] [MulOneClass N] (f : M →* N) :
 #align monoid_hom.id_comp MonoidHom.id_comp
 #align add_monoid_hom.id_comp AddMonoidHom.id_comp
 
-/- warning: monoid_with_zero_hom.id_comp -> MonoidWithZeroHom.id_comp is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulZeroOneClass.{u1} M] [_inst_2 : MulZeroOneClass.{u2} N] (f : MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2), Eq.{max (succ u2) (succ u1)} (MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) (MonoidWithZeroHom.comp.{u1, u2, u2} M N N _inst_1 _inst_2 _inst_2 (MonoidWithZeroHom.id.{u2} N _inst_2) f) f
-but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : MulZeroOneClass.{u2} M] [_inst_2 : MulZeroOneClass.{u1} N] (f : MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2), Eq.{max (succ u2) (succ u1)} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) (MonoidWithZeroHom.comp.{u2, u1, u1} M N N _inst_1 _inst_2 _inst_2 (MonoidWithZeroHom.id.{u1} N _inst_2) f) f
-Case conversion may be inaccurate. Consider using '#align monoid_with_zero_hom.id_comp MonoidWithZeroHom.id_compₓ'. -/
 @[simp]
 theorem MonoidWithZeroHom.id_comp [MulZeroOneClass M] [MulZeroOneClass N] (f : M →*₀ N) :
     (MonoidWithZeroHom.id N).comp f = f :=
   MonoidWithZeroHom.ext fun x => rfl
 #align monoid_with_zero_hom.id_comp MonoidWithZeroHom.id_comp
 
-/- warning: monoid_hom.map_pow -> MonoidHom.map_pow is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Monoid.{u1} M] [_inst_2 : Monoid.{u2} N] (f : MonoidHom.{u1, u2} M N (Monoid.toMulOneClass.{u1} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2)) (a : M) (n : Nat), Eq.{succ u2} N (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} M N (Monoid.toMulOneClass.{u1} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2)) (fun (_x : MonoidHom.{u1, u2} M N (Monoid.toMulOneClass.{u1} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2)) => M -> N) (MonoidHom.hasCoeToFun.{u1, u2} M N (Monoid.toMulOneClass.{u1} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2)) f (HPow.hPow.{u1, 0, u1} M Nat M (instHPow.{u1, 0} M Nat (Monoid.Pow.{u1} M _inst_1)) a n)) (HPow.hPow.{u2, 0, u2} N Nat N (instHPow.{u2, 0} N Nat (Monoid.Pow.{u2} N _inst_2)) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} M N (Monoid.toMulOneClass.{u1} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2)) (fun (_x : MonoidHom.{u1, u2} M N (Monoid.toMulOneClass.{u1} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2)) => M -> N) (MonoidHom.hasCoeToFun.{u1, u2} M N (Monoid.toMulOneClass.{u1} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2)) f a) n)
-but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : Monoid.{u2} M] [_inst_2 : Monoid.{u1} N] (f : MonoidHom.{u2, u1} M N (Monoid.toMulOneClass.{u2} M _inst_1) (Monoid.toMulOneClass.{u1} N _inst_2)) (a : M) (n : Nat), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) (HPow.hPow.{u2, 0, u2} M Nat M (instHPow.{u2, 0} M Nat (Monoid.Pow.{u2} M _inst_1)) a n)) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M N (Monoid.toMulOneClass.{u2} M _inst_1) (Monoid.toMulOneClass.{u1} N _inst_2)) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N (Monoid.toMulOneClass.{u2} M _inst_1) (Monoid.toMulOneClass.{u1} N _inst_2)) M N (MulOneClass.toMul.{u2} M (Monoid.toMulOneClass.{u2} M _inst_1)) (MulOneClass.toMul.{u1} N (Monoid.toMulOneClass.{u1} N _inst_2)) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N (Monoid.toMulOneClass.{u2} M _inst_1) (Monoid.toMulOneClass.{u1} N _inst_2)) M N (Monoid.toMulOneClass.{u2} M _inst_1) (Monoid.toMulOneClass.{u1} N _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N (Monoid.toMulOneClass.{u2} M _inst_1) (Monoid.toMulOneClass.{u1} N _inst_2)))) f (HPow.hPow.{u2, 0, u2} M Nat M (instHPow.{u2, 0} M Nat (Monoid.Pow.{u2} M _inst_1)) a n)) (HPow.hPow.{u1, 0, u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) a) Nat ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) a) (instHPow.{u1, 0} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) a) Nat (Monoid.Pow.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) a) _inst_2)) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M N (Monoid.toMulOneClass.{u2} M _inst_1) (Monoid.toMulOneClass.{u1} N _inst_2)) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N (Monoid.toMulOneClass.{u2} M _inst_1) (Monoid.toMulOneClass.{u1} N _inst_2)) M N (MulOneClass.toMul.{u2} M (Monoid.toMulOneClass.{u2} M _inst_1)) (MulOneClass.toMul.{u1} N (Monoid.toMulOneClass.{u1} N _inst_2)) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N (Monoid.toMulOneClass.{u2} M _inst_1) (Monoid.toMulOneClass.{u1} N _inst_2)) M N (Monoid.toMulOneClass.{u2} M _inst_1) (Monoid.toMulOneClass.{u1} N _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N (Monoid.toMulOneClass.{u2} M _inst_1) (Monoid.toMulOneClass.{u1} N _inst_2)))) f a) n)
-Case conversion may be inaccurate. Consider using '#align monoid_hom.map_pow MonoidHom.map_powₓ'. -/
 @[to_additive AddMonoidHom.map_nsmul]
 protected theorem MonoidHom.map_pow [Monoid M] [Monoid N] (f : M →* N) (a : M) (n : ℕ) :
     f (a ^ n) = f a ^ n :=
@@ -2093,12 +1415,6 @@ protected theorem MonoidHom.map_pow [Monoid M] [Monoid N] (f : M →* N) (a : M)
 #align monoid_hom.map_pow MonoidHom.map_pow
 #align add_monoid_hom.map_nsmul AddMonoidHom.map_nsmul
 
-/- warning: monoid_hom.map_zpow' -> MonoidHom.map_zpow' is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : DivInvMonoid.{u1} M] [_inst_2 : DivInvMonoid.{u2} N] (f : MonoidHom.{u1, u2} M N (Monoid.toMulOneClass.{u1} M (DivInvMonoid.toMonoid.{u1} M _inst_1)) (Monoid.toMulOneClass.{u2} N (DivInvMonoid.toMonoid.{u2} N _inst_2))), (forall (x : M), Eq.{succ u2} N (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} M N (Monoid.toMulOneClass.{u1} M (DivInvMonoid.toMonoid.{u1} M _inst_1)) (Monoid.toMulOneClass.{u2} N (DivInvMonoid.toMonoid.{u2} N _inst_2))) (fun (_x : MonoidHom.{u1, u2} M N (Monoid.toMulOneClass.{u1} M (DivInvMonoid.toMonoid.{u1} M _inst_1)) (Monoid.toMulOneClass.{u2} N (DivInvMonoid.toMonoid.{u2} N _inst_2))) => M -> N) (MonoidHom.hasCoeToFun.{u1, u2} M N (Monoid.toMulOneClass.{u1} M (DivInvMonoid.toMonoid.{u1} M _inst_1)) (Monoid.toMulOneClass.{u2} N (DivInvMonoid.toMonoid.{u2} N _inst_2))) f (Inv.inv.{u1} M (DivInvMonoid.toHasInv.{u1} M _inst_1) x)) (Inv.inv.{u2} N (DivInvMonoid.toHasInv.{u2} N _inst_2) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} M N (Monoid.toMulOneClass.{u1} M (DivInvMonoid.toMonoid.{u1} M _inst_1)) (Monoid.toMulOneClass.{u2} N (DivInvMonoid.toMonoid.{u2} N _inst_2))) (fun (_x : MonoidHom.{u1, u2} M N (Monoid.toMulOneClass.{u1} M (DivInvMonoid.toMonoid.{u1} M _inst_1)) (Monoid.toMulOneClass.{u2} N (DivInvMonoid.toMonoid.{u2} N _inst_2))) => M -> N) (MonoidHom.hasCoeToFun.{u1, u2} M N (Monoid.toMulOneClass.{u1} M (DivInvMonoid.toMonoid.{u1} M _inst_1)) (Monoid.toMulOneClass.{u2} N (DivInvMonoid.toMonoid.{u2} N _inst_2))) f x))) -> (forall (a : M) (n : Int), Eq.{succ u2} N (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} M N (Monoid.toMulOneClass.{u1} M (DivInvMonoid.toMonoid.{u1} M _inst_1)) (Monoid.toMulOneClass.{u2} N (DivInvMonoid.toMonoid.{u2} N _inst_2))) (fun (_x : MonoidHom.{u1, u2} M N (Monoid.toMulOneClass.{u1} M (DivInvMonoid.toMonoid.{u1} M _inst_1)) (Monoid.toMulOneClass.{u2} N (DivInvMonoid.toMonoid.{u2} N _inst_2))) => M -> N) (MonoidHom.hasCoeToFun.{u1, u2} M N (Monoid.toMulOneClass.{u1} M (DivInvMonoid.toMonoid.{u1} M _inst_1)) (Monoid.toMulOneClass.{u2} N (DivInvMonoid.toMonoid.{u2} N _inst_2))) f (HPow.hPow.{u1, 0, u1} M Int M (instHPow.{u1, 0} M Int (DivInvMonoid.Pow.{u1} M _inst_1)) a n)) (HPow.hPow.{u2, 0, u2} N Int N (instHPow.{u2, 0} N Int (DivInvMonoid.Pow.{u2} N _inst_2)) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} M N (Monoid.toMulOneClass.{u1} M (DivInvMonoid.toMonoid.{u1} M _inst_1)) (Monoid.toMulOneClass.{u2} N (DivInvMonoid.toMonoid.{u2} N _inst_2))) (fun (_x : MonoidHom.{u1, u2} M N (Monoid.toMulOneClass.{u1} M (DivInvMonoid.toMonoid.{u1} M _inst_1)) (Monoid.toMulOneClass.{u2} N (DivInvMonoid.toMonoid.{u2} N _inst_2))) => M -> N) (MonoidHom.hasCoeToFun.{u1, u2} M N (Monoid.toMulOneClass.{u1} M (DivInvMonoid.toMonoid.{u1} M _inst_1)) (Monoid.toMulOneClass.{u2} N (DivInvMonoid.toMonoid.{u2} N _inst_2))) f a) n))
-but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : DivInvMonoid.{u2} M] [_inst_2 : DivInvMonoid.{u1} N] (f : MonoidHom.{u2, u1} M N (Monoid.toMulOneClass.{u2} M (DivInvMonoid.toMonoid.{u2} M _inst_1)) (Monoid.toMulOneClass.{u1} N (DivInvMonoid.toMonoid.{u1} N _inst_2))), (forall (x : M), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) (Inv.inv.{u2} M (DivInvMonoid.toInv.{u2} M _inst_1) x)) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M N (Monoid.toMulOneClass.{u2} M (DivInvMonoid.toMonoid.{u2} M _inst_1)) (Monoid.toMulOneClass.{u1} N (DivInvMonoid.toMonoid.{u1} N _inst_2))) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N (Monoid.toMulOneClass.{u2} M (DivInvMonoid.toMonoid.{u2} M _inst_1)) (Monoid.toMulOneClass.{u1} N (DivInvMonoid.toMonoid.{u1} N _inst_2))) M N (MulOneClass.toMul.{u2} M (Monoid.toMulOneClass.{u2} M (DivInvMonoid.toMonoid.{u2} M _inst_1))) (MulOneClass.toMul.{u1} N (Monoid.toMulOneClass.{u1} N (DivInvMonoid.toMonoid.{u1} N _inst_2))) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N (Monoid.toMulOneClass.{u2} M (DivInvMonoid.toMonoid.{u2} M _inst_1)) (Monoid.toMulOneClass.{u1} N (DivInvMonoid.toMonoid.{u1} N _inst_2))) M N (Monoid.toMulOneClass.{u2} M (DivInvMonoid.toMonoid.{u2} M _inst_1)) (Monoid.toMulOneClass.{u1} N (DivInvMonoid.toMonoid.{u1} N _inst_2)) (MonoidHom.monoidHomClass.{u2, u1} M N (Monoid.toMulOneClass.{u2} M (DivInvMonoid.toMonoid.{u2} M _inst_1)) (Monoid.toMulOneClass.{u1} N (DivInvMonoid.toMonoid.{u1} N _inst_2))))) f (Inv.inv.{u2} M (DivInvMonoid.toInv.{u2} M _inst_1) x)) (Inv.inv.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) x) (DivInvMonoid.toInv.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) x) _inst_2) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M N (Monoid.toMulOneClass.{u2} M (DivInvMonoid.toMonoid.{u2} M _inst_1)) (Monoid.toMulOneClass.{u1} N (DivInvMonoid.toMonoid.{u1} N _inst_2))) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N (Monoid.toMulOneClass.{u2} M (DivInvMonoid.toMonoid.{u2} M _inst_1)) (Monoid.toMulOneClass.{u1} N (DivInvMonoid.toMonoid.{u1} N _inst_2))) M N (MulOneClass.toMul.{u2} M (Monoid.toMulOneClass.{u2} M (DivInvMonoid.toMonoid.{u2} M _inst_1))) (MulOneClass.toMul.{u1} N (Monoid.toMulOneClass.{u1} N (DivInvMonoid.toMonoid.{u1} N _inst_2))) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N (Monoid.toMulOneClass.{u2} M (DivInvMonoid.toMonoid.{u2} M _inst_1)) (Monoid.toMulOneClass.{u1} N (DivInvMonoid.toMonoid.{u1} N _inst_2))) M N (Monoid.toMulOneClass.{u2} M (DivInvMonoid.toMonoid.{u2} M _inst_1)) (Monoid.toMulOneClass.{u1} N (DivInvMonoid.toMonoid.{u1} N _inst_2)) (MonoidHom.monoidHomClass.{u2, u1} M N (Monoid.toMulOneClass.{u2} M (DivInvMonoid.toMonoid.{u2} M _inst_1)) (Monoid.toMulOneClass.{u1} N (DivInvMonoid.toMonoid.{u1} N _inst_2))))) f x))) -> (forall (a : M) (n : Int), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) (HPow.hPow.{u2, 0, u2} M Int M (instHPow.{u2, 0} M Int (DivInvMonoid.Pow.{u2} M _inst_1)) a n)) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M N (Monoid.toMulOneClass.{u2} M (DivInvMonoid.toMonoid.{u2} M _inst_1)) (Monoid.toMulOneClass.{u1} N (DivInvMonoid.toMonoid.{u1} N _inst_2))) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N (Monoid.toMulOneClass.{u2} M (DivInvMonoid.toMonoid.{u2} M _inst_1)) (Monoid.toMulOneClass.{u1} N (DivInvMonoid.toMonoid.{u1} N _inst_2))) M N (MulOneClass.toMul.{u2} M (Monoid.toMulOneClass.{u2} M (DivInvMonoid.toMonoid.{u2} M _inst_1))) (MulOneClass.toMul.{u1} N (Monoid.toMulOneClass.{u1} N (DivInvMonoid.toMonoid.{u1} N _inst_2))) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N (Monoid.toMulOneClass.{u2} M (DivInvMonoid.toMonoid.{u2} M _inst_1)) (Monoid.toMulOneClass.{u1} N (DivInvMonoid.toMonoid.{u1} N _inst_2))) M N (Monoid.toMulOneClass.{u2} M (DivInvMonoid.toMonoid.{u2} M _inst_1)) (Monoid.toMulOneClass.{u1} N (DivInvMonoid.toMonoid.{u1} N _inst_2)) (MonoidHom.monoidHomClass.{u2, u1} M N (Monoid.toMulOneClass.{u2} M (DivInvMonoid.toMonoid.{u2} M _inst_1)) (Monoid.toMulOneClass.{u1} N (DivInvMonoid.toMonoid.{u1} N _inst_2))))) f (HPow.hPow.{u2, 0, u2} M Int M (instHPow.{u2, 0} M Int (DivInvMonoid.Pow.{u2} M _inst_1)) a n)) (HPow.hPow.{u1, 0, u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) a) Int ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) a) (instHPow.{u1, 0} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) a) Int (DivInvMonoid.Pow.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) a) _inst_2)) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M N (Monoid.toMulOneClass.{u2} M (DivInvMonoid.toMonoid.{u2} M _inst_1)) (Monoid.toMulOneClass.{u1} N (DivInvMonoid.toMonoid.{u1} N _inst_2))) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N (Monoid.toMulOneClass.{u2} M (DivInvMonoid.toMonoid.{u2} M _inst_1)) (Monoid.toMulOneClass.{u1} N (DivInvMonoid.toMonoid.{u1} N _inst_2))) M N (MulOneClass.toMul.{u2} M (Monoid.toMulOneClass.{u2} M (DivInvMonoid.toMonoid.{u2} M _inst_1))) (MulOneClass.toMul.{u1} N (Monoid.toMulOneClass.{u1} N (DivInvMonoid.toMonoid.{u1} N _inst_2))) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N (Monoid.toMulOneClass.{u2} M (DivInvMonoid.toMonoid.{u2} M _inst_1)) (Monoid.toMulOneClass.{u1} N (DivInvMonoid.toMonoid.{u1} N _inst_2))) M N (Monoid.toMulOneClass.{u2} M (DivInvMonoid.toMonoid.{u2} M _inst_1)) (Monoid.toMulOneClass.{u1} N (DivInvMonoid.toMonoid.{u1} N _inst_2)) (MonoidHom.monoidHomClass.{u2, u1} M N (Monoid.toMulOneClass.{u2} M (DivInvMonoid.toMonoid.{u2} M _inst_1)) (Monoid.toMulOneClass.{u1} N (DivInvMonoid.toMonoid.{u1} N _inst_2))))) f a) n))
-Case conversion may be inaccurate. Consider using '#align monoid_hom.map_zpow' MonoidHom.map_zpow'ₓ'. -/
 @[to_additive]
 protected theorem MonoidHom.map_zpow' [DivInvMonoid M] [DivInvMonoid N] (f : M →* N)
     (hf : ∀ x, f x⁻¹ = (f x)⁻¹) (a : M) (n : ℤ) : f (a ^ n) = f a ^ n :=
@@ -2136,23 +1452,11 @@ instance : MonoidHomClass (Monoid.End M) M M :=
 
 end End
 
-/- warning: monoid.coe_one -> Monoid.coe_one is a dubious translation:
-lean 3 declaration is
-  forall (M : Type.{u1}) [_inst_1 : MulOneClass.{u1} M], Eq.{succ u1} ((fun (_x : Monoid.End.{u1} M _inst_1) => M -> M) (OfNat.ofNat.{u1} (Monoid.End.{u1} M _inst_1) 1 (OfNat.mk.{u1} (Monoid.End.{u1} M _inst_1) 1 (One.one.{u1} (Monoid.End.{u1} M _inst_1) (MulOneClass.toHasOne.{u1} (Monoid.End.{u1} M _inst_1) (Monoid.toMulOneClass.{u1} (Monoid.End.{u1} M _inst_1) (Monoid.End.monoid.{u1} M _inst_1))))))) (coeFn.{succ u1, succ u1} (Monoid.End.{u1} M _inst_1) (fun (_x : Monoid.End.{u1} M _inst_1) => M -> M) (FunLike.hasCoeToFun.{succ u1, succ u1, succ u1} (Monoid.End.{u1} M _inst_1) M (fun (_x : M) => M) (MulHomClass.toFunLike.{u1, u1, u1} (Monoid.End.{u1} M _inst_1) M M (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u1} M _inst_1) (MonoidHomClass.toMulHomClass.{u1, u1, u1} (Monoid.End.{u1} M _inst_1) M M _inst_1 _inst_1 (Monoid.End.monoidHomClass.{u1} M _inst_1)))) (OfNat.ofNat.{u1} (Monoid.End.{u1} M _inst_1) 1 (OfNat.mk.{u1} (Monoid.End.{u1} M _inst_1) 1 (One.one.{u1} (Monoid.End.{u1} M _inst_1) (MulOneClass.toHasOne.{u1} (Monoid.End.{u1} M _inst_1) (Monoid.toMulOneClass.{u1} (Monoid.End.{u1} M _inst_1) (Monoid.End.monoid.{u1} M _inst_1))))))) (id.{succ u1} M)
-but is expected to have type
-  forall (M : Type.{u1}) [_inst_1 : MulOneClass.{u1} M], Eq.{succ u1} (forall (a : M), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => M) a) (FunLike.coe.{succ u1, succ u1, succ u1} (Monoid.End.{u1} M _inst_1) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => M) _x) (MulHomClass.toFunLike.{u1, u1, u1} (Monoid.End.{u1} M _inst_1) M M (MulOneClass.toMul.{u1} M _inst_1) (MulOneClass.toMul.{u1} M _inst_1) (MonoidHomClass.toMulHomClass.{u1, u1, u1} (Monoid.End.{u1} M _inst_1) M M _inst_1 _inst_1 (Monoid.End.instMonoidHomClassEnd.{u1} M _inst_1))) (OfNat.ofNat.{u1} (Monoid.End.{u1} M _inst_1) 1 (One.toOfNat1.{u1} (Monoid.End.{u1} M _inst_1) (Monoid.toOne.{u1} (Monoid.End.{u1} M _inst_1) (Monoid.End.instMonoidEnd.{u1} M _inst_1))))) (id.{succ u1} M)
-Case conversion may be inaccurate. Consider using '#align monoid.coe_one Monoid.coe_oneₓ'. -/
 @[simp]
 theorem coe_one : ((1 : Monoid.End M) : M → M) = id :=
   rfl
 #align monoid.coe_one Monoid.coe_one
 
-/- warning: monoid.coe_mul -> Monoid.coe_mul is a dubious translation:
-lean 3 declaration is
-  forall (M : Type.{u1}) [_inst_1 : MulOneClass.{u1} M] (f : Monoid.End.{u1} M _inst_1) (g : Monoid.End.{u1} M _inst_1), Eq.{succ u1} ((fun (_x : Monoid.End.{u1} M _inst_1) => M -> M) (HMul.hMul.{u1, u1, u1} (Monoid.End.{u1} M _inst_1) (Monoid.End.{u1} M _inst_1) (Monoid.End.{u1} M _inst_1) (instHMul.{u1} (Monoid.End.{u1} M _inst_1) (MulOneClass.toHasMul.{u1} (Monoid.End.{u1} M _inst_1) (Monoid.toMulOneClass.{u1} (Monoid.End.{u1} M _inst_1) (Monoid.End.monoid.{u1} M _inst_1)))) f g)) (coeFn.{succ u1, succ u1} (Monoid.End.{u1} M _inst_1) (fun (_x : Monoid.End.{u1} M _inst_1) => M -> M) (FunLike.hasCoeToFun.{succ u1, succ u1, succ u1} (Monoid.End.{u1} M _inst_1) M (fun (_x : M) => M) (MulHomClass.toFunLike.{u1, u1, u1} (Monoid.End.{u1} M _inst_1) M M (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u1} M _inst_1) (MonoidHomClass.toMulHomClass.{u1, u1, u1} (Monoid.End.{u1} M _inst_1) M M _inst_1 _inst_1 (Monoid.End.monoidHomClass.{u1} M _inst_1)))) (HMul.hMul.{u1, u1, u1} (Monoid.End.{u1} M _inst_1) (Monoid.End.{u1} M _inst_1) (Monoid.End.{u1} M _inst_1) (instHMul.{u1} (Monoid.End.{u1} M _inst_1) (MulOneClass.toHasMul.{u1} (Monoid.End.{u1} M _inst_1) (Monoid.toMulOneClass.{u1} (Monoid.End.{u1} M _inst_1) (Monoid.End.monoid.{u1} M _inst_1)))) f g)) (Function.comp.{succ u1, succ u1, succ u1} M M M (coeFn.{succ u1, succ u1} (Monoid.End.{u1} M _inst_1) (fun (_x : Monoid.End.{u1} M _inst_1) => M -> M) (FunLike.hasCoeToFun.{succ u1, succ u1, succ u1} (Monoid.End.{u1} M _inst_1) M (fun (_x : M) => M) (MulHomClass.toFunLike.{u1, u1, u1} (Monoid.End.{u1} M _inst_1) M M (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u1} M _inst_1) (MonoidHomClass.toMulHomClass.{u1, u1, u1} (Monoid.End.{u1} M _inst_1) M M _inst_1 _inst_1 (Monoid.End.monoidHomClass.{u1} M _inst_1)))) f) (coeFn.{succ u1, succ u1} (Monoid.End.{u1} M _inst_1) (fun (_x : Monoid.End.{u1} M _inst_1) => M -> M) (FunLike.hasCoeToFun.{succ u1, succ u1, succ u1} (Monoid.End.{u1} M _inst_1) M (fun (_x : M) => M) (MulHomClass.toFunLike.{u1, u1, u1} (Monoid.End.{u1} M _inst_1) M M (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u1} M _inst_1) (MonoidHomClass.toMulHomClass.{u1, u1, u1} (Monoid.End.{u1} M _inst_1) M M _inst_1 _inst_1 (Monoid.End.monoidHomClass.{u1} M _inst_1)))) g))
-but is expected to have type
-  forall (M : Type.{u1}) [_inst_1 : MulOneClass.{u1} M] (f : Monoid.End.{u1} M _inst_1) (g : Monoid.End.{u1} M _inst_1), Eq.{succ u1} (forall (a : M), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => M) a) (FunLike.coe.{succ u1, succ u1, succ u1} (Monoid.End.{u1} M _inst_1) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => M) _x) (MulHomClass.toFunLike.{u1, u1, u1} (Monoid.End.{u1} M _inst_1) M M (MulOneClass.toMul.{u1} M _inst_1) (MulOneClass.toMul.{u1} M _inst_1) (MonoidHomClass.toMulHomClass.{u1, u1, u1} (Monoid.End.{u1} M _inst_1) M M _inst_1 _inst_1 (Monoid.End.instMonoidHomClassEnd.{u1} M _inst_1))) (HMul.hMul.{u1, u1, u1} (Monoid.End.{u1} M _inst_1) (Monoid.End.{u1} M _inst_1) (Monoid.End.{u1} M _inst_1) (instHMul.{u1} (Monoid.End.{u1} M _inst_1) (MulOneClass.toMul.{u1} (Monoid.End.{u1} M _inst_1) (Monoid.toMulOneClass.{u1} (Monoid.End.{u1} M _inst_1) (Monoid.End.instMonoidEnd.{u1} M _inst_1)))) f g)) (Function.comp.{succ u1, succ u1, succ u1} M M M (FunLike.coe.{succ u1, succ u1, succ u1} (Monoid.End.{u1} M _inst_1) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => M) _x) (MulHomClass.toFunLike.{u1, u1, u1} (Monoid.End.{u1} M _inst_1) M M (MulOneClass.toMul.{u1} M _inst_1) (MulOneClass.toMul.{u1} M _inst_1) (MonoidHomClass.toMulHomClass.{u1, u1, u1} (Monoid.End.{u1} M _inst_1) M M _inst_1 _inst_1 (Monoid.End.instMonoidHomClassEnd.{u1} M _inst_1))) f) (FunLike.coe.{succ u1, succ u1, succ u1} (Monoid.End.{u1} M _inst_1) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => M) _x) (MulHomClass.toFunLike.{u1, u1, u1} (Monoid.End.{u1} M _inst_1) M M (MulOneClass.toMul.{u1} M _inst_1) (MulOneClass.toMul.{u1} M _inst_1) (MonoidHomClass.toMulHomClass.{u1, u1, u1} (Monoid.End.{u1} M _inst_1) M M _inst_1 _inst_1 (Monoid.End.instMonoidHomClassEnd.{u1} M _inst_1))) g))
-Case conversion may be inaccurate. Consider using '#align monoid.coe_mul Monoid.coe_mulₓ'. -/
 @[simp]
 theorem coe_mul (f g) : ((f * g : Monoid.End M) : M → M) = f ∘ g :=
   rfl
@@ -2189,23 +1493,11 @@ instance : AddMonoidHomClass (AddMonoid.End A) A A :=
 
 end End
 
-/- warning: add_monoid.coe_one -> AddMonoid.coe_one is a dubious translation:
-lean 3 declaration is
-  forall (A : Type.{u1}) [_inst_1 : AddZeroClass.{u1} A], Eq.{succ u1} ((fun (_x : AddMonoid.End.{u1} A _inst_1) => A -> A) (OfNat.ofNat.{u1} (AddMonoid.End.{u1} A _inst_1) 1 (OfNat.mk.{u1} (AddMonoid.End.{u1} A _inst_1) 1 (One.one.{u1} (AddMonoid.End.{u1} A _inst_1) (MulOneClass.toHasOne.{u1} (AddMonoid.End.{u1} A _inst_1) (Monoid.toMulOneClass.{u1} (AddMonoid.End.{u1} A _inst_1) (AddMonoid.End.monoid.{u1} A _inst_1))))))) (coeFn.{succ u1, succ u1} (AddMonoid.End.{u1} A _inst_1) (fun (_x : AddMonoid.End.{u1} A _inst_1) => A -> A) (FunLike.hasCoeToFun.{succ u1, succ u1, succ u1} (AddMonoid.End.{u1} A _inst_1) A (fun (_x : A) => A) (AddHomClass.toFunLike.{u1, u1, u1} (AddMonoid.End.{u1} A _inst_1) A A (AddZeroClass.toHasAdd.{u1} A _inst_1) (AddZeroClass.toHasAdd.{u1} A _inst_1) (AddMonoidHomClass.toAddHomClass.{u1, u1, u1} (AddMonoid.End.{u1} A _inst_1) A A _inst_1 _inst_1 (AddMonoid.End.addMonoidHomClass.{u1} A _inst_1)))) (OfNat.ofNat.{u1} (AddMonoid.End.{u1} A _inst_1) 1 (OfNat.mk.{u1} (AddMonoid.End.{u1} A _inst_1) 1 (One.one.{u1} (AddMonoid.End.{u1} A _inst_1) (MulOneClass.toHasOne.{u1} (AddMonoid.End.{u1} A _inst_1) (Monoid.toMulOneClass.{u1} (AddMonoid.End.{u1} A _inst_1) (AddMonoid.End.monoid.{u1} A _inst_1))))))) (id.{succ u1} A)
-but is expected to have type
-  forall (A : Type.{u1}) [_inst_1 : AddZeroClass.{u1} A], Eq.{succ u1} (forall (a : A), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.403 : A) => A) a) (FunLike.coe.{succ u1, succ u1, succ u1} (AddMonoid.End.{u1} A _inst_1) A (fun (_x : A) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.403 : A) => A) _x) (AddHomClass.toFunLike.{u1, u1, u1} (AddMonoid.End.{u1} A _inst_1) A A (AddZeroClass.toAdd.{u1} A _inst_1) (AddZeroClass.toAdd.{u1} A _inst_1) (AddMonoidHomClass.toAddHomClass.{u1, u1, u1} (AddMonoid.End.{u1} A _inst_1) A A _inst_1 _inst_1 (AddMonoid.End.instAddMonoidHomClassEnd.{u1} A _inst_1))) (OfNat.ofNat.{u1} (AddMonoid.End.{u1} A _inst_1) 1 (One.toOfNat1.{u1} (AddMonoid.End.{u1} A _inst_1) (Monoid.toOne.{u1} (AddMonoid.End.{u1} A _inst_1) (AddMonoid.End.monoid.{u1} A _inst_1))))) (id.{succ u1} A)
-Case conversion may be inaccurate. Consider using '#align add_monoid.coe_one AddMonoid.coe_oneₓ'. -/
 @[simp]
 theorem coe_one : ((1 : AddMonoid.End A) : A → A) = id :=
   rfl
 #align add_monoid.coe_one AddMonoid.coe_one
 
-/- warning: add_monoid.coe_mul -> AddMonoid.coe_mul is a dubious translation:
-lean 3 declaration is
-  forall (A : Type.{u1}) [_inst_1 : AddZeroClass.{u1} A] (f : AddMonoid.End.{u1} A _inst_1) (g : AddMonoid.End.{u1} A _inst_1), Eq.{succ u1} ((fun (_x : AddMonoid.End.{u1} A _inst_1) => A -> A) (HMul.hMul.{u1, u1, u1} (AddMonoid.End.{u1} A _inst_1) (AddMonoid.End.{u1} A _inst_1) (AddMonoid.End.{u1} A _inst_1) (instHMul.{u1} (AddMonoid.End.{u1} A _inst_1) (MulOneClass.toHasMul.{u1} (AddMonoid.End.{u1} A _inst_1) (Monoid.toMulOneClass.{u1} (AddMonoid.End.{u1} A _inst_1) (AddMonoid.End.monoid.{u1} A _inst_1)))) f g)) (coeFn.{succ u1, succ u1} (AddMonoid.End.{u1} A _inst_1) (fun (_x : AddMonoid.End.{u1} A _inst_1) => A -> A) (FunLike.hasCoeToFun.{succ u1, succ u1, succ u1} (AddMonoid.End.{u1} A _inst_1) A (fun (_x : A) => A) (AddHomClass.toFunLike.{u1, u1, u1} (AddMonoid.End.{u1} A _inst_1) A A (AddZeroClass.toHasAdd.{u1} A _inst_1) (AddZeroClass.toHasAdd.{u1} A _inst_1) (AddMonoidHomClass.toAddHomClass.{u1, u1, u1} (AddMonoid.End.{u1} A _inst_1) A A _inst_1 _inst_1 (AddMonoid.End.addMonoidHomClass.{u1} A _inst_1)))) (HMul.hMul.{u1, u1, u1} (AddMonoid.End.{u1} A _inst_1) (AddMonoid.End.{u1} A _inst_1) (AddMonoid.End.{u1} A _inst_1) (instHMul.{u1} (AddMonoid.End.{u1} A _inst_1) (MulOneClass.toHasMul.{u1} (AddMonoid.End.{u1} A _inst_1) (Monoid.toMulOneClass.{u1} (AddMonoid.End.{u1} A _inst_1) (AddMonoid.End.monoid.{u1} A _inst_1)))) f g)) (Function.comp.{succ u1, succ u1, succ u1} A A A (coeFn.{succ u1, succ u1} (AddMonoid.End.{u1} A _inst_1) (fun (_x : AddMonoid.End.{u1} A _inst_1) => A -> A) (FunLike.hasCoeToFun.{succ u1, succ u1, succ u1} (AddMonoid.End.{u1} A _inst_1) A (fun (_x : A) => A) (AddHomClass.toFunLike.{u1, u1, u1} (AddMonoid.End.{u1} A _inst_1) A A (AddZeroClass.toHasAdd.{u1} A _inst_1) (AddZeroClass.toHasAdd.{u1} A _inst_1) (AddMonoidHomClass.toAddHomClass.{u1, u1, u1} (AddMonoid.End.{u1} A _inst_1) A A _inst_1 _inst_1 (AddMonoid.End.addMonoidHomClass.{u1} A _inst_1)))) f) (coeFn.{succ u1, succ u1} (AddMonoid.End.{u1} A _inst_1) (fun (_x : AddMonoid.End.{u1} A _inst_1) => A -> A) (FunLike.hasCoeToFun.{succ u1, succ u1, succ u1} (AddMonoid.End.{u1} A _inst_1) A (fun (_x : A) => A) (AddHomClass.toFunLike.{u1, u1, u1} (AddMonoid.End.{u1} A _inst_1) A A (AddZeroClass.toHasAdd.{u1} A _inst_1) (AddZeroClass.toHasAdd.{u1} A _inst_1) (AddMonoidHomClass.toAddHomClass.{u1, u1, u1} (AddMonoid.End.{u1} A _inst_1) A A _inst_1 _inst_1 (AddMonoid.End.addMonoidHomClass.{u1} A _inst_1)))) g))
-but is expected to have type
-  forall (A : Type.{u1}) [_inst_1 : AddZeroClass.{u1} A] (f : AddMonoid.End.{u1} A _inst_1) (g : AddMonoid.End.{u1} A _inst_1), Eq.{succ u1} (forall (a : A), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.403 : A) => A) a) (FunLike.coe.{succ u1, succ u1, succ u1} (AddMonoid.End.{u1} A _inst_1) A (fun (_x : A) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.403 : A) => A) _x) (AddHomClass.toFunLike.{u1, u1, u1} (AddMonoid.End.{u1} A _inst_1) A A (AddZeroClass.toAdd.{u1} A _inst_1) (AddZeroClass.toAdd.{u1} A _inst_1) (AddMonoidHomClass.toAddHomClass.{u1, u1, u1} (AddMonoid.End.{u1} A _inst_1) A A _inst_1 _inst_1 (AddMonoid.End.instAddMonoidHomClassEnd.{u1} A _inst_1))) (HMul.hMul.{u1, u1, u1} (AddMonoid.End.{u1} A _inst_1) (AddMonoid.End.{u1} A _inst_1) (AddMonoid.End.{u1} A _inst_1) (instHMul.{u1} (AddMonoid.End.{u1} A _inst_1) (MulOneClass.toMul.{u1} (AddMonoid.End.{u1} A _inst_1) (Monoid.toMulOneClass.{u1} (AddMonoid.End.{u1} A _inst_1) (AddMonoid.End.monoid.{u1} A _inst_1)))) f g)) (Function.comp.{succ u1, succ u1, succ u1} A A A (FunLike.coe.{succ u1, succ u1, succ u1} (AddMonoid.End.{u1} A _inst_1) A (fun (_x : A) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.403 : A) => A) _x) (AddHomClass.toFunLike.{u1, u1, u1} (AddMonoid.End.{u1} A _inst_1) A A (AddZeroClass.toAdd.{u1} A _inst_1) (AddZeroClass.toAdd.{u1} A _inst_1) (AddMonoidHomClass.toAddHomClass.{u1, u1, u1} (AddMonoid.End.{u1} A _inst_1) A A _inst_1 _inst_1 (AddMonoid.End.instAddMonoidHomClassEnd.{u1} A _inst_1))) f) (FunLike.coe.{succ u1, succ u1, succ u1} (AddMonoid.End.{u1} A _inst_1) A (fun (_x : A) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.403 : A) => A) _x) (AddHomClass.toFunLike.{u1, u1, u1} (AddMonoid.End.{u1} A _inst_1) A A (AddZeroClass.toAdd.{u1} A _inst_1) (AddZeroClass.toAdd.{u1} A _inst_1) (AddMonoidHomClass.toAddHomClass.{u1, u1, u1} (AddMonoid.End.{u1} A _inst_1) A A _inst_1 _inst_1 (AddMonoid.End.instAddMonoidHomClassEnd.{u1} A _inst_1))) g))
-Case conversion may be inaccurate. Consider using '#align add_monoid.coe_mul AddMonoid.coe_mulₓ'. -/
 @[simp]
 theorem coe_mul (f g) : ((f * g : AddMonoid.End A) : A → A) = f ∘ g :=
   rfl
@@ -2239,48 +1531,24 @@ add_decl_doc AddHom.hasZero
 /-- `0` is the additive monoid homomorphism sending all elements to `0`. -/
 add_decl_doc AddMonoidHom.hasZero
 
-/- warning: one_hom.one_apply -> OneHom.one_apply is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : One.{u1} M] [_inst_2 : One.{u2} N] (x : M), Eq.{succ u2} N (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (OneHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : OneHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (OneHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) (OfNat.ofNat.{max u2 u1} (OneHom.{u1, u2} M N _inst_1 _inst_2) 1 (OfNat.mk.{max u2 u1} (OneHom.{u1, u2} M N _inst_1 _inst_2) 1 (One.one.{max u2 u1} (OneHom.{u1, u2} M N _inst_1 _inst_2) (OneHom.hasOne.{u1, u2} M N _inst_1 _inst_2)))) x) (OfNat.ofNat.{u2} N 1 (OfNat.mk.{u2} N 1 (One.one.{u2} N _inst_2)))
-but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : One.{u2} M] [_inst_2 : One.{u1} N] (x : M), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1264 : M) => N) x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (OneHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1264 : M) => N) _x) (OneHomClass.toFunLike.{max u2 u1, u2, u1} (OneHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (OneHom.oneHomClass.{u2, u1} M N _inst_1 _inst_2)) (OfNat.ofNat.{max u2 u1} (OneHom.{u2, u1} M N _inst_1 _inst_2) 1 (One.toOfNat1.{max u2 u1} (OneHom.{u2, u1} M N _inst_1 _inst_2) (instOneOneHom.{u2, u1} M N _inst_1 _inst_2))) x) (OfNat.ofNat.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1264 : M) => N) x) 1 (One.toOfNat1.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1264 : M) => N) x) _inst_2))
-Case conversion may be inaccurate. Consider using '#align one_hom.one_apply OneHom.one_applyₓ'. -/
 @[simp, to_additive]
 theorem OneHom.one_apply [One M] [One N] (x : M) : (1 : OneHom M N) x = 1 :=
   rfl
 #align one_hom.one_apply OneHom.one_apply
 #align zero_hom.zero_apply ZeroHom.zero_apply
 
-/- warning: monoid_hom.one_apply -> MonoidHom.one_apply is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N] (x : M), Eq.{succ u2} N (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MonoidHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MonoidHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) (OfNat.ofNat.{max u2 u1} (MonoidHom.{u1, u2} M N _inst_1 _inst_2) 1 (OfNat.mk.{max u2 u1} (MonoidHom.{u1, u2} M N _inst_1 _inst_2) 1 (One.one.{max u2 u1} (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.hasOne.{u1, u2} M N _inst_1 _inst_2)))) x) (OfNat.ofNat.{u2} N 1 (OfNat.mk.{u2} N 1 (One.one.{u2} N (MulOneClass.toHasOne.{u2} N _inst_2))))
-but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u1} N] (x : M), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2))) (OfNat.ofNat.{max u2 u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) 1 (One.toOfNat1.{max u2 u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (instOneMonoidHom.{u2, u1} M N _inst_1 _inst_2))) x) (OfNat.ofNat.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) x) 1 (One.toOfNat1.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) x) (MulOneClass.toOne.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) x) _inst_2)))
-Case conversion may be inaccurate. Consider using '#align monoid_hom.one_apply MonoidHom.one_applyₓ'. -/
 @[simp, to_additive]
 theorem MonoidHom.one_apply [MulOneClass M] [MulOneClass N] (x : M) : (1 : M →* N) x = 1 :=
   rfl
 #align monoid_hom.one_apply MonoidHom.one_apply
 #align add_monoid_hom.zero_apply AddMonoidHom.zero_apply
 
-/- warning: one_hom.one_comp -> OneHom.one_comp is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} {N : Type.{u2}} {P : Type.{u3}} [_inst_1 : One.{u1} M] [_inst_2 : One.{u2} N] [_inst_3 : One.{u3} P] (f : OneHom.{u1, u2} M N _inst_1 _inst_2), Eq.{max (succ u3) (succ u1)} (OneHom.{u1, u3} M P _inst_1 _inst_3) (OneHom.comp.{u1, u2, u3} M N P _inst_1 _inst_2 _inst_3 (OfNat.ofNat.{max u3 u2} (OneHom.{u2, u3} N P _inst_2 _inst_3) 1 (OfNat.mk.{max u3 u2} (OneHom.{u2, u3} N P _inst_2 _inst_3) 1 (One.one.{max u3 u2} (OneHom.{u2, u3} N P _inst_2 _inst_3) (OneHom.hasOne.{u2, u3} N P _inst_2 _inst_3)))) f) (OfNat.ofNat.{max u3 u1} (OneHom.{u1, u3} M P _inst_1 _inst_3) 1 (OfNat.mk.{max u3 u1} (OneHom.{u1, u3} M P _inst_1 _inst_3) 1 (One.one.{max u3 u1} (OneHom.{u1, u3} M P _inst_1 _inst_3) (OneHom.hasOne.{u1, u3} M P _inst_1 _inst_3))))
-but is expected to have type
-  forall {M : Type.{u3}} {N : Type.{u2}} {P : Type.{u1}} [_inst_1 : One.{u3} M] [_inst_2 : One.{u2} N] [_inst_3 : One.{u1} P] (f : OneHom.{u3, u2} M N _inst_1 _inst_2), Eq.{max (succ u3) (succ u1)} (OneHom.{u3, u1} M P _inst_1 _inst_3) (OneHom.comp.{u3, u2, u1} M N P _inst_1 _inst_2 _inst_3 (OfNat.ofNat.{max u2 u1} (OneHom.{u2, u1} N P _inst_2 _inst_3) 1 (One.toOfNat1.{max u2 u1} (OneHom.{u2, u1} N P _inst_2 _inst_3) (instOneOneHom.{u2, u1} N P _inst_2 _inst_3))) f) (OfNat.ofNat.{max u3 u1} (OneHom.{u3, u1} M P _inst_1 _inst_3) 1 (One.toOfNat1.{max u3 u1} (OneHom.{u3, u1} M P _inst_1 _inst_3) (instOneOneHom.{u3, u1} M P _inst_1 _inst_3)))
-Case conversion may be inaccurate. Consider using '#align one_hom.one_comp OneHom.one_compₓ'. -/
 @[simp, to_additive]
 theorem OneHom.one_comp [One M] [One N] [One P] (f : OneHom M N) : (1 : OneHom N P).comp f = 1 :=
   rfl
 #align one_hom.one_comp OneHom.one_comp
 #align zero_hom.zero_comp ZeroHom.zero_comp
 
-/- warning: one_hom.comp_one -> OneHom.comp_one is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} {N : Type.{u2}} {P : Type.{u3}} [_inst_1 : One.{u1} M] [_inst_2 : One.{u2} N] [_inst_3 : One.{u3} P] (f : OneHom.{u2, u3} N P _inst_2 _inst_3), Eq.{max (succ u3) (succ u1)} (OneHom.{u1, u3} M P _inst_1 _inst_3) (OneHom.comp.{u1, u2, u3} M N P _inst_1 _inst_2 _inst_3 f (OfNat.ofNat.{max u2 u1} (OneHom.{u1, u2} M N _inst_1 _inst_2) 1 (OfNat.mk.{max u2 u1} (OneHom.{u1, u2} M N _inst_1 _inst_2) 1 (One.one.{max u2 u1} (OneHom.{u1, u2} M N _inst_1 _inst_2) (OneHom.hasOne.{u1, u2} M N _inst_1 _inst_2))))) (OfNat.ofNat.{max u3 u1} (OneHom.{u1, u3} M P _inst_1 _inst_3) 1 (OfNat.mk.{max u3 u1} (OneHom.{u1, u3} M P _inst_1 _inst_3) 1 (One.one.{max u3 u1} (OneHom.{u1, u3} M P _inst_1 _inst_3) (OneHom.hasOne.{u1, u3} M P _inst_1 _inst_3))))
-but is expected to have type
-  forall {M : Type.{u3}} {N : Type.{u2}} {P : Type.{u1}} [_inst_1 : One.{u3} M] [_inst_2 : One.{u2} N] [_inst_3 : One.{u1} P] (f : OneHom.{u2, u1} N P _inst_2 _inst_3), Eq.{max (succ u3) (succ u1)} (OneHom.{u3, u1} M P _inst_1 _inst_3) (OneHom.comp.{u3, u2, u1} M N P _inst_1 _inst_2 _inst_3 f (OfNat.ofNat.{max u3 u2} (OneHom.{u3, u2} M N _inst_1 _inst_2) 1 (One.toOfNat1.{max u3 u2} (OneHom.{u3, u2} M N _inst_1 _inst_2) (instOneOneHom.{u3, u2} M N _inst_1 _inst_2)))) (OfNat.ofNat.{max u3 u1} (OneHom.{u3, u1} M P _inst_1 _inst_3) 1 (One.toOfNat1.{max u3 u1} (OneHom.{u3, u1} M P _inst_1 _inst_3) (instOneOneHom.{u3, u1} M P _inst_1 _inst_3)))
-Case conversion may be inaccurate. Consider using '#align one_hom.comp_one OneHom.comp_oneₓ'. -/
 @[simp, to_additive]
 theorem OneHom.comp_one [One M] [One N] [One P] (f : OneHom N P) : f.comp (1 : OneHom M N) = 1 := by
   ext; simp only [OneHom.map_one, OneHom.coe_comp, Function.comp_apply, OneHom.one_apply]
@@ -2319,12 +1587,6 @@ instance [Mul M] [CommSemigroup N] : Mul (M →ₙ* N) :=
 additive morphism sending `x` to `f x + g x`. -/
 add_decl_doc AddHom.hasAdd
 
-/- warning: mul_hom.mul_apply -> MulHom.mul_apply is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} {N : Type.{u2}} {mM : Mul.{u1} M} {mN : CommSemigroup.{u2} N} (f : MulHom.{u1, u2} M N mM (Semigroup.toHasMul.{u2} N (CommSemigroup.toSemigroup.{u2} N mN))) (g : MulHom.{u1, u2} M N mM (Semigroup.toHasMul.{u2} N (CommSemigroup.toSemigroup.{u2} N mN))) (x : M), Eq.{succ u2} N (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MulHom.{u1, u2} M N mM (Semigroup.toHasMul.{u2} N (CommSemigroup.toSemigroup.{u2} N mN))) (fun (_x : MulHom.{u1, u2} M N mM (Semigroup.toHasMul.{u2} N (CommSemigroup.toSemigroup.{u2} N mN))) => M -> N) (MulHom.hasCoeToFun.{u1, u2} M N mM (Semigroup.toHasMul.{u2} N (CommSemigroup.toSemigroup.{u2} N mN))) (HMul.hMul.{max u2 u1, max u2 u1, max u2 u1} (MulHom.{u1, u2} M N mM (Semigroup.toHasMul.{u2} N (CommSemigroup.toSemigroup.{u2} N mN))) (MulHom.{u1, u2} M N mM (Semigroup.toHasMul.{u2} N (CommSemigroup.toSemigroup.{u2} N mN))) (MulHom.{u1, u2} M N mM (Semigroup.toHasMul.{u2} N (CommSemigroup.toSemigroup.{u2} N mN))) (instHMul.{max u2 u1} (MulHom.{u1, u2} M N mM (Semigroup.toHasMul.{u2} N (CommSemigroup.toSemigroup.{u2} N mN))) (MulHom.hasMul.{u1, u2} M N mM mN)) f g) x) (HMul.hMul.{u2, u2, u2} N N N (instHMul.{u2} N (Semigroup.toHasMul.{u2} N (CommSemigroup.toSemigroup.{u2} N mN))) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MulHom.{u1, u2} M N mM (Semigroup.toHasMul.{u2} N (CommSemigroup.toSemigroup.{u2} N mN))) (fun (_x : MulHom.{u1, u2} M N mM (Semigroup.toHasMul.{u2} N (CommSemigroup.toSemigroup.{u2} N mN))) => M -> N) (MulHom.hasCoeToFun.{u1, u2} M N mM (Semigroup.toHasMul.{u2} N (CommSemigroup.toSemigroup.{u2} N mN))) f x) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MulHom.{u1, u2} M N mM (Semigroup.toHasMul.{u2} N (CommSemigroup.toSemigroup.{u2} N mN))) (fun (_x : MulHom.{u1, u2} M N mM (Semigroup.toHasMul.{u2} N (CommSemigroup.toSemigroup.{u2} N mN))) => M -> N) (MulHom.hasCoeToFun.{u1, u2} M N mM (Semigroup.toHasMul.{u2} N (CommSemigroup.toSemigroup.{u2} N mN))) g x))
-but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [mM : Mul.{u2} M] [mN : CommSemigroup.{u1} N] (f : MulHom.{u2, u1} M N mM (Semigroup.toMul.{u1} N (CommSemigroup.toSemigroup.{u1} N mN))) (g : MulHom.{u2, u1} M N mM (Semigroup.toMul.{u1} N (CommSemigroup.toSemigroup.{u1} N mN))) (x : M), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N mM (Semigroup.toMul.{u1} N (CommSemigroup.toSemigroup.{u1} N mN))) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N mM (Semigroup.toMul.{u1} N (CommSemigroup.toSemigroup.{u1} N mN))) M N mM (Semigroup.toMul.{u1} N (CommSemigroup.toSemigroup.{u1} N mN)) (MulHom.mulHomClass.{u2, u1} M N mM (Semigroup.toMul.{u1} N (CommSemigroup.toSemigroup.{u1} N mN)))) (HMul.hMul.{max u2 u1, max u2 u1, max u2 u1} (MulHom.{u2, u1} M N mM (Semigroup.toMul.{u1} N (CommSemigroup.toSemigroup.{u1} N mN))) (MulHom.{u2, u1} M N mM (Semigroup.toMul.{u1} N (CommSemigroup.toSemigroup.{u1} N mN))) (MulHom.{u2, u1} M N mM (Semigroup.toMul.{u1} N (CommSemigroup.toSemigroup.{u1} N mN))) (instHMul.{max u2 u1} (MulHom.{u2, u1} M N mM (Semigroup.toMul.{u1} N (CommSemigroup.toSemigroup.{u1} N mN))) (MulHom.instMulMulHomToMulToSemigroup.{u2, u1} M N mM mN)) f g) x) (HMul.hMul.{u1, u1, u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) x) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) x) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) x) (instHMul.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) x) (Semigroup.toMul.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) x) (CommSemigroup.toSemigroup.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) x) mN))) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N mM (Semigroup.toMul.{u1} N (CommSemigroup.toSemigroup.{u1} N mN))) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N mM (Semigroup.toMul.{u1} N (CommSemigroup.toSemigroup.{u1} N mN))) M N mM (Semigroup.toMul.{u1} N (CommSemigroup.toSemigroup.{u1} N mN)) (MulHom.mulHomClass.{u2, u1} M N mM (Semigroup.toMul.{u1} N (CommSemigroup.toSemigroup.{u1} N mN)))) f x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N mM (Semigroup.toMul.{u1} N (CommSemigroup.toSemigroup.{u1} N mN))) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N mM (Semigroup.toMul.{u1} N (CommSemigroup.toSemigroup.{u1} N mN))) M N mM (Semigroup.toMul.{u1} N (CommSemigroup.toSemigroup.{u1} N mN)) (MulHom.mulHomClass.{u2, u1} M N mM (Semigroup.toMul.{u1} N (CommSemigroup.toSemigroup.{u1} N mN)))) g x))
-Case conversion may be inaccurate. Consider using '#align mul_hom.mul_apply MulHom.mul_applyₓ'. -/
 @[simp, to_additive]
 theorem mul_apply {M N} {mM : Mul M} {mN : CommSemigroup N} (f g : M →ₙ* N) (x : M) :
     (f * g) x = f x * g x :=
@@ -2332,12 +1594,6 @@ theorem mul_apply {M N} {mM : Mul M} {mN : CommSemigroup N} (f g : M →ₙ* N)
 #align mul_hom.mul_apply MulHom.mul_apply
 #align add_hom.add_apply AddHom.add_apply
 
-/- warning: mul_hom.mul_comp -> MulHom.mul_comp is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} {N : Type.{u2}} {P : Type.{u3}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] [_inst_3 : CommSemigroup.{u3} P] (g₁ : MulHom.{u2, u3} N P _inst_2 (Semigroup.toHasMul.{u3} P (CommSemigroup.toSemigroup.{u3} P _inst_3))) (g₂ : MulHom.{u2, u3} N P _inst_2 (Semigroup.toHasMul.{u3} P (CommSemigroup.toSemigroup.{u3} P _inst_3))) (f : MulHom.{u1, u2} M N _inst_1 _inst_2), Eq.{max (succ u3) (succ u1)} (MulHom.{u1, u3} M P _inst_1 (Semigroup.toHasMul.{u3} P (CommSemigroup.toSemigroup.{u3} P _inst_3))) (MulHom.comp.{u1, u2, u3} M N P _inst_1 _inst_2 (Semigroup.toHasMul.{u3} P (CommSemigroup.toSemigroup.{u3} P _inst_3)) (HMul.hMul.{max u3 u2, max u3 u2, max u3 u2} (MulHom.{u2, u3} N P _inst_2 (Semigroup.toHasMul.{u3} P (CommSemigroup.toSemigroup.{u3} P _inst_3))) (MulHom.{u2, u3} N P _inst_2 (Semigroup.toHasMul.{u3} P (CommSemigroup.toSemigroup.{u3} P _inst_3))) (MulHom.{u2, u3} N P _inst_2 (Semigroup.toHasMul.{u3} P (CommSemigroup.toSemigroup.{u3} P _inst_3))) (instHMul.{max u3 u2} (MulHom.{u2, u3} N P _inst_2 (Semigroup.toHasMul.{u3} P (CommSemigroup.toSemigroup.{u3} P _inst_3))) (MulHom.hasMul.{u2, u3} N P _inst_2 _inst_3)) g₁ g₂) f) (HMul.hMul.{max u3 u1, max u3 u1, max u3 u1} (MulHom.{u1, u3} M P _inst_1 (Semigroup.toHasMul.{u3} P (CommSemigroup.toSemigroup.{u3} P _inst_3))) (MulHom.{u1, u3} M P _inst_1 (Semigroup.toHasMul.{u3} P (CommSemigroup.toSemigroup.{u3} P _inst_3))) (MulHom.{u1, u3} M P _inst_1 (Semigroup.toHasMul.{u3} P (CommSemigroup.toSemigroup.{u3} P _inst_3))) (instHMul.{max u3 u1} (MulHom.{u1, u3} M P _inst_1 (Semigroup.toHasMul.{u3} P (CommSemigroup.toSemigroup.{u3} P _inst_3))) (MulHom.hasMul.{u1, u3} M P _inst_1 _inst_3)) (MulHom.comp.{u1, u2, u3} M N P _inst_1 _inst_2 (Semigroup.toHasMul.{u3} P (CommSemigroup.toSemigroup.{u3} P _inst_3)) g₁ f) (MulHom.comp.{u1, u2, u3} M N P _inst_1 _inst_2 (Semigroup.toHasMul.{u3} P (CommSemigroup.toSemigroup.{u3} P _inst_3)) g₂ f))
-but is expected to have type
-  forall {M : Type.{u3}} {N : Type.{u2}} {P : Type.{u1}} [_inst_1 : Mul.{u3} M] [_inst_2 : Mul.{u2} N] [_inst_3 : CommSemigroup.{u1} P] (g₁ : MulHom.{u2, u1} N P _inst_2 (Semigroup.toMul.{u1} P (CommSemigroup.toSemigroup.{u1} P _inst_3))) (g₂ : MulHom.{u2, u1} N P _inst_2 (Semigroup.toMul.{u1} P (CommSemigroup.toSemigroup.{u1} P _inst_3))) (f : MulHom.{u3, u2} M N _inst_1 _inst_2), Eq.{max (succ u3) (succ u1)} (MulHom.{u3, u1} M P _inst_1 (Semigroup.toMul.{u1} P (CommSemigroup.toSemigroup.{u1} P _inst_3))) (MulHom.comp.{u3, u2, u1} M N P _inst_1 _inst_2 (Semigroup.toMul.{u1} P (CommSemigroup.toSemigroup.{u1} P _inst_3)) (HMul.hMul.{max u2 u1, max u2 u1, max u2 u1} (MulHom.{u2, u1} N P _inst_2 (Semigroup.toMul.{u1} P (CommSemigroup.toSemigroup.{u1} P _inst_3))) (MulHom.{u2, u1} N P _inst_2 (Semigroup.toMul.{u1} P (CommSemigroup.toSemigroup.{u1} P _inst_3))) (MulHom.{u2, u1} N P _inst_2 (Semigroup.toMul.{u1} P (CommSemigroup.toSemigroup.{u1} P _inst_3))) (instHMul.{max u2 u1} (MulHom.{u2, u1} N P _inst_2 (Semigroup.toMul.{u1} P (CommSemigroup.toSemigroup.{u1} P _inst_3))) (MulHom.instMulMulHomToMulToSemigroup.{u2, u1} N P _inst_2 _inst_3)) g₁ g₂) f) (HMul.hMul.{max u3 u1, max u3 u1, max u3 u1} (MulHom.{u3, u1} M P _inst_1 (Semigroup.toMul.{u1} P (CommSemigroup.toSemigroup.{u1} P _inst_3))) (MulHom.{u3, u1} M P _inst_1 (Semigroup.toMul.{u1} P (CommSemigroup.toSemigroup.{u1} P _inst_3))) (MulHom.{u3, u1} M P _inst_1 (Semigroup.toMul.{u1} P (CommSemigroup.toSemigroup.{u1} P _inst_3))) (instHMul.{max u3 u1} (MulHom.{u3, u1} M P _inst_1 (Semigroup.toMul.{u1} P (CommSemigroup.toSemigroup.{u1} P _inst_3))) (MulHom.instMulMulHomToMulToSemigroup.{u3, u1} M P _inst_1 _inst_3)) (MulHom.comp.{u3, u2, u1} M N P _inst_1 _inst_2 (Semigroup.toMul.{u1} P (CommSemigroup.toSemigroup.{u1} P _inst_3)) g₁ f) (MulHom.comp.{u3, u2, u1} M N P _inst_1 _inst_2 (Semigroup.toMul.{u1} P (CommSemigroup.toSemigroup.{u1} P _inst_3)) g₂ f))
-Case conversion may be inaccurate. Consider using '#align mul_hom.mul_comp MulHom.mul_compₓ'. -/
 @[to_additive]
 theorem mul_comp [Mul M] [Mul N] [CommSemigroup P] (g₁ g₂ : N →ₙ* P) (f : M →ₙ* N) :
     (g₁ * g₂).comp f = g₁.comp f * g₂.comp f :=
@@ -2345,12 +1601,6 @@ theorem mul_comp [Mul M] [Mul N] [CommSemigroup P] (g₁ g₂ : N →ₙ* P) (f
 #align mul_hom.mul_comp MulHom.mul_comp
 #align add_hom.add_comp AddHom.add_comp
 
-/- warning: mul_hom.comp_mul -> MulHom.comp_mul is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} {N : Type.{u2}} {P : Type.{u3}} [_inst_1 : Mul.{u1} M] [_inst_2 : CommSemigroup.{u2} N] [_inst_3 : CommSemigroup.{u3} P] (g : MulHom.{u2, u3} N P (Semigroup.toHasMul.{u2} N (CommSemigroup.toSemigroup.{u2} N _inst_2)) (Semigroup.toHasMul.{u3} P (CommSemigroup.toSemigroup.{u3} P _inst_3))) (f₁ : MulHom.{u1, u2} M N _inst_1 (Semigroup.toHasMul.{u2} N (CommSemigroup.toSemigroup.{u2} N _inst_2))) (f₂ : MulHom.{u1, u2} M N _inst_1 (Semigroup.toHasMul.{u2} N (CommSemigroup.toSemigroup.{u2} N _inst_2))), Eq.{max (succ u3) (succ u1)} (MulHom.{u1, u3} M P _inst_1 (Semigroup.toHasMul.{u3} P (CommSemigroup.toSemigroup.{u3} P _inst_3))) (MulHom.comp.{u1, u2, u3} M N P _inst_1 (Semigroup.toHasMul.{u2} N (CommSemigroup.toSemigroup.{u2} N _inst_2)) (Semigroup.toHasMul.{u3} P (CommSemigroup.toSemigroup.{u3} P _inst_3)) g (HMul.hMul.{max u2 u1, max u2 u1, max u2 u1} (MulHom.{u1, u2} M N _inst_1 (Semigroup.toHasMul.{u2} N (CommSemigroup.toSemigroup.{u2} N _inst_2))) (MulHom.{u1, u2} M N _inst_1 (Semigroup.toHasMul.{u2} N (CommSemigroup.toSemigroup.{u2} N _inst_2))) (MulHom.{u1, u2} M N _inst_1 (Semigroup.toHasMul.{u2} N (CommSemigroup.toSemigroup.{u2} N _inst_2))) (instHMul.{max u2 u1} (MulHom.{u1, u2} M N _inst_1 (Semigroup.toHasMul.{u2} N (CommSemigroup.toSemigroup.{u2} N _inst_2))) (MulHom.hasMul.{u1, u2} M N _inst_1 _inst_2)) f₁ f₂)) (HMul.hMul.{max u3 u1, max u3 u1, max u3 u1} (MulHom.{u1, u3} M P _inst_1 (Semigroup.toHasMul.{u3} P (CommSemigroup.toSemigroup.{u3} P _inst_3))) (MulHom.{u1, u3} M P _inst_1 (Semigroup.toHasMul.{u3} P (CommSemigroup.toSemigroup.{u3} P _inst_3))) (MulHom.{u1, u3} M P _inst_1 (Semigroup.toHasMul.{u3} P (CommSemigroup.toSemigroup.{u3} P _inst_3))) (instHMul.{max u3 u1} (MulHom.{u1, u3} M P _inst_1 (Semigroup.toHasMul.{u3} P (CommSemigroup.toSemigroup.{u3} P _inst_3))) (MulHom.hasMul.{u1, u3} M P _inst_1 _inst_3)) (MulHom.comp.{u1, u2, u3} M N P _inst_1 (Semigroup.toHasMul.{u2} N (CommSemigroup.toSemigroup.{u2} N _inst_2)) (Semigroup.toHasMul.{u3} P (CommSemigroup.toSemigroup.{u3} P _inst_3)) g f₁) (MulHom.comp.{u1, u2, u3} M N P _inst_1 (Semigroup.toHasMul.{u2} N (CommSemigroup.toSemigroup.{u2} N _inst_2)) (Semigroup.toHasMul.{u3} P (CommSemigroup.toSemigroup.{u3} P _inst_3)) g f₂))
-but is expected to have type
-  forall {M : Type.{u3}} {N : Type.{u2}} {P : Type.{u1}} [_inst_1 : Mul.{u3} M] [_inst_2 : CommSemigroup.{u2} N] [_inst_3 : CommSemigroup.{u1} P] (g : MulHom.{u2, u1} N P (Semigroup.toMul.{u2} N (CommSemigroup.toSemigroup.{u2} N _inst_2)) (Semigroup.toMul.{u1} P (CommSemigroup.toSemigroup.{u1} P _inst_3))) (f₁ : MulHom.{u3, u2} M N _inst_1 (Semigroup.toMul.{u2} N (CommSemigroup.toSemigroup.{u2} N _inst_2))) (f₂ : MulHom.{u3, u2} M N _inst_1 (Semigroup.toMul.{u2} N (CommSemigroup.toSemigroup.{u2} N _inst_2))), Eq.{max (succ u3) (succ u1)} (MulHom.{u3, u1} M P _inst_1 (Semigroup.toMul.{u1} P (CommSemigroup.toSemigroup.{u1} P _inst_3))) (MulHom.comp.{u3, u2, u1} M N P _inst_1 (Semigroup.toMul.{u2} N (CommSemigroup.toSemigroup.{u2} N _inst_2)) (Semigroup.toMul.{u1} P (CommSemigroup.toSemigroup.{u1} P _inst_3)) g (HMul.hMul.{max u3 u2, max u3 u2, max u3 u2} (MulHom.{u3, u2} M N _inst_1 (Semigroup.toMul.{u2} N (CommSemigroup.toSemigroup.{u2} N _inst_2))) (MulHom.{u3, u2} M N _inst_1 (Semigroup.toMul.{u2} N (CommSemigroup.toSemigroup.{u2} N _inst_2))) (MulHom.{u3, u2} M N _inst_1 (Semigroup.toMul.{u2} N (CommSemigroup.toSemigroup.{u2} N _inst_2))) (instHMul.{max u3 u2} (MulHom.{u3, u2} M N _inst_1 (Semigroup.toMul.{u2} N (CommSemigroup.toSemigroup.{u2} N _inst_2))) (MulHom.instMulMulHomToMulToSemigroup.{u3, u2} M N _inst_1 _inst_2)) f₁ f₂)) (HMul.hMul.{max u3 u1, max u3 u1, max u3 u1} (MulHom.{u3, u1} M P _inst_1 (Semigroup.toMul.{u1} P (CommSemigroup.toSemigroup.{u1} P _inst_3))) (MulHom.{u3, u1} M P _inst_1 (Semigroup.toMul.{u1} P (CommSemigroup.toSemigroup.{u1} P _inst_3))) (MulHom.{u3, u1} M P _inst_1 (Semigroup.toMul.{u1} P (CommSemigroup.toSemigroup.{u1} P _inst_3))) (instHMul.{max u3 u1} (MulHom.{u3, u1} M P _inst_1 (Semigroup.toMul.{u1} P (CommSemigroup.toSemigroup.{u1} P _inst_3))) (MulHom.instMulMulHomToMulToSemigroup.{u3, u1} M P _inst_1 _inst_3)) (MulHom.comp.{u3, u2, u1} M N P _inst_1 (Semigroup.toMul.{u2} N (CommSemigroup.toSemigroup.{u2} N _inst_2)) (Semigroup.toMul.{u1} P (CommSemigroup.toSemigroup.{u1} P _inst_3)) g f₁) (MulHom.comp.{u3, u2, u1} M N P _inst_1 (Semigroup.toMul.{u2} N (CommSemigroup.toSemigroup.{u2} N _inst_2)) (Semigroup.toMul.{u1} P (CommSemigroup.toSemigroup.{u1} P _inst_3)) g f₂))
-Case conversion may be inaccurate. Consider using '#align mul_hom.comp_mul MulHom.comp_mulₓ'. -/
 @[to_additive]
 theorem comp_mul [Mul M] [CommSemigroup N] [CommSemigroup P] (g : N →ₙ* P) (f₁ f₂ : M →ₙ* N) :
     g.comp (f₁ * f₂) = g.comp f₁ * g.comp f₂ := by ext;
@@ -2381,12 +1631,6 @@ instance {M N} {mM : MulOneClass M} [CommMonoid N] : Mul (M →* N) :=
 additive monoid morphism sending `x` to `f x + g x`. -/
 add_decl_doc AddMonoidHom.hasAdd
 
-/- warning: monoid_hom.mul_apply -> MonoidHom.mul_apply is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} {N : Type.{u2}} {mM : MulOneClass.{u1} M} {mN : CommMonoid.{u2} N} (f : MonoidHom.{u1, u2} M N mM (Monoid.toMulOneClass.{u2} N (CommMonoid.toMonoid.{u2} N mN))) (g : MonoidHom.{u1, u2} M N mM (Monoid.toMulOneClass.{u2} N (CommMonoid.toMonoid.{u2} N mN))) (x : M), Eq.{succ u2} N (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} M N mM (Monoid.toMulOneClass.{u2} N (CommMonoid.toMonoid.{u2} N mN))) (fun (_x : MonoidHom.{u1, u2} M N mM (Monoid.toMulOneClass.{u2} N (CommMonoid.toMonoid.{u2} N mN))) => M -> N) (MonoidHom.hasCoeToFun.{u1, u2} M N mM (Monoid.toMulOneClass.{u2} N (CommMonoid.toMonoid.{u2} N mN))) (HMul.hMul.{max u2 u1, max u2 u1, max u2 u1} (MonoidHom.{u1, u2} M N mM (Monoid.toMulOneClass.{u2} N (CommMonoid.toMonoid.{u2} N mN))) (MonoidHom.{u1, u2} M N mM (Monoid.toMulOneClass.{u2} N (CommMonoid.toMonoid.{u2} N mN))) (MonoidHom.{u1, u2} M N mM (Monoid.toMulOneClass.{u2} N (CommMonoid.toMonoid.{u2} N mN))) (instHMul.{max u2 u1} (MonoidHom.{u1, u2} M N mM (Monoid.toMulOneClass.{u2} N (CommMonoid.toMonoid.{u2} N mN))) (MonoidHom.hasMul.{u1, u2} M N mM mN)) f g) x) (HMul.hMul.{u2, u2, u2} N N N (instHMul.{u2} N (MulOneClass.toHasMul.{u2} N (Monoid.toMulOneClass.{u2} N (CommMonoid.toMonoid.{u2} N mN)))) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} M N mM (Monoid.toMulOneClass.{u2} N (CommMonoid.toMonoid.{u2} N mN))) (fun (_x : MonoidHom.{u1, u2} M N mM (Monoid.toMulOneClass.{u2} N (CommMonoid.toMonoid.{u2} N mN))) => M -> N) (MonoidHom.hasCoeToFun.{u1, u2} M N mM (Monoid.toMulOneClass.{u2} N (CommMonoid.toMonoid.{u2} N mN))) f x) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} M N mM (Monoid.toMulOneClass.{u2} N (CommMonoid.toMonoid.{u2} N mN))) (fun (_x : MonoidHom.{u1, u2} M N mM (Monoid.toMulOneClass.{u2} N (CommMonoid.toMonoid.{u2} N mN))) => M -> N) (MonoidHom.hasCoeToFun.{u1, u2} M N mM (Monoid.toMulOneClass.{u2} N (CommMonoid.toMonoid.{u2} N mN))) g x))
-but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [mM : MulOneClass.{u2} M] [mN : CommMonoid.{u1} N] (f : MonoidHom.{u2, u1} M N mM (Monoid.toMulOneClass.{u1} N (CommMonoid.toMonoid.{u1} N mN))) (g : MonoidHom.{u2, u1} M N mM (Monoid.toMulOneClass.{u1} N (CommMonoid.toMonoid.{u1} N mN))) (x : M), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M N mM (Monoid.toMulOneClass.{u1} N (CommMonoid.toMonoid.{u1} N mN))) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N mM (Monoid.toMulOneClass.{u1} N (CommMonoid.toMonoid.{u1} N mN))) M N (MulOneClass.toMul.{u2} M mM) (MulOneClass.toMul.{u1} N (Monoid.toMulOneClass.{u1} N (CommMonoid.toMonoid.{u1} N mN))) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N mM (Monoid.toMulOneClass.{u1} N (CommMonoid.toMonoid.{u1} N mN))) M N mM (Monoid.toMulOneClass.{u1} N (CommMonoid.toMonoid.{u1} N mN)) (MonoidHom.monoidHomClass.{u2, u1} M N mM (Monoid.toMulOneClass.{u1} N (CommMonoid.toMonoid.{u1} N mN))))) (HMul.hMul.{max u2 u1, max u2 u1, max u2 u1} (MonoidHom.{u2, u1} M N mM (Monoid.toMulOneClass.{u1} N (CommMonoid.toMonoid.{u1} N mN))) (MonoidHom.{u2, u1} M N mM (Monoid.toMulOneClass.{u1} N (CommMonoid.toMonoid.{u1} N mN))) (MonoidHom.{u2, u1} M N mM (Monoid.toMulOneClass.{u1} N (CommMonoid.toMonoid.{u1} N mN))) (instHMul.{max u2 u1} (MonoidHom.{u2, u1} M N mM (Monoid.toMulOneClass.{u1} N (CommMonoid.toMonoid.{u1} N mN))) (MonoidHom.mul.{u2, u1} M N mM mN)) f g) x) (HMul.hMul.{u1, u1, u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) x) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) x) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) x) (instHMul.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) x) (MulOneClass.toMul.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) x) (Monoid.toMulOneClass.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) x) (CommMonoid.toMonoid.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) x) mN)))) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M N mM (Monoid.toMulOneClass.{u1} N (CommMonoid.toMonoid.{u1} N mN))) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N mM (Monoid.toMulOneClass.{u1} N (CommMonoid.toMonoid.{u1} N mN))) M N (MulOneClass.toMul.{u2} M mM) (MulOneClass.toMul.{u1} N (Monoid.toMulOneClass.{u1} N (CommMonoid.toMonoid.{u1} N mN))) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N mM (Monoid.toMulOneClass.{u1} N (CommMonoid.toMonoid.{u1} N mN))) M N mM (Monoid.toMulOneClass.{u1} N (CommMonoid.toMonoid.{u1} N mN)) (MonoidHom.monoidHomClass.{u2, u1} M N mM (Monoid.toMulOneClass.{u1} N (CommMonoid.toMonoid.{u1} N mN))))) f x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M N mM (Monoid.toMulOneClass.{u1} N (CommMonoid.toMonoid.{u1} N mN))) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N mM (Monoid.toMulOneClass.{u1} N (CommMonoid.toMonoid.{u1} N mN))) M N (MulOneClass.toMul.{u2} M mM) (MulOneClass.toMul.{u1} N (Monoid.toMulOneClass.{u1} N (CommMonoid.toMonoid.{u1} N mN))) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N mM (Monoid.toMulOneClass.{u1} N (CommMonoid.toMonoid.{u1} N mN))) M N mM (Monoid.toMulOneClass.{u1} N (CommMonoid.toMonoid.{u1} N mN)) (MonoidHom.monoidHomClass.{u2, u1} M N mM (Monoid.toMulOneClass.{u1} N (CommMonoid.toMonoid.{u1} N mN))))) g x))
-Case conversion may be inaccurate. Consider using '#align monoid_hom.mul_apply MonoidHom.mul_applyₓ'. -/
 @[simp, to_additive]
 theorem mul_apply {M N} {mM : MulOneClass M} {mN : CommMonoid N} (f g : M →* N) (x : M) :
     (f * g) x = f x * g x :=
@@ -2394,12 +1638,6 @@ theorem mul_apply {M N} {mM : MulOneClass M} {mN : CommMonoid N} (f g : M →* N
 #align monoid_hom.mul_apply MonoidHom.mul_apply
 #align add_monoid_hom.add_apply AddMonoidHom.add_apply
 
-/- warning: monoid_hom.one_comp -> MonoidHom.one_comp is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} {N : Type.{u2}} {P : Type.{u3}} [_inst_3 : MulOneClass.{u1} M] [_inst_4 : MulOneClass.{u2} N] [_inst_5 : MulOneClass.{u3} P] (f : MonoidHom.{u1, u2} M N _inst_3 _inst_4), Eq.{max (succ u3) (succ u1)} (MonoidHom.{u1, u3} M P _inst_3 _inst_5) (MonoidHom.comp.{u1, u2, u3} M N P _inst_3 _inst_4 _inst_5 (OfNat.ofNat.{max u3 u2} (MonoidHom.{u2, u3} N P _inst_4 _inst_5) 1 (OfNat.mk.{max u3 u2} (MonoidHom.{u2, u3} N P _inst_4 _inst_5) 1 (One.one.{max u3 u2} (MonoidHom.{u2, u3} N P _inst_4 _inst_5) (MonoidHom.hasOne.{u2, u3} N P _inst_4 _inst_5)))) f) (OfNat.ofNat.{max u3 u1} (MonoidHom.{u1, u3} M P _inst_3 _inst_5) 1 (OfNat.mk.{max u3 u1} (MonoidHom.{u1, u3} M P _inst_3 _inst_5) 1 (One.one.{max u3 u1} (MonoidHom.{u1, u3} M P _inst_3 _inst_5) (MonoidHom.hasOne.{u1, u3} M P _inst_3 _inst_5))))
-but is expected to have type
-  forall {M : Type.{u3}} {N : Type.{u2}} {P : Type.{u1}} [_inst_3 : MulOneClass.{u3} M] [_inst_4 : MulOneClass.{u2} N] [_inst_5 : MulOneClass.{u1} P] (f : MonoidHom.{u3, u2} M N _inst_3 _inst_4), Eq.{max (succ u3) (succ u1)} (MonoidHom.{u3, u1} M P _inst_3 _inst_5) (MonoidHom.comp.{u3, u2, u1} M N P _inst_3 _inst_4 _inst_5 (OfNat.ofNat.{max u2 u1} (MonoidHom.{u2, u1} N P _inst_4 _inst_5) 1 (One.toOfNat1.{max u2 u1} (MonoidHom.{u2, u1} N P _inst_4 _inst_5) (instOneMonoidHom.{u2, u1} N P _inst_4 _inst_5))) f) (OfNat.ofNat.{max u3 u1} (MonoidHom.{u3, u1} M P _inst_3 _inst_5) 1 (One.toOfNat1.{max u3 u1} (MonoidHom.{u3, u1} M P _inst_3 _inst_5) (instOneMonoidHom.{u3, u1} M P _inst_3 _inst_5)))
-Case conversion may be inaccurate. Consider using '#align monoid_hom.one_comp MonoidHom.one_compₓ'. -/
 @[simp, to_additive]
 theorem one_comp [MulOneClass M] [MulOneClass N] [MulOneClass P] (f : M →* N) :
     (1 : N →* P).comp f = 1 :=
@@ -2407,24 +1645,12 @@ theorem one_comp [MulOneClass M] [MulOneClass N] [MulOneClass P] (f : M →* N)
 #align monoid_hom.one_comp MonoidHom.one_comp
 #align add_monoid_hom.zero_comp AddMonoidHom.zero_comp
 
-/- warning: monoid_hom.comp_one -> MonoidHom.comp_one is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} {N : Type.{u2}} {P : Type.{u3}} [_inst_3 : MulOneClass.{u1} M] [_inst_4 : MulOneClass.{u2} N] [_inst_5 : MulOneClass.{u3} P] (f : MonoidHom.{u2, u3} N P _inst_4 _inst_5), Eq.{max (succ u3) (succ u1)} (MonoidHom.{u1, u3} M P _inst_3 _inst_5) (MonoidHom.comp.{u1, u2, u3} M N P _inst_3 _inst_4 _inst_5 f (OfNat.ofNat.{max u2 u1} (MonoidHom.{u1, u2} M N _inst_3 _inst_4) 1 (OfNat.mk.{max u2 u1} (MonoidHom.{u1, u2} M N _inst_3 _inst_4) 1 (One.one.{max u2 u1} (MonoidHom.{u1, u2} M N _inst_3 _inst_4) (MonoidHom.hasOne.{u1, u2} M N _inst_3 _inst_4))))) (OfNat.ofNat.{max u3 u1} (MonoidHom.{u1, u3} M P _inst_3 _inst_5) 1 (OfNat.mk.{max u3 u1} (MonoidHom.{u1, u3} M P _inst_3 _inst_5) 1 (One.one.{max u3 u1} (MonoidHom.{u1, u3} M P _inst_3 _inst_5) (MonoidHom.hasOne.{u1, u3} M P _inst_3 _inst_5))))
-but is expected to have type
-  forall {M : Type.{u3}} {N : Type.{u2}} {P : Type.{u1}} [_inst_3 : MulOneClass.{u3} M] [_inst_4 : MulOneClass.{u2} N] [_inst_5 : MulOneClass.{u1} P] (f : MonoidHom.{u2, u1} N P _inst_4 _inst_5), Eq.{max (succ u3) (succ u1)} (MonoidHom.{u3, u1} M P _inst_3 _inst_5) (MonoidHom.comp.{u3, u2, u1} M N P _inst_3 _inst_4 _inst_5 f (OfNat.ofNat.{max u3 u2} (MonoidHom.{u3, u2} M N _inst_3 _inst_4) 1 (One.toOfNat1.{max u3 u2} (MonoidHom.{u3, u2} M N _inst_3 _inst_4) (instOneMonoidHom.{u3, u2} M N _inst_3 _inst_4)))) (OfNat.ofNat.{max u3 u1} (MonoidHom.{u3, u1} M P _inst_3 _inst_5) 1 (One.toOfNat1.{max u3 u1} (MonoidHom.{u3, u1} M P _inst_3 _inst_5) (instOneMonoidHom.{u3, u1} M P _inst_3 _inst_5)))
-Case conversion may be inaccurate. Consider using '#align monoid_hom.comp_one MonoidHom.comp_oneₓ'. -/
 @[simp, to_additive]
 theorem comp_one [MulOneClass M] [MulOneClass N] [MulOneClass P] (f : N →* P) :
     f.comp (1 : M →* N) = 1 := by ext; simp only [map_one, coe_comp, Function.comp_apply, one_apply]
 #align monoid_hom.comp_one MonoidHom.comp_one
 #align add_monoid_hom.comp_zero AddMonoidHom.comp_zero
 
-/- warning: monoid_hom.mul_comp -> MonoidHom.mul_comp is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} {N : Type.{u2}} {P : Type.{u3}} [_inst_3 : MulOneClass.{u1} M] [_inst_4 : MulOneClass.{u2} N] [_inst_5 : CommMonoid.{u3} P] (g₁ : MonoidHom.{u2, u3} N P _inst_4 (Monoid.toMulOneClass.{u3} P (CommMonoid.toMonoid.{u3} P _inst_5))) (g₂ : MonoidHom.{u2, u3} N P _inst_4 (Monoid.toMulOneClass.{u3} P (CommMonoid.toMonoid.{u3} P _inst_5))) (f : MonoidHom.{u1, u2} M N _inst_3 _inst_4), Eq.{max (succ u3) (succ u1)} (MonoidHom.{u1, u3} M P _inst_3 (Monoid.toMulOneClass.{u3} P (CommMonoid.toMonoid.{u3} P _inst_5))) (MonoidHom.comp.{u1, u2, u3} M N P _inst_3 _inst_4 (Monoid.toMulOneClass.{u3} P (CommMonoid.toMonoid.{u3} P _inst_5)) (HMul.hMul.{max u3 u2, max u3 u2, max u3 u2} (MonoidHom.{u2, u3} N P _inst_4 (Monoid.toMulOneClass.{u3} P (CommMonoid.toMonoid.{u3} P _inst_5))) (MonoidHom.{u2, u3} N P _inst_4 (Monoid.toMulOneClass.{u3} P (CommMonoid.toMonoid.{u3} P _inst_5))) (MonoidHom.{u2, u3} N P _inst_4 (Monoid.toMulOneClass.{u3} P (CommMonoid.toMonoid.{u3} P _inst_5))) (instHMul.{max u3 u2} (MonoidHom.{u2, u3} N P _inst_4 (Monoid.toMulOneClass.{u3} P (CommMonoid.toMonoid.{u3} P _inst_5))) (MonoidHom.hasMul.{u2, u3} N P _inst_4 _inst_5)) g₁ g₂) f) (HMul.hMul.{max u3 u1, max u3 u1, max u3 u1} (MonoidHom.{u1, u3} M P _inst_3 (Monoid.toMulOneClass.{u3} P (CommMonoid.toMonoid.{u3} P _inst_5))) (MonoidHom.{u1, u3} M P _inst_3 (Monoid.toMulOneClass.{u3} P (CommMonoid.toMonoid.{u3} P _inst_5))) (MonoidHom.{u1, u3} M P _inst_3 (Monoid.toMulOneClass.{u3} P (CommMonoid.toMonoid.{u3} P _inst_5))) (instHMul.{max u3 u1} (MonoidHom.{u1, u3} M P _inst_3 (Monoid.toMulOneClass.{u3} P (CommMonoid.toMonoid.{u3} P _inst_5))) (MonoidHom.hasMul.{u1, u3} M P _inst_3 _inst_5)) (MonoidHom.comp.{u1, u2, u3} M N P _inst_3 _inst_4 (Monoid.toMulOneClass.{u3} P (CommMonoid.toMonoid.{u3} P _inst_5)) g₁ f) (MonoidHom.comp.{u1, u2, u3} M N P _inst_3 _inst_4 (Monoid.toMulOneClass.{u3} P (CommMonoid.toMonoid.{u3} P _inst_5)) g₂ f))
-but is expected to have type
-  forall {M : Type.{u3}} {N : Type.{u2}} {P : Type.{u1}} [_inst_3 : MulOneClass.{u3} M] [_inst_4 : MulOneClass.{u2} N] [_inst_5 : CommMonoid.{u1} P] (g₁ : MonoidHom.{u2, u1} N P _inst_4 (Monoid.toMulOneClass.{u1} P (CommMonoid.toMonoid.{u1} P _inst_5))) (g₂ : MonoidHom.{u2, u1} N P _inst_4 (Monoid.toMulOneClass.{u1} P (CommMonoid.toMonoid.{u1} P _inst_5))) (f : MonoidHom.{u3, u2} M N _inst_3 _inst_4), Eq.{max (succ u3) (succ u1)} (MonoidHom.{u3, u1} M P _inst_3 (Monoid.toMulOneClass.{u1} P (CommMonoid.toMonoid.{u1} P _inst_5))) (MonoidHom.comp.{u3, u2, u1} M N P _inst_3 _inst_4 (Monoid.toMulOneClass.{u1} P (CommMonoid.toMonoid.{u1} P _inst_5)) (HMul.hMul.{max u2 u1, max u2 u1, max u2 u1} (MonoidHom.{u2, u1} N P _inst_4 (Monoid.toMulOneClass.{u1} P (CommMonoid.toMonoid.{u1} P _inst_5))) (MonoidHom.{u2, u1} N P _inst_4 (Monoid.toMulOneClass.{u1} P (CommMonoid.toMonoid.{u1} P _inst_5))) (MonoidHom.{u2, u1} N P _inst_4 (Monoid.toMulOneClass.{u1} P (CommMonoid.toMonoid.{u1} P _inst_5))) (instHMul.{max u2 u1} (MonoidHom.{u2, u1} N P _inst_4 (Monoid.toMulOneClass.{u1} P (CommMonoid.toMonoid.{u1} P _inst_5))) (MonoidHom.mul.{u2, u1} N P _inst_4 _inst_5)) g₁ g₂) f) (HMul.hMul.{max u3 u1, max u3 u1, max u3 u1} (MonoidHom.{u3, u1} M P _inst_3 (Monoid.toMulOneClass.{u1} P (CommMonoid.toMonoid.{u1} P _inst_5))) (MonoidHom.{u3, u1} M P _inst_3 (Monoid.toMulOneClass.{u1} P (CommMonoid.toMonoid.{u1} P _inst_5))) (MonoidHom.{u3, u1} M P _inst_3 (Monoid.toMulOneClass.{u1} P (CommMonoid.toMonoid.{u1} P _inst_5))) (instHMul.{max u3 u1} (MonoidHom.{u3, u1} M P _inst_3 (Monoid.toMulOneClass.{u1} P (CommMonoid.toMonoid.{u1} P _inst_5))) (MonoidHom.mul.{u3, u1} M P _inst_3 _inst_5)) (MonoidHom.comp.{u3, u2, u1} M N P _inst_3 _inst_4 (Monoid.toMulOneClass.{u1} P (CommMonoid.toMonoid.{u1} P _inst_5)) g₁ f) (MonoidHom.comp.{u3, u2, u1} M N P _inst_3 _inst_4 (Monoid.toMulOneClass.{u1} P (CommMonoid.toMonoid.{u1} P _inst_5)) g₂ f))
-Case conversion may be inaccurate. Consider using '#align monoid_hom.mul_comp MonoidHom.mul_compₓ'. -/
 @[to_additive]
 theorem mul_comp [MulOneClass M] [MulOneClass N] [CommMonoid P] (g₁ g₂ : N →* P) (f : M →* N) :
     (g₁ * g₂).comp f = g₁.comp f * g₂.comp f :=
@@ -2432,12 +1658,6 @@ theorem mul_comp [MulOneClass M] [MulOneClass N] [CommMonoid P] (g₁ g₂ : N 
 #align monoid_hom.mul_comp MonoidHom.mul_comp
 #align add_monoid_hom.add_comp AddMonoidHom.add_comp
 
-/- warning: monoid_hom.comp_mul -> MonoidHom.comp_mul is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} {N : Type.{u2}} {P : Type.{u3}} [_inst_3 : MulOneClass.{u1} M] [_inst_4 : CommMonoid.{u2} N] [_inst_5 : CommMonoid.{u3} P] (g : MonoidHom.{u2, u3} N P (Monoid.toMulOneClass.{u2} N (CommMonoid.toMonoid.{u2} N _inst_4)) (Monoid.toMulOneClass.{u3} P (CommMonoid.toMonoid.{u3} P _inst_5))) (f₁ : MonoidHom.{u1, u2} M N _inst_3 (Monoid.toMulOneClass.{u2} N (CommMonoid.toMonoid.{u2} N _inst_4))) (f₂ : MonoidHom.{u1, u2} M N _inst_3 (Monoid.toMulOneClass.{u2} N (CommMonoid.toMonoid.{u2} N _inst_4))), Eq.{max (succ u3) (succ u1)} (MonoidHom.{u1, u3} M P _inst_3 (Monoid.toMulOneClass.{u3} P (CommMonoid.toMonoid.{u3} P _inst_5))) (MonoidHom.comp.{u1, u2, u3} M N P _inst_3 (Monoid.toMulOneClass.{u2} N (CommMonoid.toMonoid.{u2} N _inst_4)) (Monoid.toMulOneClass.{u3} P (CommMonoid.toMonoid.{u3} P _inst_5)) g (HMul.hMul.{max u2 u1, max u2 u1, max u2 u1} (MonoidHom.{u1, u2} M N _inst_3 (Monoid.toMulOneClass.{u2} N (CommMonoid.toMonoid.{u2} N _inst_4))) (MonoidHom.{u1, u2} M N _inst_3 (Monoid.toMulOneClass.{u2} N (CommMonoid.toMonoid.{u2} N _inst_4))) (MonoidHom.{u1, u2} M N _inst_3 (Monoid.toMulOneClass.{u2} N (CommMonoid.toMonoid.{u2} N _inst_4))) (instHMul.{max u2 u1} (MonoidHom.{u1, u2} M N _inst_3 (Monoid.toMulOneClass.{u2} N (CommMonoid.toMonoid.{u2} N _inst_4))) (MonoidHom.hasMul.{u1, u2} M N _inst_3 _inst_4)) f₁ f₂)) (HMul.hMul.{max u3 u1, max u3 u1, max u3 u1} (MonoidHom.{u1, u3} M P _inst_3 (Monoid.toMulOneClass.{u3} P (CommMonoid.toMonoid.{u3} P _inst_5))) (MonoidHom.{u1, u3} M P _inst_3 (Monoid.toMulOneClass.{u3} P (CommMonoid.toMonoid.{u3} P _inst_5))) (MonoidHom.{u1, u3} M P _inst_3 (Monoid.toMulOneClass.{u3} P (CommMonoid.toMonoid.{u3} P _inst_5))) (instHMul.{max u3 u1} (MonoidHom.{u1, u3} M P _inst_3 (Monoid.toMulOneClass.{u3} P (CommMonoid.toMonoid.{u3} P _inst_5))) (MonoidHom.hasMul.{u1, u3} M P _inst_3 _inst_5)) (MonoidHom.comp.{u1, u2, u3} M N P _inst_3 (Monoid.toMulOneClass.{u2} N (CommMonoid.toMonoid.{u2} N _inst_4)) (Monoid.toMulOneClass.{u3} P (CommMonoid.toMonoid.{u3} P _inst_5)) g f₁) (MonoidHom.comp.{u1, u2, u3} M N P _inst_3 (Monoid.toMulOneClass.{u2} N (CommMonoid.toMonoid.{u2} N _inst_4)) (Monoid.toMulOneClass.{u3} P (CommMonoid.toMonoid.{u3} P _inst_5)) g f₂))
-but is expected to have type
-  forall {M : Type.{u3}} {N : Type.{u2}} {P : Type.{u1}} [_inst_3 : MulOneClass.{u3} M] [_inst_4 : CommMonoid.{u2} N] [_inst_5 : CommMonoid.{u1} P] (g : MonoidHom.{u2, u1} N P (Monoid.toMulOneClass.{u2} N (CommMonoid.toMonoid.{u2} N _inst_4)) (Monoid.toMulOneClass.{u1} P (CommMonoid.toMonoid.{u1} P _inst_5))) (f₁ : MonoidHom.{u3, u2} M N _inst_3 (Monoid.toMulOneClass.{u2} N (CommMonoid.toMonoid.{u2} N _inst_4))) (f₂ : MonoidHom.{u3, u2} M N _inst_3 (Monoid.toMulOneClass.{u2} N (CommMonoid.toMonoid.{u2} N _inst_4))), Eq.{max (succ u3) (succ u1)} (MonoidHom.{u3, u1} M P _inst_3 (Monoid.toMulOneClass.{u1} P (CommMonoid.toMonoid.{u1} P _inst_5))) (MonoidHom.comp.{u3, u2, u1} M N P _inst_3 (Monoid.toMulOneClass.{u2} N (CommMonoid.toMonoid.{u2} N _inst_4)) (Monoid.toMulOneClass.{u1} P (CommMonoid.toMonoid.{u1} P _inst_5)) g (HMul.hMul.{max u3 u2, max u3 u2, max u3 u2} (MonoidHom.{u3, u2} M N _inst_3 (Monoid.toMulOneClass.{u2} N (CommMonoid.toMonoid.{u2} N _inst_4))) (MonoidHom.{u3, u2} M N _inst_3 (Monoid.toMulOneClass.{u2} N (CommMonoid.toMonoid.{u2} N _inst_4))) (MonoidHom.{u3, u2} M N _inst_3 (Monoid.toMulOneClass.{u2} N (CommMonoid.toMonoid.{u2} N _inst_4))) (instHMul.{max u3 u2} (MonoidHom.{u3, u2} M N _inst_3 (Monoid.toMulOneClass.{u2} N (CommMonoid.toMonoid.{u2} N _inst_4))) (MonoidHom.mul.{u3, u2} M N _inst_3 _inst_4)) f₁ f₂)) (HMul.hMul.{max u3 u1, max u3 u1, max u3 u1} (MonoidHom.{u3, u1} M P _inst_3 (Monoid.toMulOneClass.{u1} P (CommMonoid.toMonoid.{u1} P _inst_5))) (MonoidHom.{u3, u1} M P _inst_3 (Monoid.toMulOneClass.{u1} P (CommMonoid.toMonoid.{u1} P _inst_5))) (MonoidHom.{u3, u1} M P _inst_3 (Monoid.toMulOneClass.{u1} P (CommMonoid.toMonoid.{u1} P _inst_5))) (instHMul.{max u3 u1} (MonoidHom.{u3, u1} M P _inst_3 (Monoid.toMulOneClass.{u1} P (CommMonoid.toMonoid.{u1} P _inst_5))) (MonoidHom.mul.{u3, u1} M P _inst_3 _inst_5)) (MonoidHom.comp.{u3, u2, u1} M N P _inst_3 (Monoid.toMulOneClass.{u2} N (CommMonoid.toMonoid.{u2} N _inst_4)) (Monoid.toMulOneClass.{u1} P (CommMonoid.toMonoid.{u1} P _inst_5)) g f₁) (MonoidHom.comp.{u3, u2, u1} M N P _inst_3 (Monoid.toMulOneClass.{u2} N (CommMonoid.toMonoid.{u2} N _inst_4)) (Monoid.toMulOneClass.{u1} P (CommMonoid.toMonoid.{u1} P _inst_5)) g f₂))
-Case conversion may be inaccurate. Consider using '#align monoid_hom.comp_mul MonoidHom.comp_mulₓ'. -/
 @[to_additive]
 theorem comp_mul [MulOneClass M] [CommMonoid N] [CommMonoid P] (g : N →* P) (f₁ f₂ : M →* N) :
     g.comp (f₁ * f₂) = g.comp f₁ * g.comp f₂ := by ext;
@@ -2445,12 +1665,6 @@ theorem comp_mul [MulOneClass M] [CommMonoid N] [CommMonoid P] (g : N →* P) (f
 #align monoid_hom.comp_mul MonoidHom.comp_mul
 #align add_monoid_hom.comp_add AddMonoidHom.comp_add
 
-/- warning: monoid_hom.map_inv -> MonoidHom.map_inv is a dubious translation:
-lean 3 declaration is
-  forall {α : Type.{u1}} {β : Type.{u2}} [_inst_3 : Group.{u1} α] [_inst_4 : DivisionMonoid.{u2} β] (f : MonoidHom.{u1, u2} α β (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3))) (Monoid.toMulOneClass.{u2} β (DivInvMonoid.toMonoid.{u2} β (DivisionMonoid.toDivInvMonoid.{u2} β _inst_4)))) (a : α), Eq.{succ u2} β (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} α β (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3))) (Monoid.toMulOneClass.{u2} β (DivInvMonoid.toMonoid.{u2} β (DivisionMonoid.toDivInvMonoid.{u2} β _inst_4)))) (fun (_x : MonoidHom.{u1, u2} α β (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3))) (Monoid.toMulOneClass.{u2} β (DivInvMonoid.toMonoid.{u2} β (DivisionMonoid.toDivInvMonoid.{u2} β _inst_4)))) => α -> β) (MonoidHom.hasCoeToFun.{u1, u2} α β (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3))) (Monoid.toMulOneClass.{u2} β (DivInvMonoid.toMonoid.{u2} β (DivisionMonoid.toDivInvMonoid.{u2} β _inst_4)))) f (Inv.inv.{u1} α (DivInvMonoid.toHasInv.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3)) a)) (Inv.inv.{u2} β (DivInvMonoid.toHasInv.{u2} β (DivisionMonoid.toDivInvMonoid.{u2} β _inst_4)) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} α β (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3))) (Monoid.toMulOneClass.{u2} β (DivInvMonoid.toMonoid.{u2} β (DivisionMonoid.toDivInvMonoid.{u2} β _inst_4)))) (fun (_x : MonoidHom.{u1, u2} α β (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3))) (Monoid.toMulOneClass.{u2} β (DivInvMonoid.toMonoid.{u2} β (DivisionMonoid.toDivInvMonoid.{u2} β _inst_4)))) => α -> β) (MonoidHom.hasCoeToFun.{u1, u2} α β (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3))) (Monoid.toMulOneClass.{u2} β (DivInvMonoid.toMonoid.{u2} β (DivisionMonoid.toDivInvMonoid.{u2} β _inst_4)))) f a))
-but is expected to have type
-  forall {α : Type.{u2}} {β : Type.{u1}} [_inst_3 : Group.{u2} α] [_inst_4 : DivisionMonoid.{u1} β] (f : MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) (a : α), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : α) => β) (Inv.inv.{u2} α (InvOneClass.toInv.{u2} α (DivInvOneMonoid.toInvOneClass.{u2} α (DivisionMonoid.toDivInvOneMonoid.{u2} α (Group.toDivisionMonoid.{u2} α _inst_3)))) a)) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : α) => β) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) α β (MulOneClass.toMul.{u2} α (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3)))) (MulOneClass.toMul.{u1} β (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4))) (MonoidHom.monoidHomClass.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))))) f (Inv.inv.{u2} α (InvOneClass.toInv.{u2} α (DivInvOneMonoid.toInvOneClass.{u2} α (DivisionMonoid.toDivInvOneMonoid.{u2} α (Group.toDivisionMonoid.{u2} α _inst_3)))) a)) (Inv.inv.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : α) => β) a) (InvOneClass.toInv.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : α) => β) a) (DivInvOneMonoid.toInvOneClass.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : α) => β) a) (DivisionMonoid.toDivInvOneMonoid.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : α) => β) a) _inst_4))) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : α) => β) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) α β (MulOneClass.toMul.{u2} α (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3)))) (MulOneClass.toMul.{u1} β (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4))) (MonoidHom.monoidHomClass.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))))) f a))
-Case conversion may be inaccurate. Consider using '#align monoid_hom.map_inv MonoidHom.map_invₓ'. -/
 /-- Group homomorphisms preserve inverse. -/
 @[to_additive "Additive group homomorphisms preserve negation."]
 protected theorem map_inv [Group α] [DivisionMonoid β] (f : α →* β) (a : α) : f a⁻¹ = (f a)⁻¹ :=
@@ -2458,12 +1672,6 @@ protected theorem map_inv [Group α] [DivisionMonoid β] (f : α →* β) (a : 
 #align monoid_hom.map_inv MonoidHom.map_inv
 #align add_monoid_hom.map_neg AddMonoidHom.map_neg
 
-/- warning: monoid_hom.map_zpow -> MonoidHom.map_zpow is a dubious translation:
-lean 3 declaration is
-  forall {α : Type.{u1}} {β : Type.{u2}} [_inst_3 : Group.{u1} α] [_inst_4 : DivisionMonoid.{u2} β] (f : MonoidHom.{u1, u2} α β (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3))) (Monoid.toMulOneClass.{u2} β (DivInvMonoid.toMonoid.{u2} β (DivisionMonoid.toDivInvMonoid.{u2} β _inst_4)))) (g : α) (n : Int), Eq.{succ u2} β (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} α β (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3))) (Monoid.toMulOneClass.{u2} β (DivInvMonoid.toMonoid.{u2} β (DivisionMonoid.toDivInvMonoid.{u2} β _inst_4)))) (fun (_x : MonoidHom.{u1, u2} α β (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3))) (Monoid.toMulOneClass.{u2} β (DivInvMonoid.toMonoid.{u2} β (DivisionMonoid.toDivInvMonoid.{u2} β _inst_4)))) => α -> β) (MonoidHom.hasCoeToFun.{u1, u2} α β (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3))) (Monoid.toMulOneClass.{u2} β (DivInvMonoid.toMonoid.{u2} β (DivisionMonoid.toDivInvMonoid.{u2} β _inst_4)))) f (HPow.hPow.{u1, 0, u1} α Int α (instHPow.{u1, 0} α Int (DivInvMonoid.Pow.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3))) g n)) (HPow.hPow.{u2, 0, u2} β Int β (instHPow.{u2, 0} β Int (DivInvMonoid.Pow.{u2} β (DivisionMonoid.toDivInvMonoid.{u2} β _inst_4))) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} α β (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3))) (Monoid.toMulOneClass.{u2} β (DivInvMonoid.toMonoid.{u2} β (DivisionMonoid.toDivInvMonoid.{u2} β _inst_4)))) (fun (_x : MonoidHom.{u1, u2} α β (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3))) (Monoid.toMulOneClass.{u2} β (DivInvMonoid.toMonoid.{u2} β (DivisionMonoid.toDivInvMonoid.{u2} β _inst_4)))) => α -> β) (MonoidHom.hasCoeToFun.{u1, u2} α β (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3))) (Monoid.toMulOneClass.{u2} β (DivInvMonoid.toMonoid.{u2} β (DivisionMonoid.toDivInvMonoid.{u2} β _inst_4)))) f g) n)
-but is expected to have type
-  forall {α : Type.{u2}} {β : Type.{u1}} [_inst_3 : Group.{u2} α] [_inst_4 : DivisionMonoid.{u1} β] (f : MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) (g : α) (n : Int), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : α) => β) (HPow.hPow.{u2, 0, u2} α Int α (instHPow.{u2, 0} α Int (DivInvMonoid.Pow.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) g n)) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : α) => β) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) α β (MulOneClass.toMul.{u2} α (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3)))) (MulOneClass.toMul.{u1} β (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4))) (MonoidHom.monoidHomClass.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))))) f (HPow.hPow.{u2, 0, u2} α Int α (instHPow.{u2, 0} α Int (DivInvMonoid.Pow.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) g n)) (HPow.hPow.{u1, 0, u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : α) => β) g) Int ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : α) => β) g) (instHPow.{u1, 0} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : α) => β) g) Int (DivInvMonoid.Pow.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : α) => β) g) (DivisionMonoid.toDivInvMonoid.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : α) => β) g) _inst_4))) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : α) => β) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) α β (MulOneClass.toMul.{u2} α (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3)))) (MulOneClass.toMul.{u1} β (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4))) (MonoidHom.monoidHomClass.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))))) f g) n)
-Case conversion may be inaccurate. Consider using '#align monoid_hom.map_zpow MonoidHom.map_zpowₓ'. -/
 /-- Group homomorphisms preserve integer power. -/
 @[to_additive "Additive group homomorphisms preserve integer scaling."]
 protected theorem map_zpow [Group α] [DivisionMonoid β] (f : α →* β) (g : α) (n : ℤ) :
@@ -2472,12 +1680,6 @@ protected theorem map_zpow [Group α] [DivisionMonoid β] (f : α →* β) (g :
 #align monoid_hom.map_zpow MonoidHom.map_zpow
 #align add_monoid_hom.map_zsmul AddMonoidHom.map_zsmul
 
-/- warning: monoid_hom.map_div -> MonoidHom.map_div is a dubious translation:
-lean 3 declaration is
-  forall {α : Type.{u1}} {β : Type.{u2}} [_inst_3 : Group.{u1} α] [_inst_4 : DivisionMonoid.{u2} β] (f : MonoidHom.{u1, u2} α β (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3))) (Monoid.toMulOneClass.{u2} β (DivInvMonoid.toMonoid.{u2} β (DivisionMonoid.toDivInvMonoid.{u2} β _inst_4)))) (g : α) (h : α), Eq.{succ u2} β (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} α β (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3))) (Monoid.toMulOneClass.{u2} β (DivInvMonoid.toMonoid.{u2} β (DivisionMonoid.toDivInvMonoid.{u2} β _inst_4)))) (fun (_x : MonoidHom.{u1, u2} α β (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3))) (Monoid.toMulOneClass.{u2} β (DivInvMonoid.toMonoid.{u2} β (DivisionMonoid.toDivInvMonoid.{u2} β _inst_4)))) => α -> β) (MonoidHom.hasCoeToFun.{u1, u2} α β (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3))) (Monoid.toMulOneClass.{u2} β (DivInvMonoid.toMonoid.{u2} β (DivisionMonoid.toDivInvMonoid.{u2} β _inst_4)))) f (HDiv.hDiv.{u1, u1, u1} α α α (instHDiv.{u1} α (DivInvMonoid.toHasDiv.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3))) g h)) (HDiv.hDiv.{u2, u2, u2} β β β (instHDiv.{u2} β (DivInvMonoid.toHasDiv.{u2} β (DivisionMonoid.toDivInvMonoid.{u2} β _inst_4))) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} α β (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3))) (Monoid.toMulOneClass.{u2} β (DivInvMonoid.toMonoid.{u2} β (DivisionMonoid.toDivInvMonoid.{u2} β _inst_4)))) (fun (_x : MonoidHom.{u1, u2} α β (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3))) (Monoid.toMulOneClass.{u2} β (DivInvMonoid.toMonoid.{u2} β (DivisionMonoid.toDivInvMonoid.{u2} β _inst_4)))) => α -> β) (MonoidHom.hasCoeToFun.{u1, u2} α β (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3))) (Monoid.toMulOneClass.{u2} β (DivInvMonoid.toMonoid.{u2} β (DivisionMonoid.toDivInvMonoid.{u2} β _inst_4)))) f g) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} α β (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3))) (Monoid.toMulOneClass.{u2} β (DivInvMonoid.toMonoid.{u2} β (DivisionMonoid.toDivInvMonoid.{u2} β _inst_4)))) (fun (_x : MonoidHom.{u1, u2} α β (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3))) (Monoid.toMulOneClass.{u2} β (DivInvMonoid.toMonoid.{u2} β (DivisionMonoid.toDivInvMonoid.{u2} β _inst_4)))) => α -> β) (MonoidHom.hasCoeToFun.{u1, u2} α β (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3))) (Monoid.toMulOneClass.{u2} β (DivInvMonoid.toMonoid.{u2} β (DivisionMonoid.toDivInvMonoid.{u2} β _inst_4)))) f h))
-but is expected to have type
-  forall {α : Type.{u2}} {β : Type.{u1}} [_inst_3 : Group.{u2} α] [_inst_4 : DivisionMonoid.{u1} β] (f : MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) (g : α) (h : α), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : α) => β) (HDiv.hDiv.{u2, u2, u2} α α α (instHDiv.{u2} α (DivInvMonoid.toDiv.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) g h)) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : α) => β) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) α β (MulOneClass.toMul.{u2} α (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3)))) (MulOneClass.toMul.{u1} β (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4))) (MonoidHom.monoidHomClass.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))))) f (HDiv.hDiv.{u2, u2, u2} α α α (instHDiv.{u2} α (DivInvMonoid.toDiv.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) g h)) (HDiv.hDiv.{u1, u1, u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : α) => β) g) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : α) => β) h) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : α) => β) g) (instHDiv.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : α) => β) g) (DivInvMonoid.toDiv.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : α) => β) g) (DivisionMonoid.toDivInvMonoid.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : α) => β) g) _inst_4))) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : α) => β) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) α β (MulOneClass.toMul.{u2} α (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3)))) (MulOneClass.toMul.{u1} β (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4))) (MonoidHom.monoidHomClass.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))))) f g) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : α) => β) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) α β (MulOneClass.toMul.{u2} α (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3)))) (MulOneClass.toMul.{u1} β (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4))) (MonoidHom.monoidHomClass.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))))) f h))
-Case conversion may be inaccurate. Consider using '#align monoid_hom.map_div MonoidHom.map_divₓ'. -/
 /-- Group homomorphisms preserve division. -/
 @[to_additive "Additive group homomorphisms preserve subtraction."]
 protected theorem map_div [Group α] [DivisionMonoid β] (f : α →* β) (g h : α) :
@@ -2486,9 +1688,6 @@ protected theorem map_div [Group α] [DivisionMonoid β] (f : α →* β) (g h :
 #align monoid_hom.map_div MonoidHom.map_div
 #align add_monoid_hom.map_sub AddMonoidHom.map_sub
 
-/- warning: monoid_hom.map_mul_inv -> MonoidHom.map_mul_inv is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align monoid_hom.map_mul_inv MonoidHom.map_mul_invₓ'. -/
 /-- Group homomorphisms preserve division. -/
 @[to_additive "Additive group homomorphisms preserve subtraction."]
 protected theorem map_mul_inv [Group α] [DivisionMonoid β] (f : α →* β) (g h : α) :
@@ -2497,12 +1696,6 @@ protected theorem map_mul_inv [Group α] [DivisionMonoid β] (f : α →* β) (g
 #align monoid_hom.map_mul_inv MonoidHom.map_mul_inv
 #align add_monoid_hom.map_add_neg AddMonoidHom.map_add_neg
 
-/- warning: injective_iff_map_eq_one -> injective_iff_map_eq_one is a dubious translation:
-lean 3 declaration is
-  forall {F : Type.{u1}} {G : Type.{u2}} {H : Type.{u3}} [_inst_3 : Group.{u2} G] [_inst_4 : MulOneClass.{u3} H] [_inst_5 : MonoidHomClass.{u1, u2, u3} F G H (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3))) _inst_4] (f : F), Iff (Function.Injective.{succ u2, succ u3} G H (coeFn.{succ u1, max (succ u2) (succ u3)} F (fun (_x : F) => G -> H) (FunLike.hasCoeToFun.{succ u1, succ u2, succ u3} F G (fun (_x : G) => H) (MulHomClass.toFunLike.{u1, u2, u3} F G H (MulOneClass.toHasMul.{u2} G (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))) (MulOneClass.toHasMul.{u3} H _inst_4) (MonoidHomClass.toMulHomClass.{u1, u2, u3} F G H (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3))) _inst_4 _inst_5))) f)) (forall (a : G), (Eq.{succ u3} H (coeFn.{succ u1, max (succ u2) (succ u3)} F (fun (_x : F) => G -> H) (FunLike.hasCoeToFun.{succ u1, succ u2, succ u3} F G (fun (_x : G) => H) (MulHomClass.toFunLike.{u1, u2, u3} F G H (MulOneClass.toHasMul.{u2} G (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))) (MulOneClass.toHasMul.{u3} H _inst_4) (MonoidHomClass.toMulHomClass.{u1, u2, u3} F G H (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3))) _inst_4 _inst_5))) f a) (OfNat.ofNat.{u3} H 1 (OfNat.mk.{u3} H 1 (One.one.{u3} H (MulOneClass.toHasOne.{u3} H _inst_4))))) -> (Eq.{succ u2} G a (OfNat.ofNat.{u2} G 1 (OfNat.mk.{u2} G 1 (One.one.{u2} G (MulOneClass.toHasOne.{u2} G (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))))))))
-but is expected to have type
-  forall {F : Type.{u1}} {G : Type.{u3}} {H : Type.{u2}} [_inst_3 : Group.{u3} G] [_inst_4 : MulOneClass.{u2} H] [_inst_5 : MonoidHomClass.{u1, u3, u2} F G H (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3))) _inst_4] (f : F), Iff (Function.Injective.{succ u3, succ u2} G H (FunLike.coe.{succ u1, succ u3, succ u2} F G (fun (_x : G) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : G) => H) _x) (MulHomClass.toFunLike.{u1, u3, u2} F G H (MulOneClass.toMul.{u3} G (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3)))) (MulOneClass.toMul.{u2} H _inst_4) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F G H (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3))) _inst_4 _inst_5)) f)) (forall (a : G), (Eq.{succ u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : G) => H) a) (FunLike.coe.{succ u1, succ u3, succ u2} F G (fun (_x : G) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : G) => H) _x) (MulHomClass.toFunLike.{u1, u3, u2} F G H (MulOneClass.toMul.{u3} G (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3)))) (MulOneClass.toMul.{u2} H _inst_4) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F G H (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3))) _inst_4 _inst_5)) f a) (OfNat.ofNat.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : G) => H) a) 1 (One.toOfNat1.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : G) => H) a) (MulOneClass.toOne.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : G) => H) a) _inst_4)))) -> (Eq.{succ u3} G a (OfNat.ofNat.{u3} G 1 (One.toOfNat1.{u3} G (InvOneClass.toOne.{u3} G (DivInvOneMonoid.toInvOneClass.{u3} G (DivisionMonoid.toDivInvOneMonoid.{u3} G (Group.toDivisionMonoid.{u3} G _inst_3))))))))
-Case conversion may be inaccurate. Consider using '#align injective_iff_map_eq_one injective_iff_map_eq_oneₓ'. -/
 /-- A homomorphism from a group to a monoid is injective iff its kernel is trivial.
 For the iff statement on the triviality of the kernel, see `injective_iff_map_eq_one'`.  -/
 @[to_additive
@@ -2514,12 +1707,6 @@ theorem injective_iff_map_eq_one {G H} [Group G] [MulOneClass H] [MonoidHomClass
 #align injective_iff_map_eq_one injective_iff_map_eq_one
 #align injective_iff_map_eq_zero injective_iff_map_eq_zero
 
-/- warning: injective_iff_map_eq_one' -> injective_iff_map_eq_one' is a dubious translation:
-lean 3 declaration is
-  forall {F : Type.{u1}} {G : Type.{u2}} {H : Type.{u3}} [_inst_3 : Group.{u2} G] [_inst_4 : MulOneClass.{u3} H] [_inst_5 : MonoidHomClass.{u1, u2, u3} F G H (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3))) _inst_4] (f : F), Iff (Function.Injective.{succ u2, succ u3} G H (coeFn.{succ u1, max (succ u2) (succ u3)} F (fun (_x : F) => G -> H) (FunLike.hasCoeToFun.{succ u1, succ u2, succ u3} F G (fun (_x : G) => H) (MulHomClass.toFunLike.{u1, u2, u3} F G H (MulOneClass.toHasMul.{u2} G (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))) (MulOneClass.toHasMul.{u3} H _inst_4) (MonoidHomClass.toMulHomClass.{u1, u2, u3} F G H (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3))) _inst_4 _inst_5))) f)) (forall (a : G), Iff (Eq.{succ u3} H (coeFn.{succ u1, max (succ u2) (succ u3)} F (fun (_x : F) => G -> H) (FunLike.hasCoeToFun.{succ u1, succ u2, succ u3} F G (fun (_x : G) => H) (MulHomClass.toFunLike.{u1, u2, u3} F G H (MulOneClass.toHasMul.{u2} G (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))) (MulOneClass.toHasMul.{u3} H _inst_4) (MonoidHomClass.toMulHomClass.{u1, u2, u3} F G H (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3))) _inst_4 _inst_5))) f a) (OfNat.ofNat.{u3} H 1 (OfNat.mk.{u3} H 1 (One.one.{u3} H (MulOneClass.toHasOne.{u3} H _inst_4))))) (Eq.{succ u2} G a (OfNat.ofNat.{u2} G 1 (OfNat.mk.{u2} G 1 (One.one.{u2} G (MulOneClass.toHasOne.{u2} G (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))))))))
-but is expected to have type
-  forall {F : Type.{u1}} {G : Type.{u3}} {H : Type.{u2}} [_inst_3 : Group.{u3} G] [_inst_4 : MulOneClass.{u2} H] [_inst_5 : MonoidHomClass.{u1, u3, u2} F G H (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3))) _inst_4] (f : F), Iff (Function.Injective.{succ u3, succ u2} G H (FunLike.coe.{succ u1, succ u3, succ u2} F G (fun (_x : G) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : G) => H) _x) (MulHomClass.toFunLike.{u1, u3, u2} F G H (MulOneClass.toMul.{u3} G (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3)))) (MulOneClass.toMul.{u2} H _inst_4) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F G H (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3))) _inst_4 _inst_5)) f)) (forall (a : G), Iff (Eq.{succ u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : G) => H) a) (FunLike.coe.{succ u1, succ u3, succ u2} F G (fun (_x : G) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : G) => H) _x) (MulHomClass.toFunLike.{u1, u3, u2} F G H (MulOneClass.toMul.{u3} G (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3)))) (MulOneClass.toMul.{u2} H _inst_4) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F G H (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3))) _inst_4 _inst_5)) f a) (OfNat.ofNat.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : G) => H) a) 1 (One.toOfNat1.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : G) => H) a) (MulOneClass.toOne.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : G) => H) a) _inst_4)))) (Eq.{succ u3} G a (OfNat.ofNat.{u3} G 1 (One.toOfNat1.{u3} G (InvOneClass.toOne.{u3} G (DivInvOneMonoid.toInvOneClass.{u3} G (DivisionMonoid.toDivInvOneMonoid.{u3} G (Group.toDivisionMonoid.{u3} G _inst_3))))))))
-Case conversion may be inaccurate. Consider using '#align injective_iff_map_eq_one' injective_iff_map_eq_one'ₓ'. -/
 /-- A homomorphism from a group to a monoid is injective iff its kernel is trivial,
 stated as an iff on the triviality of the kernel.
 For the implication, see `injective_iff_map_eq_one`. -/
@@ -2534,12 +1721,6 @@ theorem injective_iff_map_eq_one' {G H} [Group G] [MulOneClass H] [MonoidHomClas
 
 include mM
 
-/- warning: monoid_hom.mk' -> MonoidHom.mk' is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} {G : Type.{u2}} [mM : MulOneClass.{u1} M] [_inst_1 : Group.{u2} G] (f : M -> G), (forall (a : M) (b : M), Eq.{succ u2} G (f (HMul.hMul.{u1, u1, u1} M M M (instHMul.{u1} M (MulOneClass.toHasMul.{u1} M mM)) a b)) (HMul.hMul.{u2, u2, u2} G G G (instHMul.{u2} G (MulOneClass.toHasMul.{u2} G (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_1))))) (f a) (f b))) -> (MonoidHom.{u1, u2} M G mM (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_1))))
-but is expected to have type
-  forall {M : Type.{u1}} {G : Type.{u2}} [mM : Group.{u2} G] [_inst_1 : MulOneClass.{u1} M] (f : M -> G), (forall (a : M) (b : M), Eq.{succ u2} G (f (HMul.hMul.{u1, u1, u1} M M M (instHMul.{u1} M (MulOneClass.toMul.{u1} M _inst_1)) a b)) (HMul.hMul.{u2, u2, u2} G G G (instHMul.{u2} G (MulOneClass.toMul.{u2} G (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G mM))))) (f a) (f b))) -> (MonoidHom.{u1, u2} M G _inst_1 (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G mM))))
-Case conversion may be inaccurate. Consider using '#align monoid_hom.mk' MonoidHom.mk'ₓ'. -/
 /-- Makes a group homomorphism from a proof that the map preserves multiplication. -/
 @[to_additive "Makes an additive group homomorphism from a proof that the map preserves addition.",
   simps (config := { fullyApplied := false })]
@@ -2553,12 +1734,6 @@ def mk' (f : M → G) (map_mul : ∀ a b : M, f (a * b) = f a * f b) : M →* G
 
 omit mM
 
-/- warning: monoid_hom.of_map_mul_inv -> MonoidHom.ofMapMulInv is a dubious translation:
-lean 3 declaration is
-  forall {G : Type.{u1}} [_inst_1 : Group.{u1} G] {H : Type.{u2}} [_inst_3 : Group.{u2} H] (f : G -> H), (forall (a : G) (b : G), Eq.{succ u2} H (f (HMul.hMul.{u1, u1, u1} G G G (instHMul.{u1} G (MulOneClass.toHasMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))))) a (Inv.inv.{u1} G (DivInvMonoid.toHasInv.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1)) b))) (HMul.hMul.{u2, u2, u2} H H H (instHMul.{u2} H (MulOneClass.toHasMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_3))))) (f a) (Inv.inv.{u2} H (DivInvMonoid.toHasInv.{u2} H (Group.toDivInvMonoid.{u2} H _inst_3)) (f b)))) -> (MonoidHom.{u1, u2} G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_3))))
-but is expected to have type
-  forall {G : Type.{u1}} [_inst_1 : Group.{u1} G] {H : Type.{u2}} [_inst_3 : Group.{u2} H] (f : G -> H), (forall (a : G) (b : G), Eq.{succ u2} H (f (HMul.hMul.{u1, u1, u1} G G G (instHMul.{u1} G (MulOneClass.toMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))))) a (Inv.inv.{u1} G (InvOneClass.toInv.{u1} G (DivInvOneMonoid.toInvOneClass.{u1} G (DivisionMonoid.toDivInvOneMonoid.{u1} G (Group.toDivisionMonoid.{u1} G _inst_1)))) b))) (HMul.hMul.{u2, u2, u2} H H H (instHMul.{u2} H (MulOneClass.toMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_3))))) (f a) (Inv.inv.{u2} H (InvOneClass.toInv.{u2} H (DivInvOneMonoid.toInvOneClass.{u2} H (DivisionMonoid.toDivInvOneMonoid.{u2} H (Group.toDivisionMonoid.{u2} H _inst_3)))) (f b)))) -> (MonoidHom.{u1, u2} G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_3))))
-Case conversion may be inaccurate. Consider using '#align monoid_hom.of_map_mul_inv MonoidHom.ofMapMulInvₓ'. -/
 /-- Makes a group homomorphism from a proof that the map preserves right division `λ x y, x * y⁻¹`.
 See also `monoid_hom.of_map_div` for a version using `λ x y, x / y`.
 -/
@@ -2575,12 +1750,6 @@ def ofMapMulInv {H : Type _} [Group H] (f : G → H)
 #align monoid_hom.of_map_mul_inv MonoidHom.ofMapMulInv
 #align add_monoid_hom.of_map_add_neg AddMonoidHom.ofMapAddNeg
 
-/- warning: monoid_hom.coe_of_map_mul_inv -> MonoidHom.coe_of_map_mul_inv is a dubious translation:
-lean 3 declaration is
-  forall {G : Type.{u1}} [_inst_1 : Group.{u1} G] {H : Type.{u2}} [_inst_3 : Group.{u2} H] (f : G -> H) (map_div : forall (a : G) (b : G), Eq.{succ u2} H (f (HMul.hMul.{u1, u1, u1} G G G (instHMul.{u1} G (MulOneClass.toHasMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))))) a (Inv.inv.{u1} G (DivInvMonoid.toHasInv.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1)) b))) (HMul.hMul.{u2, u2, u2} H H H (instHMul.{u2} H (MulOneClass.toHasMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_3))))) (f a) (Inv.inv.{u2} H (DivInvMonoid.toHasInv.{u2} H (Group.toDivInvMonoid.{u2} H _inst_3)) (f b)))), Eq.{max (succ u1) (succ u2)} (G -> H) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_3)))) (fun (_x : MonoidHom.{u1, u2} G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_3)))) => G -> H) (MonoidHom.hasCoeToFun.{u1, u2} G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_3)))) (MonoidHom.ofMapMulInv.{u1, u2} G _inst_1 H _inst_3 f map_div)) f
-but is expected to have type
-  forall {G : Type.{u1}} [_inst_1 : Group.{u1} G] {H : Type.{u2}} [_inst_3 : Group.{u2} H] (f : G -> H) (map_div : forall (a : G) (b : G), Eq.{succ u2} H (f (HMul.hMul.{u1, u1, u1} G G G (instHMul.{u1} G (MulOneClass.toMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))))) a (Inv.inv.{u1} G (InvOneClass.toInv.{u1} G (DivInvOneMonoid.toInvOneClass.{u1} G (DivisionMonoid.toDivInvOneMonoid.{u1} G (Group.toDivisionMonoid.{u1} G _inst_1)))) b))) (HMul.hMul.{u2, u2, u2} H H H (instHMul.{u2} H (MulOneClass.toMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_3))))) (f a) (Inv.inv.{u2} H (InvOneClass.toInv.{u2} H (DivInvOneMonoid.toInvOneClass.{u2} H (DivisionMonoid.toDivInvOneMonoid.{u2} H (Group.toDivisionMonoid.{u2} H _inst_3)))) (f b)))), Eq.{max (succ u1) (succ u2)} (G -> H) (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (MonoidHom.{u1, u2} G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_3)))) G (fun (_x : G) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : G) => H) _x) (MulHomClass.toFunLike.{max u1 u2, u1, u2} (MonoidHom.{u1, u2} G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_3)))) G H (MulOneClass.toMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1)))) (MulOneClass.toMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_3)))) (MonoidHomClass.toMulHomClass.{max u1 u2, u1, u2} (MonoidHom.{u1, u2} G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_3)))) G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_3))) (MonoidHom.monoidHomClass.{u1, u2} G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_3)))))) (MonoidHom.ofMapMulInv.{u1, u2} G _inst_1 H _inst_3 f map_div)) f
-Case conversion may be inaccurate. Consider using '#align monoid_hom.coe_of_map_mul_inv MonoidHom.coe_of_map_mul_invₓ'. -/
 @[simp, to_additive]
 theorem coe_of_map_mul_inv {H : Type _} [Group H] (f : G → H)
     (map_div : ∀ a b : G, f (a * b⁻¹) = f a * (f b)⁻¹) : ⇑(ofMapMulInv f map_div) = f :=
@@ -2588,12 +1757,6 @@ theorem coe_of_map_mul_inv {H : Type _} [Group H] (f : G → H)
 #align monoid_hom.coe_of_map_mul_inv MonoidHom.coe_of_map_mul_inv
 #align add_monoid_hom.coe_of_map_add_neg AddMonoidHom.coe_of_map_add_neg
 
-/- warning: monoid_hom.of_map_div -> MonoidHom.ofMapDiv is a dubious translation:
-lean 3 declaration is
-  forall {G : Type.{u1}} [_inst_1 : Group.{u1} G] {H : Type.{u2}} [_inst_3 : Group.{u2} H] (f : G -> H), (forall (x : G) (y : G), Eq.{succ u2} H (f (HDiv.hDiv.{u1, u1, u1} G G G (instHDiv.{u1} G (DivInvMonoid.toHasDiv.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) x y)) (HDiv.hDiv.{u2, u2, u2} H H H (instHDiv.{u2} H (DivInvMonoid.toHasDiv.{u2} H (Group.toDivInvMonoid.{u2} H _inst_3))) (f x) (f y))) -> (MonoidHom.{u1, u2} G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_3))))
-but is expected to have type
-  forall {G : Type.{u1}} [_inst_1 : Group.{u1} G] {H : Type.{u2}} [_inst_3 : Group.{u2} H] (f : G -> H), (forall (x : G) (y : G), Eq.{succ u2} H (f (HDiv.hDiv.{u1, u1, u1} G G G (instHDiv.{u1} G (DivInvMonoid.toDiv.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) x y)) (HDiv.hDiv.{u2, u2, u2} H H H (instHDiv.{u2} H (DivInvMonoid.toDiv.{u2} H (Group.toDivInvMonoid.{u2} H _inst_3))) (f x) (f y))) -> (MonoidHom.{u1, u2} G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_3))))
-Case conversion may be inaccurate. Consider using '#align monoid_hom.of_map_div MonoidHom.ofMapDivₓ'. -/
 /-- Define a morphism of additive groups given a map which respects ratios. -/
 @[to_additive "Define a morphism of additive groups given a map which respects difference."]
 def ofMapDiv {H : Type _} [Group H] (f : G → H) (hf : ∀ x y, f (x / y) = f x / f y) : G →* H :=
@@ -2601,12 +1764,6 @@ def ofMapDiv {H : Type _} [Group H] (f : G → H) (hf : ∀ x y, f (x / y) = f x
 #align monoid_hom.of_map_div MonoidHom.ofMapDiv
 #align add_monoid_hom.of_map_sub AddMonoidHom.ofMapSub
 
-/- warning: monoid_hom.coe_of_map_div -> MonoidHom.coe_of_map_div is a dubious translation:
-lean 3 declaration is
-  forall {G : Type.{u1}} [_inst_1 : Group.{u1} G] {H : Type.{u2}} [_inst_3 : Group.{u2} H] (f : G -> H) (hf : forall (x : G) (y : G), Eq.{succ u2} H (f (HDiv.hDiv.{u1, u1, u1} G G G (instHDiv.{u1} G (DivInvMonoid.toHasDiv.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) x y)) (HDiv.hDiv.{u2, u2, u2} H H H (instHDiv.{u2} H (DivInvMonoid.toHasDiv.{u2} H (Group.toDivInvMonoid.{u2} H _inst_3))) (f x) (f y))), Eq.{max (succ u1) (succ u2)} (G -> H) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_3)))) (fun (_x : MonoidHom.{u1, u2} G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_3)))) => G -> H) (MonoidHom.hasCoeToFun.{u1, u2} G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_3)))) (MonoidHom.ofMapDiv.{u1, u2} G _inst_1 H _inst_3 f hf)) f
-but is expected to have type
-  forall {G : Type.{u1}} [_inst_1 : Group.{u1} G] {H : Type.{u2}} [_inst_3 : Group.{u2} H] (f : G -> H) (hf : forall (x : G) (y : G), Eq.{succ u2} H (f (HDiv.hDiv.{u1, u1, u1} G G G (instHDiv.{u1} G (DivInvMonoid.toDiv.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) x y)) (HDiv.hDiv.{u2, u2, u2} H H H (instHDiv.{u2} H (DivInvMonoid.toDiv.{u2} H (Group.toDivInvMonoid.{u2} H _inst_3))) (f x) (f y))), Eq.{max (succ u1) (succ u2)} (G -> H) (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (MonoidHom.{u1, u2} G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_3)))) G (fun (_x : G) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : G) => H) _x) (MulHomClass.toFunLike.{max u1 u2, u1, u2} (MonoidHom.{u1, u2} G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_3)))) G H (MulOneClass.toMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1)))) (MulOneClass.toMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_3)))) (MonoidHomClass.toMulHomClass.{max u1 u2, u1, u2} (MonoidHom.{u1, u2} G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_3)))) G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_3))) (MonoidHom.monoidHomClass.{u1, u2} G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_3)))))) (MonoidHom.ofMapDiv.{u1, u2} G _inst_1 H _inst_3 f hf)) f
-Case conversion may be inaccurate. Consider using '#align monoid_hom.coe_of_map_div MonoidHom.coe_of_map_divₓ'. -/
 @[simp, to_additive]
 theorem coe_of_map_div {H : Type _} [Group H] (f : G → H) (hf : ∀ x y, f (x / y) = f x / f y) :
     ⇑(ofMapDiv f hf) = f :=
@@ -2624,12 +1781,6 @@ instance {M G} [MulOneClass M] [CommGroup G] : Inv (M →* G) :=
 homomorphism sending `x` to `-(f x)`. -/
 add_decl_doc AddMonoidHom.hasNeg
 
-/- warning: monoid_hom.inv_apply -> MonoidHom.inv_apply is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} {G : Type.{u2}} {mM : MulOneClass.{u1} M} {gG : CommGroup.{u2} G} (f : MonoidHom.{u1, u2} M G mM (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G (CommGroup.toGroup.{u2} G gG))))) (x : M), Eq.{succ u2} G (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} M G mM (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G (CommGroup.toGroup.{u2} G gG))))) (fun (_x : MonoidHom.{u1, u2} M G mM (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G (CommGroup.toGroup.{u2} G gG))))) => M -> G) (MonoidHom.hasCoeToFun.{u1, u2} M G mM (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G (CommGroup.toGroup.{u2} G gG))))) (Inv.inv.{max u2 u1} (MonoidHom.{u1, u2} M G mM (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G (CommGroup.toGroup.{u2} G gG))))) (MonoidHom.hasInv.{u1, u2} M G mM gG) f) x) (Inv.inv.{u2} G (DivInvMonoid.toHasInv.{u2} G (Group.toDivInvMonoid.{u2} G (CommGroup.toGroup.{u2} G gG))) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} M G mM (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G (CommGroup.toGroup.{u2} G gG))))) (fun (_x : MonoidHom.{u1, u2} M G mM (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G (CommGroup.toGroup.{u2} G gG))))) => M -> G) (MonoidHom.hasCoeToFun.{u1, u2} M G mM (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G (CommGroup.toGroup.{u2} G gG))))) f x))
-but is expected to have type
-  forall {M : Type.{u2}} {G : Type.{u1}} [mM : MulOneClass.{u2} M] [gG : CommGroup.{u1} G] (f : MonoidHom.{u2, u1} M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))) (x : M), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => G) x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => G) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))) M G (MulOneClass.toMul.{u2} M mM) (MulOneClass.toMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))) M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG)))) (MonoidHom.monoidHomClass.{u2, u1} M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))))) (Inv.inv.{max u2 u1} (MonoidHom.{u2, u1} M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))) (MonoidHom.instInvMonoidHomToMulOneClassToMonoidToDivInvMonoidToGroup.{u2, u1} M G mM gG) f) x) (Inv.inv.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => G) x) (InvOneClass.toInv.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => G) x) (DivInvOneMonoid.toInvOneClass.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => G) x) (DivisionMonoid.toDivInvOneMonoid.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => G) x) (DivisionCommMonoid.toDivisionMonoid.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => G) x) (CommGroup.toDivisionCommMonoid.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => G) x) gG))))) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => G) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))) M G (MulOneClass.toMul.{u2} M mM) (MulOneClass.toMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))) M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG)))) (MonoidHom.monoidHomClass.{u2, u1} M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))))) f x))
-Case conversion may be inaccurate. Consider using '#align monoid_hom.inv_apply MonoidHom.inv_applyₓ'. -/
 @[simp, to_additive]
 theorem inv_apply {M G} {mM : MulOneClass M} {gG : CommGroup G} (f : M →* G) (x : M) :
     f⁻¹ x = (f x)⁻¹ :=
@@ -2637,12 +1788,6 @@ theorem inv_apply {M G} {mM : MulOneClass M} {gG : CommGroup G} (f : M →* G) (
 #align monoid_hom.inv_apply MonoidHom.inv_apply
 #align add_monoid_hom.neg_apply AddMonoidHom.neg_apply
 
-/- warning: monoid_hom.inv_comp -> MonoidHom.inv_comp is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} {N : Type.{u2}} {A : Type.{u3}} {mM : MulOneClass.{u1} M} {gN : MulOneClass.{u2} N} {gA : CommGroup.{u3} A} (φ : MonoidHom.{u2, u3} N A gN (Monoid.toMulOneClass.{u3} A (DivInvMonoid.toMonoid.{u3} A (Group.toDivInvMonoid.{u3} A (CommGroup.toGroup.{u3} A gA))))) (ψ : MonoidHom.{u1, u2} M N mM gN), Eq.{max (succ u3) (succ u1)} (MonoidHom.{u1, u3} M A mM (Monoid.toMulOneClass.{u3} A (DivInvMonoid.toMonoid.{u3} A (Group.toDivInvMonoid.{u3} A (CommGroup.toGroup.{u3} A gA))))) (MonoidHom.comp.{u1, u2, u3} M N A mM gN (Monoid.toMulOneClass.{u3} A (DivInvMonoid.toMonoid.{u3} A (Group.toDivInvMonoid.{u3} A (CommGroup.toGroup.{u3} A gA)))) (Inv.inv.{max u3 u2} (MonoidHom.{u2, u3} N A gN (Monoid.toMulOneClass.{u3} A (DivInvMonoid.toMonoid.{u3} A (Group.toDivInvMonoid.{u3} A (CommGroup.toGroup.{u3} A gA))))) (MonoidHom.hasInv.{u2, u3} N A gN gA) φ) ψ) (Inv.inv.{max u3 u1} (MonoidHom.{u1, u3} M A mM (Monoid.toMulOneClass.{u3} A (DivInvMonoid.toMonoid.{u3} A (Group.toDivInvMonoid.{u3} A (CommGroup.toGroup.{u3} A gA))))) (MonoidHom.hasInv.{u1, u3} M A mM gA) (MonoidHom.comp.{u1, u2, u3} M N A mM gN (Monoid.toMulOneClass.{u3} A (DivInvMonoid.toMonoid.{u3} A (Group.toDivInvMonoid.{u3} A (CommGroup.toGroup.{u3} A gA)))) φ ψ))
-but is expected to have type
-  forall {M : Type.{u3}} {N : Type.{u2}} {A : Type.{u1}} [mM : MulOneClass.{u3} M] [gN : MulOneClass.{u2} N] [gA : CommGroup.{u1} A] (φ : MonoidHom.{u2, u1} N A gN (Monoid.toMulOneClass.{u1} A (DivInvMonoid.toMonoid.{u1} A (Group.toDivInvMonoid.{u1} A (CommGroup.toGroup.{u1} A gA))))) (ψ : MonoidHom.{u3, u2} M N mM gN), Eq.{max (succ u3) (succ u1)} (MonoidHom.{u3, u1} M A mM (Monoid.toMulOneClass.{u1} A (DivInvMonoid.toMonoid.{u1} A (Group.toDivInvMonoid.{u1} A (CommGroup.toGroup.{u1} A gA))))) (MonoidHom.comp.{u3, u2, u1} M N A mM gN (Monoid.toMulOneClass.{u1} A (DivInvMonoid.toMonoid.{u1} A (Group.toDivInvMonoid.{u1} A (CommGroup.toGroup.{u1} A gA)))) (Inv.inv.{max u2 u1} (MonoidHom.{u2, u1} N A gN (Monoid.toMulOneClass.{u1} A (DivInvMonoid.toMonoid.{u1} A (Group.toDivInvMonoid.{u1} A (CommGroup.toGroup.{u1} A gA))))) (MonoidHom.instInvMonoidHomToMulOneClassToMonoidToDivInvMonoidToGroup.{u2, u1} N A gN gA) φ) ψ) (Inv.inv.{max u1 u3} (MonoidHom.{u3, u1} M A mM (Monoid.toMulOneClass.{u1} A (DivInvMonoid.toMonoid.{u1} A (Group.toDivInvMonoid.{u1} A (CommGroup.toGroup.{u1} A gA))))) (MonoidHom.instInvMonoidHomToMulOneClassToMonoidToDivInvMonoidToGroup.{u3, u1} M A mM gA) (MonoidHom.comp.{u3, u2, u1} M N A mM gN (Monoid.toMulOneClass.{u1} A (DivInvMonoid.toMonoid.{u1} A (Group.toDivInvMonoid.{u1} A (CommGroup.toGroup.{u1} A gA)))) φ ψ))
-Case conversion may be inaccurate. Consider using '#align monoid_hom.inv_comp MonoidHom.inv_compₓ'. -/
 @[simp, to_additive]
 theorem inv_comp {M N A} {mM : MulOneClass M} {gN : MulOneClass N} {gA : CommGroup A} (φ : N →* A)
     (ψ : M →* N) : φ⁻¹.comp ψ = (φ.comp ψ)⁻¹ := by ext;
@@ -2650,12 +1795,6 @@ theorem inv_comp {M N A} {mM : MulOneClass M} {gN : MulOneClass N} {gA : CommGro
 #align monoid_hom.inv_comp MonoidHom.inv_comp
 #align add_monoid_hom.neg_comp AddMonoidHom.neg_comp
 
-/- warning: monoid_hom.comp_inv -> MonoidHom.comp_inv is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} {A : Type.{u2}} {B : Type.{u3}} {mM : MulOneClass.{u1} M} {mA : CommGroup.{u2} A} {mB : CommGroup.{u3} B} (φ : MonoidHom.{u2, u3} A B (Monoid.toMulOneClass.{u2} A (DivInvMonoid.toMonoid.{u2} A (Group.toDivInvMonoid.{u2} A (CommGroup.toGroup.{u2} A mA)))) (Monoid.toMulOneClass.{u3} B (DivInvMonoid.toMonoid.{u3} B (Group.toDivInvMonoid.{u3} B (CommGroup.toGroup.{u3} B mB))))) (ψ : MonoidHom.{u1, u2} M A mM (Monoid.toMulOneClass.{u2} A (DivInvMonoid.toMonoid.{u2} A (Group.toDivInvMonoid.{u2} A (CommGroup.toGroup.{u2} A mA))))), Eq.{max (succ u3) (succ u1)} (MonoidHom.{u1, u3} M B mM (Monoid.toMulOneClass.{u3} B (DivInvMonoid.toMonoid.{u3} B (Group.toDivInvMonoid.{u3} B (CommGroup.toGroup.{u3} B mB))))) (MonoidHom.comp.{u1, u2, u3} M A B mM (Monoid.toMulOneClass.{u2} A (DivInvMonoid.toMonoid.{u2} A (Group.toDivInvMonoid.{u2} A (CommGroup.toGroup.{u2} A mA)))) (Monoid.toMulOneClass.{u3} B (DivInvMonoid.toMonoid.{u3} B (Group.toDivInvMonoid.{u3} B (CommGroup.toGroup.{u3} B mB)))) φ (Inv.inv.{max u2 u1} (MonoidHom.{u1, u2} M A mM (Monoid.toMulOneClass.{u2} A (DivInvMonoid.toMonoid.{u2} A (Group.toDivInvMonoid.{u2} A (CommGroup.toGroup.{u2} A mA))))) (MonoidHom.hasInv.{u1, u2} M A mM mA) ψ)) (Inv.inv.{max u3 u1} (MonoidHom.{u1, u3} M B mM (Monoid.toMulOneClass.{u3} B (DivInvMonoid.toMonoid.{u3} B (Group.toDivInvMonoid.{u3} B (CommGroup.toGroup.{u3} B mB))))) (MonoidHom.hasInv.{u1, u3} M B mM mB) (MonoidHom.comp.{u1, u2, u3} M A B mM (Monoid.toMulOneClass.{u2} A (DivInvMonoid.toMonoid.{u2} A (Group.toDivInvMonoid.{u2} A (CommGroup.toGroup.{u2} A mA)))) (Monoid.toMulOneClass.{u3} B (DivInvMonoid.toMonoid.{u3} B (Group.toDivInvMonoid.{u3} B (CommGroup.toGroup.{u3} B mB)))) φ ψ))
-but is expected to have type
-  forall {M : Type.{u3}} {A : Type.{u2}} {B : Type.{u1}} [mM : MulOneClass.{u3} M] [mA : CommGroup.{u2} A] [mB : CommGroup.{u1} B] (φ : MonoidHom.{u2, u1} A B (Monoid.toMulOneClass.{u2} A (DivInvMonoid.toMonoid.{u2} A (Group.toDivInvMonoid.{u2} A (CommGroup.toGroup.{u2} A mA)))) (Monoid.toMulOneClass.{u1} B (DivInvMonoid.toMonoid.{u1} B (Group.toDivInvMonoid.{u1} B (CommGroup.toGroup.{u1} B mB))))) (ψ : MonoidHom.{u3, u2} M A mM (Monoid.toMulOneClass.{u2} A (DivInvMonoid.toMonoid.{u2} A (Group.toDivInvMonoid.{u2} A (CommGroup.toGroup.{u2} A mA))))), Eq.{max (succ u3) (succ u1)} (MonoidHom.{u3, u1} M B mM (Monoid.toMulOneClass.{u1} B (DivInvMonoid.toMonoid.{u1} B (Group.toDivInvMonoid.{u1} B (CommGroup.toGroup.{u1} B mB))))) (MonoidHom.comp.{u3, u2, u1} M A B mM (Monoid.toMulOneClass.{u2} A (DivInvMonoid.toMonoid.{u2} A (Group.toDivInvMonoid.{u2} A (CommGroup.toGroup.{u2} A mA)))) (Monoid.toMulOneClass.{u1} B (DivInvMonoid.toMonoid.{u1} B (Group.toDivInvMonoid.{u1} B (CommGroup.toGroup.{u1} B mB)))) φ (Inv.inv.{max u2 u3} (MonoidHom.{u3, u2} M A mM (Monoid.toMulOneClass.{u2} A (DivInvMonoid.toMonoid.{u2} A (Group.toDivInvMonoid.{u2} A (CommGroup.toGroup.{u2} A mA))))) (MonoidHom.instInvMonoidHomToMulOneClassToMonoidToDivInvMonoidToGroup.{u3, u2} M A mM mA) ψ)) (Inv.inv.{max u1 u3} (MonoidHom.{u3, u1} M B mM (Monoid.toMulOneClass.{u1} B (DivInvMonoid.toMonoid.{u1} B (Group.toDivInvMonoid.{u1} B (CommGroup.toGroup.{u1} B mB))))) (MonoidHom.instInvMonoidHomToMulOneClassToMonoidToDivInvMonoidToGroup.{u3, u1} M B mM mB) (MonoidHom.comp.{u3, u2, u1} M A B mM (Monoid.toMulOneClass.{u2} A (DivInvMonoid.toMonoid.{u2} A (Group.toDivInvMonoid.{u2} A (CommGroup.toGroup.{u2} A mA)))) (Monoid.toMulOneClass.{u1} B (DivInvMonoid.toMonoid.{u1} B (Group.toDivInvMonoid.{u1} B (CommGroup.toGroup.{u1} B mB)))) φ ψ))
-Case conversion may be inaccurate. Consider using '#align monoid_hom.comp_inv MonoidHom.comp_invₓ'. -/
 @[simp, to_additive]
 theorem comp_inv {M A B} {mM : MulOneClass M} {mA : CommGroup A} {mB : CommGroup B} (φ : A →* B)
     (ψ : M →* A) : φ.comp ψ⁻¹ = (φ.comp ψ)⁻¹ := by ext;
@@ -2675,12 +1814,6 @@ instance {M G} [MulOneClass M] [CommGroup G] : Div (M →* G) :=
 is the homomorphism sending `x` to `(f x) - (g x)`. -/
 add_decl_doc AddMonoidHom.hasSub
 
-/- warning: monoid_hom.div_apply -> MonoidHom.div_apply is a dubious translation:
-lean 3 declaration is
-  forall {M : Type.{u1}} {G : Type.{u2}} {mM : MulOneClass.{u1} M} {gG : CommGroup.{u2} G} (f : MonoidHom.{u1, u2} M G mM (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G (CommGroup.toGroup.{u2} G gG))))) (g : MonoidHom.{u1, u2} M G mM (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G (CommGroup.toGroup.{u2} G gG))))) (x : M), Eq.{succ u2} G (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} M G mM (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G (CommGroup.toGroup.{u2} G gG))))) (fun (_x : MonoidHom.{u1, u2} M G mM (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G (CommGroup.toGroup.{u2} G gG))))) => M -> G) (MonoidHom.hasCoeToFun.{u1, u2} M G mM (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G (CommGroup.toGroup.{u2} G gG))))) (HDiv.hDiv.{max u2 u1, max u2 u1, max u2 u1} (MonoidHom.{u1, u2} M G mM (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G (CommGroup.toGroup.{u2} G gG))))) (MonoidHom.{u1, u2} M G mM (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G (CommGroup.toGroup.{u2} G gG))))) (MonoidHom.{u1, u2} M G mM (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G (CommGroup.toGroup.{u2} G gG))))) (instHDiv.{max u2 u1} (MonoidHom.{u1, u2} M G mM (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G (CommGroup.toGroup.{u2} G gG))))) (MonoidHom.hasDiv.{u1, u2} M G mM gG)) f g) x) (HDiv.hDiv.{u2, u2, u2} G G G (instHDiv.{u2} G (DivInvMonoid.toHasDiv.{u2} G (Group.toDivInvMonoid.{u2} G (CommGroup.toGroup.{u2} G gG)))) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} M G mM (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G (CommGroup.toGroup.{u2} G gG))))) (fun (_x : MonoidHom.{u1, u2} M G mM (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G (CommGroup.toGroup.{u2} G gG))))) => M -> G) (MonoidHom.hasCoeToFun.{u1, u2} M G mM (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G (CommGroup.toGroup.{u2} G gG))))) f x) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} M G mM (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G (CommGroup.toGroup.{u2} G gG))))) (fun (_x : MonoidHom.{u1, u2} M G mM (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G (CommGroup.toGroup.{u2} G gG))))) => M -> G) (MonoidHom.hasCoeToFun.{u1, u2} M G mM (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G (CommGroup.toGroup.{u2} G gG))))) g x))
-but is expected to have type
-  forall {M : Type.{u2}} {G : Type.{u1}} [mM : MulOneClass.{u2} M] [gG : CommGroup.{u1} G] (f : MonoidHom.{u2, u1} M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))) (g : MonoidHom.{u2, u1} M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))) (x : M), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => G) x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => G) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))) M G (MulOneClass.toMul.{u2} M mM) (MulOneClass.toMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))) M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG)))) (MonoidHom.monoidHomClass.{u2, u1} M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))))) (HDiv.hDiv.{max u2 u1, max u2 u1, max u2 u1} (MonoidHom.{u2, u1} M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))) (MonoidHom.{u2, u1} M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))) (MonoidHom.{u2, u1} M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))) (instHDiv.{max u2 u1} (MonoidHom.{u2, u1} M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))) (MonoidHom.instDivMonoidHomToMulOneClassToMonoidToDivInvMonoidToGroup.{u2, u1} M G mM gG)) f g) x) (HDiv.hDiv.{u1, u1, u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => G) x) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => G) x) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => G) x) (instHDiv.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => G) x) (DivInvMonoid.toDiv.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => G) x) (Group.toDivInvMonoid.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => G) x) (CommGroup.toGroup.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => G) x) gG)))) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => G) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))) M G (MulOneClass.toMul.{u2} M mM) (MulOneClass.toMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))) M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG)))) (MonoidHom.monoidHomClass.{u2, u1} M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))))) f x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => G) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))) M G (MulOneClass.toMul.{u2} M mM) (MulOneClass.toMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))) M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG)))) (MonoidHom.monoidHomClass.{u2, u1} M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))))) g x))
-Case conversion may be inaccurate. Consider using '#align monoid_hom.div_apply MonoidHom.div_applyₓ'. -/
 @[simp, to_additive]
 theorem div_apply {M G} {mM : MulOneClass M} {gG : CommGroup G} (f g : M →* G) (x : M) :
     (f / g) x = f x / g x :=
Diff
@@ -129,9 +129,7 @@ but is expected to have type
 Case conversion may be inaccurate. Consider using '#align ne_zero.of_injective NeZero.of_injectiveₓ'. -/
 theorem of_injective {R M} [Zero R] {r : R} [NeZero r] [Zero M] [ZeroHomClass F R M] {f : F}
     (hf : Function.Injective f) : NeZero (f r) :=
-  ⟨by
-    rw [← ZeroHomClass.map_zero f]
-    exact hf.ne (Ne r)⟩
+  ⟨by rw [← ZeroHomClass.map_zero f]; exact hf.ne (Ne r)⟩
 #align ne_zero.of_injective NeZero.of_injective
 
 end NeZero
@@ -2284,10 +2282,8 @@ but is expected to have type
   forall {M : Type.{u3}} {N : Type.{u2}} {P : Type.{u1}} [_inst_1 : One.{u3} M] [_inst_2 : One.{u2} N] [_inst_3 : One.{u1} P] (f : OneHom.{u2, u1} N P _inst_2 _inst_3), Eq.{max (succ u3) (succ u1)} (OneHom.{u3, u1} M P _inst_1 _inst_3) (OneHom.comp.{u3, u2, u1} M N P _inst_1 _inst_2 _inst_3 f (OfNat.ofNat.{max u3 u2} (OneHom.{u3, u2} M N _inst_1 _inst_2) 1 (One.toOfNat1.{max u3 u2} (OneHom.{u3, u2} M N _inst_1 _inst_2) (instOneOneHom.{u3, u2} M N _inst_1 _inst_2)))) (OfNat.ofNat.{max u3 u1} (OneHom.{u3, u1} M P _inst_1 _inst_3) 1 (One.toOfNat1.{max u3 u1} (OneHom.{u3, u1} M P _inst_1 _inst_3) (instOneOneHom.{u3, u1} M P _inst_1 _inst_3)))
 Case conversion may be inaccurate. Consider using '#align one_hom.comp_one OneHom.comp_oneₓ'. -/
 @[simp, to_additive]
-theorem OneHom.comp_one [One M] [One N] [One P] (f : OneHom N P) : f.comp (1 : OneHom M N) = 1 :=
-  by
-  ext
-  simp only [OneHom.map_one, OneHom.coe_comp, Function.comp_apply, OneHom.one_apply]
+theorem OneHom.comp_one [One M] [One N] [One P] (f : OneHom N P) : f.comp (1 : OneHom M N) = 1 := by
+  ext; simp only [OneHom.map_one, OneHom.coe_comp, Function.comp_apply, OneHom.one_apply]
 #align one_hom.comp_one OneHom.comp_one
 #align zero_hom.comp_zero ZeroHom.comp_zero
 
@@ -2357,8 +2353,7 @@ but is expected to have type
 Case conversion may be inaccurate. Consider using '#align mul_hom.comp_mul MulHom.comp_mulₓ'. -/
 @[to_additive]
 theorem comp_mul [Mul M] [CommSemigroup N] [CommSemigroup P] (g : N →ₙ* P) (f₁ f₂ : M →ₙ* N) :
-    g.comp (f₁ * f₂) = g.comp f₁ * g.comp f₂ := by
-  ext
+    g.comp (f₁ * f₂) = g.comp f₁ * g.comp f₂ := by ext;
   simp only [mul_apply, Function.comp_apply, map_mul, coe_comp]
 #align mul_hom.comp_mul MulHom.comp_mul
 #align add_hom.comp_add AddHom.comp_add
@@ -2420,9 +2415,7 @@ but is expected to have type
 Case conversion may be inaccurate. Consider using '#align monoid_hom.comp_one MonoidHom.comp_oneₓ'. -/
 @[simp, to_additive]
 theorem comp_one [MulOneClass M] [MulOneClass N] [MulOneClass P] (f : N →* P) :
-    f.comp (1 : M →* N) = 1 := by
-  ext
-  simp only [map_one, coe_comp, Function.comp_apply, one_apply]
+    f.comp (1 : M →* N) = 1 := by ext; simp only [map_one, coe_comp, Function.comp_apply, one_apply]
 #align monoid_hom.comp_one MonoidHom.comp_one
 #align add_monoid_hom.comp_zero AddMonoidHom.comp_zero
 
@@ -2447,8 +2440,7 @@ but is expected to have type
 Case conversion may be inaccurate. Consider using '#align monoid_hom.comp_mul MonoidHom.comp_mulₓ'. -/
 @[to_additive]
 theorem comp_mul [MulOneClass M] [CommMonoid N] [CommMonoid P] (g : N →* P) (f₁ f₂ : M →* N) :
-    g.comp (f₁ * f₂) = g.comp f₁ * g.comp f₂ := by
-  ext
+    g.comp (f₁ * f₂) = g.comp f₁ * g.comp f₂ := by ext;
   simp only [mul_apply, Function.comp_apply, map_mul, coe_comp]
 #align monoid_hom.comp_mul MonoidHom.comp_mul
 #align add_monoid_hom.comp_add AddMonoidHom.comp_add
@@ -2578,9 +2570,7 @@ def ofMapMulInv {H : Type _} [Group H] (f : G → H)
     calc
       f (x * y) = f x * (f <| 1 * 1⁻¹ * y⁻¹)⁻¹ := by
         simp only [one_mul, inv_one, ← map_div, inv_inv]
-      _ = f x * f y := by
-        simp only [map_div]
-        simp only [mul_right_inv, one_mul, inv_inv]
+      _ = f x * f y := by simp only [map_div]; simp only [mul_right_inv, one_mul, inv_inv]
       
 #align monoid_hom.of_map_mul_inv MonoidHom.ofMapMulInv
 #align add_monoid_hom.of_map_add_neg AddMonoidHom.ofMapAddNeg
@@ -2655,8 +2645,7 @@ but is expected to have type
 Case conversion may be inaccurate. Consider using '#align monoid_hom.inv_comp MonoidHom.inv_compₓ'. -/
 @[simp, to_additive]
 theorem inv_comp {M N A} {mM : MulOneClass M} {gN : MulOneClass N} {gA : CommGroup A} (φ : N →* A)
-    (ψ : M →* N) : φ⁻¹.comp ψ = (φ.comp ψ)⁻¹ := by
-  ext
+    (ψ : M →* N) : φ⁻¹.comp ψ = (φ.comp ψ)⁻¹ := by ext;
   simp only [Function.comp_apply, inv_apply, coe_comp]
 #align monoid_hom.inv_comp MonoidHom.inv_comp
 #align add_monoid_hom.neg_comp AddMonoidHom.neg_comp
@@ -2669,8 +2658,7 @@ but is expected to have type
 Case conversion may be inaccurate. Consider using '#align monoid_hom.comp_inv MonoidHom.comp_invₓ'. -/
 @[simp, to_additive]
 theorem comp_inv {M A B} {mM : MulOneClass M} {mA : CommGroup A} {mB : CommGroup B} (φ : A →* B)
-    (ψ : M →* A) : φ.comp ψ⁻¹ = (φ.comp ψ)⁻¹ := by
-  ext
+    (ψ : M →* A) : φ.comp ψ⁻¹ = (φ.comp ψ)⁻¹ := by ext;
   simp only [Function.comp_apply, inv_apply, map_inv, coe_comp]
 #align monoid_hom.comp_inv MonoidHom.comp_inv
 #align add_monoid_hom.comp_neg AddMonoidHom.comp_neg
Diff
@@ -2495,10 +2495,7 @@ protected theorem map_div [Group α] [DivisionMonoid β] (f : α →* β) (g h :
 #align add_monoid_hom.map_sub AddMonoidHom.map_sub
 
 /- warning: monoid_hom.map_mul_inv -> MonoidHom.map_mul_inv is a dubious translation:
-lean 3 declaration is
-  forall {α : Type.{u1}} {β : Type.{u2}} [_inst_3 : Group.{u1} α] [_inst_4 : DivisionMonoid.{u2} β] (f : MonoidHom.{u1, u2} α β (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3))) (Monoid.toMulOneClass.{u2} β (DivInvMonoid.toMonoid.{u2} β (DivisionMonoid.toDivInvMonoid.{u2} β _inst_4)))) (g : α) (h : α), Eq.{succ u2} β (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} α β (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3))) (Monoid.toMulOneClass.{u2} β (DivInvMonoid.toMonoid.{u2} β (DivisionMonoid.toDivInvMonoid.{u2} β _inst_4)))) (fun (_x : MonoidHom.{u1, u2} α β (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3))) (Monoid.toMulOneClass.{u2} β (DivInvMonoid.toMonoid.{u2} β (DivisionMonoid.toDivInvMonoid.{u2} β _inst_4)))) => α -> β) (MonoidHom.hasCoeToFun.{u1, u2} α β (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3))) (Monoid.toMulOneClass.{u2} β (DivInvMonoid.toMonoid.{u2} β (DivisionMonoid.toDivInvMonoid.{u2} β _inst_4)))) f (HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toHasMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3))))) g (Inv.inv.{u1} α (DivInvMonoid.toHasInv.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3)) h))) (HMul.hMul.{u2, u2, u2} β β β (instHMul.{u2} β (MulOneClass.toHasMul.{u2} β (Monoid.toMulOneClass.{u2} β (DivInvMonoid.toMonoid.{u2} β (DivisionMonoid.toDivInvMonoid.{u2} β _inst_4))))) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} α β (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3))) (Monoid.toMulOneClass.{u2} β (DivInvMonoid.toMonoid.{u2} β (DivisionMonoid.toDivInvMonoid.{u2} β _inst_4)))) (fun (_x : MonoidHom.{u1, u2} α β (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3))) (Monoid.toMulOneClass.{u2} β (DivInvMonoid.toMonoid.{u2} β (DivisionMonoid.toDivInvMonoid.{u2} β _inst_4)))) => α -> β) (MonoidHom.hasCoeToFun.{u1, u2} α β (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3))) (Monoid.toMulOneClass.{u2} β (DivInvMonoid.toMonoid.{u2} β (DivisionMonoid.toDivInvMonoid.{u2} β _inst_4)))) f g) (Inv.inv.{u2} β (DivInvMonoid.toHasInv.{u2} β (DivisionMonoid.toDivInvMonoid.{u2} β _inst_4)) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} α β (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3))) (Monoid.toMulOneClass.{u2} β (DivInvMonoid.toMonoid.{u2} β (DivisionMonoid.toDivInvMonoid.{u2} β _inst_4)))) (fun (_x : MonoidHom.{u1, u2} α β (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3))) (Monoid.toMulOneClass.{u2} β (DivInvMonoid.toMonoid.{u2} β (DivisionMonoid.toDivInvMonoid.{u2} β _inst_4)))) => α -> β) (MonoidHom.hasCoeToFun.{u1, u2} α β (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3))) (Monoid.toMulOneClass.{u2} β (DivInvMonoid.toMonoid.{u2} β (DivisionMonoid.toDivInvMonoid.{u2} β _inst_4)))) f h)))
-but is expected to have type
-  forall {α : Type.{u2}} {β : Type.{u1}} [_inst_3 : Group.{u2} α] [_inst_4 : DivisionMonoid.{u1} β] (f : MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) (g : α) (h : α), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : α) => β) (HMul.hMul.{u2, u2, u2} α α α (instHMul.{u2} α (MulOneClass.toMul.{u2} α (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))))) g (Inv.inv.{u2} α (InvOneClass.toInv.{u2} α (DivInvOneMonoid.toInvOneClass.{u2} α (DivisionMonoid.toDivInvOneMonoid.{u2} α (Group.toDivisionMonoid.{u2} α _inst_3)))) h))) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : α) => β) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) α β (MulOneClass.toMul.{u2} α (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3)))) (MulOneClass.toMul.{u1} β (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4))) (MonoidHom.monoidHomClass.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))))) f (HMul.hMul.{u2, u2, u2} α α α (instHMul.{u2} α (MulOneClass.toMul.{u2} α (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))))) g (Inv.inv.{u2} α (InvOneClass.toInv.{u2} α (DivInvOneMonoid.toInvOneClass.{u2} α (DivisionMonoid.toDivInvOneMonoid.{u2} α (Group.toDivisionMonoid.{u2} α _inst_3)))) h))) (HMul.hMul.{u1, u1, u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : α) => β) g) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : α) => β) h) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : α) => β) g) (instHMul.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : α) => β) g) (MulOneClass.toMul.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : α) => β) g) (Monoid.toMulOneClass.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : α) => β) g) (DivInvMonoid.toMonoid.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : α) => β) g) (DivisionMonoid.toDivInvMonoid.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : α) => β) g) _inst_4))))) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : α) => β) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) α β (MulOneClass.toMul.{u2} α (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3)))) (MulOneClass.toMul.{u1} β (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4))) (MonoidHom.monoidHomClass.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))))) f g) (Inv.inv.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : α) => β) h) (InvOneClass.toInv.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : α) => β) h) (DivInvOneMonoid.toInvOneClass.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : α) => β) h) (DivisionMonoid.toDivInvOneMonoid.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : α) => β) h) _inst_4))) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : α) => β) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) α β (MulOneClass.toMul.{u2} α (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3)))) (MulOneClass.toMul.{u1} β (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4))) (MonoidHom.monoidHomClass.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))))) f h)))
+<too large>
 Case conversion may be inaccurate. Consider using '#align monoid_hom.map_mul_inv MonoidHom.map_mul_invₓ'. -/
 /-- Group homomorphisms preserve division. -/
 @[to_additive "Additive group homomorphisms preserve subtraction."]
Diff
@@ -250,7 +250,7 @@ instance OneHom.oneHomClass : OneHomClass (OneHom M N) M N
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} {F : Type.{u3}} [_inst_1 : One.{u1} M] [_inst_2 : One.{u2} N] [_inst_3 : OneHomClass.{u3, u1, u2} F M N _inst_1 _inst_2] (f : F), Eq.{succ u2} N (coeFn.{succ u3, max (succ u1) (succ u2)} F (fun (_x : F) => M -> N) (FunLike.hasCoeToFun.{succ u3, succ u1, succ u2} F M (fun (_x : M) => N) (OneHomClass.toFunLike.{u3, u1, u2} F M N _inst_1 _inst_2 _inst_3)) f (OfNat.ofNat.{u1} M 1 (OfNat.mk.{u1} M 1 (One.one.{u1} M _inst_1)))) (OfNat.ofNat.{u2} N 1 (OfNat.mk.{u2} N 1 (One.one.{u2} N _inst_2)))
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} {F : Type.{u3}} [_inst_1 : One.{u2} M] [_inst_2 : One.{u1} N] [_inst_3 : OneHomClass.{u3, u2, u1} F M N _inst_1 _inst_2] (f : F), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1262 : M) => N) (OfNat.ofNat.{u2} M 1 (One.toOfNat1.{u2} M _inst_1))) (FunLike.coe.{succ u3, succ u2, succ u1} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1262 : M) => N) _x) (OneHomClass.toFunLike.{u3, u2, u1} F M N _inst_1 _inst_2 _inst_3) f (OfNat.ofNat.{u2} M 1 (One.toOfNat1.{u2} M _inst_1))) (OfNat.ofNat.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1262 : M) => N) (OfNat.ofNat.{u2} M 1 (One.toOfNat1.{u2} M _inst_1))) 1 (One.toOfNat1.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1262 : M) => N) (OfNat.ofNat.{u2} M 1 (One.toOfNat1.{u2} M _inst_1))) _inst_2))
+  forall {M : Type.{u2}} {N : Type.{u1}} {F : Type.{u3}} [_inst_1 : One.{u2} M] [_inst_2 : One.{u1} N] [_inst_3 : OneHomClass.{u3, u2, u1} F M N _inst_1 _inst_2] (f : F), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1264 : M) => N) (OfNat.ofNat.{u2} M 1 (One.toOfNat1.{u2} M _inst_1))) (FunLike.coe.{succ u3, succ u2, succ u1} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1264 : M) => N) _x) (OneHomClass.toFunLike.{u3, u2, u1} F M N _inst_1 _inst_2 _inst_3) f (OfNat.ofNat.{u2} M 1 (One.toOfNat1.{u2} M _inst_1))) (OfNat.ofNat.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1264 : M) => N) (OfNat.ofNat.{u2} M 1 (One.toOfNat1.{u2} M _inst_1))) 1 (One.toOfNat1.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1264 : M) => N) (OfNat.ofNat.{u2} M 1 (One.toOfNat1.{u2} M _inst_1))) _inst_2))
 Case conversion may be inaccurate. Consider using '#align map_one map_oneₓ'. -/
 @[simp, to_additive]
 theorem map_one [OneHomClass F M N] (f : F) : f 1 = 1 :=
@@ -262,7 +262,7 @@ theorem map_one [OneHomClass F M N] (f : F) : f 1 = 1 :=
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} {F : Type.{u3}} [_inst_1 : One.{u1} M] [_inst_2 : One.{u2} N] [_inst_3 : OneHomClass.{u3, u1, u2} F M N _inst_1 _inst_2] (f : F), (Function.Injective.{succ u1, succ u2} M N (coeFn.{succ u3, max (succ u1) (succ u2)} F (fun (_x : F) => M -> N) (FunLike.hasCoeToFun.{succ u3, succ u1, succ u2} F M (fun (_x : M) => N) (OneHomClass.toFunLike.{u3, u1, u2} F M N _inst_1 _inst_2 _inst_3)) f)) -> (forall {x : M}, Iff (Eq.{succ u2} N (coeFn.{succ u3, max (succ u1) (succ u2)} F (fun (_x : F) => M -> N) (FunLike.hasCoeToFun.{succ u3, succ u1, succ u2} F M (fun (_x : M) => N) (OneHomClass.toFunLike.{u3, u1, u2} F M N _inst_1 _inst_2 _inst_3)) f x) (OfNat.ofNat.{u2} N 1 (OfNat.mk.{u2} N 1 (One.one.{u2} N _inst_2)))) (Eq.{succ u1} M x (OfNat.ofNat.{u1} M 1 (OfNat.mk.{u1} M 1 (One.one.{u1} M _inst_1)))))
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} {F : Type.{u3}} [_inst_1 : One.{u2} M] [_inst_2 : One.{u1} N] [_inst_3 : OneHomClass.{u3, u2, u1} F M N _inst_1 _inst_2] (f : F), (Function.Injective.{succ u2, succ u1} M N (FunLike.coe.{succ u3, succ u2, succ u1} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1262 : M) => N) _x) (OneHomClass.toFunLike.{u3, u2, u1} F M N _inst_1 _inst_2 _inst_3) f)) -> (forall {x : M}, Iff (Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1262 : M) => N) x) (FunLike.coe.{succ u3, succ u2, succ u1} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1262 : M) => N) _x) (OneHomClass.toFunLike.{u3, u2, u1} F M N _inst_1 _inst_2 _inst_3) f x) (OfNat.ofNat.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1262 : M) => N) x) 1 (One.toOfNat1.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1262 : M) => N) x) _inst_2))) (Eq.{succ u2} M x (OfNat.ofNat.{u2} M 1 (One.toOfNat1.{u2} M _inst_1))))
+  forall {M : Type.{u2}} {N : Type.{u1}} {F : Type.{u3}} [_inst_1 : One.{u2} M] [_inst_2 : One.{u1} N] [_inst_3 : OneHomClass.{u3, u2, u1} F M N _inst_1 _inst_2] (f : F), (Function.Injective.{succ u2, succ u1} M N (FunLike.coe.{succ u3, succ u2, succ u1} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1264 : M) => N) _x) (OneHomClass.toFunLike.{u3, u2, u1} F M N _inst_1 _inst_2 _inst_3) f)) -> (forall {x : M}, Iff (Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1264 : M) => N) x) (FunLike.coe.{succ u3, succ u2, succ u1} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1264 : M) => N) _x) (OneHomClass.toFunLike.{u3, u2, u1} F M N _inst_1 _inst_2 _inst_3) f x) (OfNat.ofNat.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1264 : M) => N) x) 1 (One.toOfNat1.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1264 : M) => N) x) _inst_2))) (Eq.{succ u2} M x (OfNat.ofNat.{u2} M 1 (One.toOfNat1.{u2} M _inst_1))))
 Case conversion may be inaccurate. Consider using '#align map_eq_one_iff map_eq_one_iffₓ'. -/
 @[to_additive]
 theorem map_eq_one_iff [OneHomClass F M N] (f : F) (hf : Function.Injective f) {x : M} :
@@ -275,7 +275,7 @@ theorem map_eq_one_iff [OneHomClass F M N] (f : F) (hf : Function.Injective f) {
 lean 3 declaration is
   forall {R : Type.{u1}} {S : Type.{u2}} {F : Type.{u3}} [_inst_3 : One.{u1} R] [_inst_4 : One.{u2} S] [_inst_5 : OneHomClass.{u3, u1, u2} F R S _inst_3 _inst_4] (f : F), (Function.Injective.{succ u1, succ u2} R S (coeFn.{succ u3, max (succ u1) (succ u2)} F (fun (_x : F) => R -> S) (FunLike.hasCoeToFun.{succ u3, succ u1, succ u2} F R (fun (_x : R) => S) (OneHomClass.toFunLike.{u3, u1, u2} F R S _inst_3 _inst_4 _inst_5)) f)) -> (forall {x : R}, Iff (Ne.{succ u2} S (coeFn.{succ u3, max (succ u1) (succ u2)} F (fun (_x : F) => R -> S) (FunLike.hasCoeToFun.{succ u3, succ u1, succ u2} F R (fun (_x : R) => S) (OneHomClass.toFunLike.{u3, u1, u2} F R S _inst_3 _inst_4 _inst_5)) f x) (OfNat.ofNat.{u2} S 1 (OfNat.mk.{u2} S 1 (One.one.{u2} S _inst_4)))) (Ne.{succ u1} R x (OfNat.ofNat.{u1} R 1 (OfNat.mk.{u1} R 1 (One.one.{u1} R _inst_3)))))
 but is expected to have type
-  forall {R : Type.{u3}} {S : Type.{u2}} {F : Type.{u1}} [_inst_3 : One.{u3} R] [_inst_4 : One.{u2} S] [_inst_5 : OneHomClass.{u1, u3, u2} F R S _inst_3 _inst_4] (f : F), (Function.Injective.{succ u3, succ u2} R S (FunLike.coe.{succ u1, succ u3, succ u2} F R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1262 : R) => S) _x) (OneHomClass.toFunLike.{u1, u3, u2} F R S _inst_3 _inst_4 _inst_5) f)) -> (forall {x : R}, Iff (Ne.{succ u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1262 : R) => S) x) (FunLike.coe.{succ u1, succ u3, succ u2} F R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1262 : R) => S) _x) (OneHomClass.toFunLike.{u1, u3, u2} F R S _inst_3 _inst_4 _inst_5) f x) (OfNat.ofNat.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1262 : R) => S) x) 1 (One.toOfNat1.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1262 : R) => S) x) _inst_4))) (Ne.{succ u3} R x (OfNat.ofNat.{u3} R 1 (One.toOfNat1.{u3} R _inst_3))))
+  forall {R : Type.{u3}} {S : Type.{u2}} {F : Type.{u1}} [_inst_3 : One.{u3} R] [_inst_4 : One.{u2} S] [_inst_5 : OneHomClass.{u1, u3, u2} F R S _inst_3 _inst_4] (f : F), (Function.Injective.{succ u3, succ u2} R S (FunLike.coe.{succ u1, succ u3, succ u2} F R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1264 : R) => S) _x) (OneHomClass.toFunLike.{u1, u3, u2} F R S _inst_3 _inst_4 _inst_5) f)) -> (forall {x : R}, Iff (Ne.{succ u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1264 : R) => S) x) (FunLike.coe.{succ u1, succ u3, succ u2} F R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1264 : R) => S) _x) (OneHomClass.toFunLike.{u1, u3, u2} F R S _inst_3 _inst_4 _inst_5) f x) (OfNat.ofNat.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1264 : R) => S) x) 1 (One.toOfNat1.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1264 : R) => S) x) _inst_4))) (Ne.{succ u3} R x (OfNat.ofNat.{u3} R 1 (One.toOfNat1.{u3} R _inst_3))))
 Case conversion may be inaccurate. Consider using '#align map_ne_one_iff map_ne_one_iffₓ'. -/
 @[to_additive]
 theorem map_ne_one_iff {R S F : Type _} [One R] [One S] [OneHomClass F R S] (f : F)
@@ -288,7 +288,7 @@ theorem map_ne_one_iff {R S F : Type _} [One R] [One S] [OneHomClass F R S] (f :
 lean 3 declaration is
   forall {R : Type.{u1}} {S : Type.{u2}} {F : Type.{u3}} [_inst_3 : One.{u1} R] [_inst_4 : One.{u2} S] [_inst_5 : OneHomClass.{u3, u1, u2} F R S _inst_3 _inst_4] {f : F} {x : R}, (Ne.{succ u2} S (coeFn.{succ u3, max (succ u1) (succ u2)} F (fun (_x : F) => R -> S) (FunLike.hasCoeToFun.{succ u3, succ u1, succ u2} F R (fun (_x : R) => S) (OneHomClass.toFunLike.{u3, u1, u2} F R S _inst_3 _inst_4 _inst_5)) f x) (OfNat.ofNat.{u2} S 1 (OfNat.mk.{u2} S 1 (One.one.{u2} S _inst_4)))) -> (Ne.{succ u1} R x (OfNat.ofNat.{u1} R 1 (OfNat.mk.{u1} R 1 (One.one.{u1} R _inst_3))))
 but is expected to have type
-  forall {R : Type.{u3}} {S : Type.{u2}} {F : Type.{u1}} [_inst_3 : One.{u3} R] [_inst_4 : One.{u2} S] [_inst_5 : OneHomClass.{u1, u3, u2} F R S _inst_3 _inst_4] {f : F} {x : R}, (Ne.{succ u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1262 : R) => S) x) (FunLike.coe.{succ u1, succ u3, succ u2} F R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1262 : R) => S) _x) (OneHomClass.toFunLike.{u1, u3, u2} F R S _inst_3 _inst_4 _inst_5) f x) (OfNat.ofNat.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1262 : R) => S) x) 1 (One.toOfNat1.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1262 : R) => S) x) _inst_4))) -> (Ne.{succ u3} R x (OfNat.ofNat.{u3} R 1 (One.toOfNat1.{u3} R _inst_3)))
+  forall {R : Type.{u3}} {S : Type.{u2}} {F : Type.{u1}} [_inst_3 : One.{u3} R] [_inst_4 : One.{u2} S] [_inst_5 : OneHomClass.{u1, u3, u2} F R S _inst_3 _inst_4] {f : F} {x : R}, (Ne.{succ u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1264 : R) => S) x) (FunLike.coe.{succ u1, succ u3, succ u2} F R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1264 : R) => S) _x) (OneHomClass.toFunLike.{u1, u3, u2} F R S _inst_3 _inst_4 _inst_5) f x) (OfNat.ofNat.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1264 : R) => S) x) 1 (One.toOfNat1.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1264 : R) => S) x) _inst_4))) -> (Ne.{succ u3} R x (OfNat.ofNat.{u3} R 1 (One.toOfNat1.{u3} R _inst_3)))
 Case conversion may be inaccurate. Consider using '#align ne_one_of_map ne_one_of_mapₓ'. -/
 @[to_additive]
 theorem ne_one_of_map {R S F : Type _} [One R] [One S] [OneHomClass F R S] {f : F} {x : R}
@@ -307,7 +307,7 @@ instance [OneHomClass F M N] : CoeTC F (OneHom M N) :=
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} {F : Type.{u3}} [_inst_1 : One.{u1} M] [_inst_2 : One.{u2} N] [_inst_3 : OneHomClass.{u3, u1, u2} F M N _inst_1 _inst_2] (f : F), Eq.{max (succ u1) (succ u2)} ((fun (_x : OneHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) ((fun (a : Type.{u3}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{succ u3, max (succ u2) (succ u1)} a b] => self.0) F (OneHom.{u1, u2} M N _inst_1 _inst_2) (HasLiftT.mk.{succ u3, max (succ u2) (succ u1)} F (OneHom.{u1, u2} M N _inst_1 _inst_2) (CoeTCₓ.coe.{succ u3, max (succ u2) (succ u1)} F (OneHom.{u1, u2} M N _inst_1 _inst_2) (OneHom.hasCoeT.{u1, u2, u3} M N F _inst_1 _inst_2 _inst_3))) f)) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (OneHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : OneHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (FunLike.hasCoeToFun.{max (succ u2) (succ u1), succ u1, succ u2} (OneHom.{u1, u2} M N _inst_1 _inst_2) M (fun (_x : M) => N) (OneHomClass.toFunLike.{max u2 u1, u1, u2} (OneHom.{u1, u2} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (OneHom.oneHomClass.{u1, u2} M N _inst_1 _inst_2))) ((fun (a : Type.{u3}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{succ u3, max (succ u2) (succ u1)} a b] => self.0) F (OneHom.{u1, u2} M N _inst_1 _inst_2) (HasLiftT.mk.{succ u3, max (succ u2) (succ u1)} F (OneHom.{u1, u2} M N _inst_1 _inst_2) (CoeTCₓ.coe.{succ u3, max (succ u2) (succ u1)} F (OneHom.{u1, u2} M N _inst_1 _inst_2) (OneHom.hasCoeT.{u1, u2, u3} M N F _inst_1 _inst_2 _inst_3))) f)) (coeFn.{succ u3, max (succ u1) (succ u2)} F (fun (_x : F) => M -> N) (FunLike.hasCoeToFun.{succ u3, succ u1, succ u2} F M (fun (_x : M) => N) (OneHomClass.toFunLike.{u3, u1, u2} F M N _inst_1 _inst_2 _inst_3)) f)
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} {F : Type.{u3}} [_inst_1 : One.{u2} M] [_inst_2 : One.{u1} N] [_inst_3 : OneHomClass.{u3, u2, u1} F M N _inst_1 _inst_2] (f : F), Eq.{max (succ u2) (succ u1)} (forall (a : M), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1262 : M) => N) a) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (OneHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1262 : M) => N) _x) (OneHomClass.toFunLike.{max u2 u1, u2, u1} (OneHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (OneHom.oneHomClass.{u2, u1} M N _inst_1 _inst_2)) (OneHomClass.toOneHom.{u2, u1, u3} M N F _inst_1 _inst_2 _inst_3 f)) (FunLike.coe.{succ u3, succ u2, succ u1} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1262 : M) => N) _x) (OneHomClass.toFunLike.{u3, u2, u1} F M N _inst_1 _inst_2 _inst_3) f)
+  forall {M : Type.{u2}} {N : Type.{u1}} {F : Type.{u3}} [_inst_1 : One.{u2} M] [_inst_2 : One.{u1} N] [_inst_3 : OneHomClass.{u3, u2, u1} F M N _inst_1 _inst_2] (f : F), Eq.{max (succ u2) (succ u1)} (forall (a : M), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1264 : M) => N) a) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (OneHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1264 : M) => N) _x) (OneHomClass.toFunLike.{max u2 u1, u2, u1} (OneHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (OneHom.oneHomClass.{u2, u1} M N _inst_1 _inst_2)) (OneHomClass.toOneHom.{u2, u1, u3} M N F _inst_1 _inst_2 _inst_3 f)) (FunLike.coe.{succ u3, succ u2, succ u1} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1264 : M) => N) _x) (OneHomClass.toFunLike.{u3, u2, u1} F M N _inst_1 _inst_2 _inst_3) f)
 Case conversion may be inaccurate. Consider using '#align one_hom.coe_coe OneHom.coe_coeₓ'. -/
 @[simp, to_additive]
 theorem OneHom.coe_coe [OneHomClass F M N] (f : F) : ((f : OneHom M N) : M → N) = f :=
@@ -369,7 +369,7 @@ instance MulHom.mulHomClass : MulHomClass (M →ₙ* N) M N
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} {F : Type.{u3}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] [_inst_3 : MulHomClass.{u3, u1, u2} F M N _inst_1 _inst_2] (f : F) (x : M) (y : M), Eq.{succ u2} N (coeFn.{succ u3, max (succ u1) (succ u2)} F (fun (_x : F) => M -> N) (FunLike.hasCoeToFun.{succ u3, succ u1, succ u2} F M (fun (_x : M) => N) (MulHomClass.toFunLike.{u3, u1, u2} F M N _inst_1 _inst_2 _inst_3)) f (HMul.hMul.{u1, u1, u1} M M M (instHMul.{u1} M _inst_1) x y)) (HMul.hMul.{u2, u2, u2} N N N (instHMul.{u2} N _inst_2) (coeFn.{succ u3, max (succ u1) (succ u2)} F (fun (_x : F) => M -> N) (FunLike.hasCoeToFun.{succ u3, succ u1, succ u2} F M (fun (_x : M) => N) (MulHomClass.toFunLike.{u3, u1, u2} F M N _inst_1 _inst_2 _inst_3)) f x) (coeFn.{succ u3, max (succ u1) (succ u2)} F (fun (_x : F) => M -> N) (FunLike.hasCoeToFun.{succ u3, succ u1, succ u2} F M (fun (_x : M) => N) (MulHomClass.toFunLike.{u3, u1, u2} F M N _inst_1 _inst_2 _inst_3)) f y))
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} {F : Type.{u3}} [_inst_1 : Mul.{u2} M] [_inst_2 : Mul.{u1} N] [_inst_3 : MulHomClass.{u3, u2, u1} F M N _inst_1 _inst_2] (f : F) (x : M) (y : M), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) (HMul.hMul.{u2, u2, u2} M M M (instHMul.{u2} M _inst_1) x y)) (FunLike.coe.{succ u3, succ u2, succ u1} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{u3, u2, u1} F M N _inst_1 _inst_2 _inst_3) f (HMul.hMul.{u2, u2, u2} M M M (instHMul.{u2} M _inst_1) x y)) (HMul.hMul.{u1, u1, u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) x) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) y) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) x) (instHMul.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) x) _inst_2) (FunLike.coe.{succ u3, succ u2, succ u1} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{u3, u2, u1} F M N _inst_1 _inst_2 _inst_3) f x) (FunLike.coe.{succ u3, succ u2, succ u1} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{u3, u2, u1} F M N _inst_1 _inst_2 _inst_3) f y))
+  forall {M : Type.{u2}} {N : Type.{u1}} {F : Type.{u3}} [_inst_1 : Mul.{u2} M] [_inst_2 : Mul.{u1} N] [_inst_3 : MulHomClass.{u3, u2, u1} F M N _inst_1 _inst_2] (f : F) (x : M) (y : M), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) (HMul.hMul.{u2, u2, u2} M M M (instHMul.{u2} M _inst_1) x y)) (FunLike.coe.{succ u3, succ u2, succ u1} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{u3, u2, u1} F M N _inst_1 _inst_2 _inst_3) f (HMul.hMul.{u2, u2, u2} M M M (instHMul.{u2} M _inst_1) x y)) (HMul.hMul.{u1, u1, u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) x) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) y) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) x) (instHMul.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) x) _inst_2) (FunLike.coe.{succ u3, succ u2, succ u1} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{u3, u2, u1} F M N _inst_1 _inst_2 _inst_3) f x) (FunLike.coe.{succ u3, succ u2, succ u1} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{u3, u2, u1} F M N _inst_1 _inst_2 _inst_3) f y))
 Case conversion may be inaccurate. Consider using '#align map_mul map_mulₓ'. -/
 @[simp, to_additive]
 theorem map_mul [MulHomClass F M N] (f : F) (x y : M) : f (x * y) = f x * f y :=
@@ -387,7 +387,7 @@ instance [MulHomClass F M N] : CoeTC F (M →ₙ* N) :=
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} {F : Type.{u3}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] [_inst_3 : MulHomClass.{u3, u1, u2} F M N _inst_1 _inst_2] (f : F), Eq.{max (succ u1) (succ u2)} ((fun (_x : MulHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) ((fun (a : Type.{u3}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{succ u3, max (succ u2) (succ u1)} a b] => self.0) F (MulHom.{u1, u2} M N _inst_1 _inst_2) (HasLiftT.mk.{succ u3, max (succ u2) (succ u1)} F (MulHom.{u1, u2} M N _inst_1 _inst_2) (CoeTCₓ.coe.{succ u3, max (succ u2) (succ u1)} F (MulHom.{u1, u2} M N _inst_1 _inst_2) (MulHom.hasCoeT.{u1, u2, u3} M N F _inst_1 _inst_2 _inst_3))) f)) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MulHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MulHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (FunLike.hasCoeToFun.{max (succ u2) (succ u1), succ u1, succ u2} (MulHom.{u1, u2} M N _inst_1 _inst_2) M (fun (_x : M) => N) (MulHomClass.toFunLike.{max u2 u1, u1, u2} (MulHom.{u1, u2} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u1, u2} M N _inst_1 _inst_2))) ((fun (a : Type.{u3}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{succ u3, max (succ u2) (succ u1)} a b] => self.0) F (MulHom.{u1, u2} M N _inst_1 _inst_2) (HasLiftT.mk.{succ u3, max (succ u2) (succ u1)} F (MulHom.{u1, u2} M N _inst_1 _inst_2) (CoeTCₓ.coe.{succ u3, max (succ u2) (succ u1)} F (MulHom.{u1, u2} M N _inst_1 _inst_2) (MulHom.hasCoeT.{u1, u2, u3} M N F _inst_1 _inst_2 _inst_3))) f)) (coeFn.{succ u3, max (succ u1) (succ u2)} F (fun (_x : F) => M -> N) (FunLike.hasCoeToFun.{succ u3, succ u1, succ u2} F M (fun (_x : M) => N) (MulHomClass.toFunLike.{u3, u1, u2} F M N _inst_1 _inst_2 _inst_3)) f)
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} {F : Type.{u3}} [_inst_1 : Mul.{u2} M] [_inst_2 : Mul.{u1} N] [_inst_3 : MulHomClass.{u3, u2, u1} F M N _inst_1 _inst_2] (f : F), Eq.{max (succ u2) (succ u1)} (forall (a : M), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) a) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) (MulHomClass.toMulHom.{u2, u1, u3} M N F _inst_1 _inst_2 _inst_3 f)) (FunLike.coe.{succ u3, succ u2, succ u1} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{u3, u2, u1} F M N _inst_1 _inst_2 _inst_3) f)
+  forall {M : Type.{u2}} {N : Type.{u1}} {F : Type.{u3}} [_inst_1 : Mul.{u2} M] [_inst_2 : Mul.{u1} N] [_inst_3 : MulHomClass.{u3, u2, u1} F M N _inst_1 _inst_2] (f : F), Eq.{max (succ u2) (succ u1)} (forall (a : M), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) a) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) (MulHomClass.toMulHom.{u2, u1, u3} M N F _inst_1 _inst_2 _inst_3 f)) (FunLike.coe.{succ u3, succ u2, succ u1} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{u3, u2, u1} F M N _inst_1 _inst_2 _inst_3) f)
 Case conversion may be inaccurate. Consider using '#align mul_hom.coe_coe MulHom.coe_coeₓ'. -/
 @[simp, to_additive]
 theorem MulHom.coe_coe [MulHomClass F M N] (f : F) : ((f : MulHom M N) : M → N) = f :=
@@ -458,7 +458,7 @@ instance [MonoidHomClass F M N] : CoeTC F (M →* N) :=
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} {F : Type.{u3}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N] [_inst_3 : MonoidHomClass.{u3, u1, u2} F M N _inst_1 _inst_2] (f : F), Eq.{max (succ u1) (succ u2)} ((fun (_x : MonoidHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) ((fun (a : Type.{u3}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{succ u3, max (succ u2) (succ u1)} a b] => self.0) F (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (HasLiftT.mk.{succ u3, max (succ u2) (succ u1)} F (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (CoeTCₓ.coe.{succ u3, max (succ u2) (succ u1)} F (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.hasCoeT.{u1, u2, u3} M N F _inst_1 _inst_2 _inst_3))) f)) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MonoidHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (FunLike.hasCoeToFun.{max (succ u2) (succ u1), succ u1, succ u2} (MonoidHom.{u1, u2} M N _inst_1 _inst_2) M (fun (_x : M) => N) (MulHomClass.toFunLike.{max u2 u1, u1, u2} (MonoidHom.{u1, u2} M N _inst_1 _inst_2) M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2) (MonoidHomClass.toMulHomClass.{max u2 u1, u1, u2} (MonoidHom.{u1, u2} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2)))) ((fun (a : Type.{u3}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{succ u3, max (succ u2) (succ u1)} a b] => self.0) F (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (HasLiftT.mk.{succ u3, max (succ u2) (succ u1)} F (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (CoeTCₓ.coe.{succ u3, max (succ u2) (succ u1)} F (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.hasCoeT.{u1, u2, u3} M N F _inst_1 _inst_2 _inst_3))) f)) (coeFn.{succ u3, max (succ u1) (succ u2)} F (fun (_x : F) => M -> N) (FunLike.hasCoeToFun.{succ u3, succ u1, succ u2} F M (fun (_x : M) => N) (MulHomClass.toFunLike.{u3, u1, u2} F M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2) (MonoidHomClass.toMulHomClass.{u3, u1, u2} F M N _inst_1 _inst_2 _inst_3))) f)
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} {F : Type.{u3}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u1} N] [_inst_3 : MonoidHomClass.{u3, u2, u1} F M N _inst_1 _inst_2] (f : F), Eq.{max (succ u2) (succ u1)} (forall (a : M), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) a) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2))) (MonoidHomClass.toMonoidHom.{u2, u1, u3} M N F _inst_1 _inst_2 _inst_3 f)) (FunLike.coe.{succ u3, succ u2, succ u1} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{u3, u2, u1} F M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2) (MonoidHomClass.toMulHomClass.{u3, u2, u1} F M N _inst_1 _inst_2 _inst_3)) f)
+  forall {M : Type.{u2}} {N : Type.{u1}} {F : Type.{u3}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u1} N] [_inst_3 : MonoidHomClass.{u3, u2, u1} F M N _inst_1 _inst_2] (f : F), Eq.{max (succ u2) (succ u1)} (forall (a : M), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) a) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2))) (MonoidHomClass.toMonoidHom.{u2, u1, u3} M N F _inst_1 _inst_2 _inst_3 f)) (FunLike.coe.{succ u3, succ u2, succ u1} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{u3, u2, u1} F M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2) (MonoidHomClass.toMulHomClass.{u3, u2, u1} F M N _inst_1 _inst_2 _inst_3)) f)
 Case conversion may be inaccurate. Consider using '#align monoid_hom.coe_coe MonoidHom.coe_coeₓ'. -/
 @[simp, to_additive]
 theorem MonoidHom.coe_coe [MonoidHomClass F M N] (f : F) : ((f : M →* N) : M → N) = f :=
@@ -470,7 +470,7 @@ theorem MonoidHom.coe_coe [MonoidHomClass F M N] (f : F) : ((f : M →* N) : M 
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} {F : Type.{u3}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N] [_inst_3 : MonoidHomClass.{u3, u1, u2} F M N _inst_1 _inst_2] (f : F) {a : M} {b : M}, (Eq.{succ u1} M (HMul.hMul.{u1, u1, u1} M M M (instHMul.{u1} M (MulOneClass.toHasMul.{u1} M _inst_1)) a b) (OfNat.ofNat.{u1} M 1 (OfNat.mk.{u1} M 1 (One.one.{u1} M (MulOneClass.toHasOne.{u1} M _inst_1))))) -> (Eq.{succ u2} N (HMul.hMul.{u2, u2, u2} N N N (instHMul.{u2} N (MulOneClass.toHasMul.{u2} N _inst_2)) (coeFn.{succ u3, max (succ u1) (succ u2)} F (fun (_x : F) => M -> N) (FunLike.hasCoeToFun.{succ u3, succ u1, succ u2} F M (fun (_x : M) => N) (MulHomClass.toFunLike.{u3, u1, u2} F M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2) (MonoidHomClass.toMulHomClass.{u3, u1, u2} F M N _inst_1 _inst_2 _inst_3))) f a) (coeFn.{succ u3, max (succ u1) (succ u2)} F (fun (_x : F) => M -> N) (FunLike.hasCoeToFun.{succ u3, succ u1, succ u2} F M (fun (_x : M) => N) (MulHomClass.toFunLike.{u3, u1, u2} F M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2) (MonoidHomClass.toMulHomClass.{u3, u1, u2} F M N _inst_1 _inst_2 _inst_3))) f b)) (OfNat.ofNat.{u2} N 1 (OfNat.mk.{u2} N 1 (One.one.{u2} N (MulOneClass.toHasOne.{u2} N _inst_2)))))
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} {F : Type.{u3}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u1} N] [_inst_3 : MonoidHomClass.{u3, u2, u1} F M N _inst_1 _inst_2] (f : F) {a : M} {b : M}, (Eq.{succ u2} M (HMul.hMul.{u2, u2, u2} M M M (instHMul.{u2} M (MulOneClass.toMul.{u2} M _inst_1)) a b) (OfNat.ofNat.{u2} M 1 (One.toOfNat1.{u2} M (MulOneClass.toOne.{u2} M _inst_1)))) -> (Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) a) (HMul.hMul.{u1, u1, u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) a) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) b) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) a) (instHMul.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) a) (MulOneClass.toMul.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) a) _inst_2)) (FunLike.coe.{succ u3, succ u2, succ u1} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{u3, u2, u1} F M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2) (MonoidHomClass.toMulHomClass.{u3, u2, u1} F M N _inst_1 _inst_2 _inst_3)) f a) (FunLike.coe.{succ u3, succ u2, succ u1} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{u3, u2, u1} F M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2) (MonoidHomClass.toMulHomClass.{u3, u2, u1} F M N _inst_1 _inst_2 _inst_3)) f b)) (OfNat.ofNat.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) a) 1 (One.toOfNat1.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) a) (MulOneClass.toOne.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) a) _inst_2))))
+  forall {M : Type.{u2}} {N : Type.{u1}} {F : Type.{u3}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u1} N] [_inst_3 : MonoidHomClass.{u3, u2, u1} F M N _inst_1 _inst_2] (f : F) {a : M} {b : M}, (Eq.{succ u2} M (HMul.hMul.{u2, u2, u2} M M M (instHMul.{u2} M (MulOneClass.toMul.{u2} M _inst_1)) a b) (OfNat.ofNat.{u2} M 1 (One.toOfNat1.{u2} M (MulOneClass.toOne.{u2} M _inst_1)))) -> (Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) a) (HMul.hMul.{u1, u1, u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) a) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) b) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) a) (instHMul.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) a) (MulOneClass.toMul.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) a) _inst_2)) (FunLike.coe.{succ u3, succ u2, succ u1} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{u3, u2, u1} F M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2) (MonoidHomClass.toMulHomClass.{u3, u2, u1} F M N _inst_1 _inst_2 _inst_3)) f a) (FunLike.coe.{succ u3, succ u2, succ u1} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{u3, u2, u1} F M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2) (MonoidHomClass.toMulHomClass.{u3, u2, u1} F M N _inst_1 _inst_2 _inst_3)) f b)) (OfNat.ofNat.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) a) 1 (One.toOfNat1.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) a) (MulOneClass.toOne.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) a) _inst_2))))
 Case conversion may be inaccurate. Consider using '#align map_mul_eq_one map_mul_eq_oneₓ'. -/
 @[to_additive]
 theorem map_mul_eq_one [MonoidHomClass F M N] (f : F) {a b : M} (h : a * b = 1) : f a * f b = 1 :=
@@ -482,7 +482,7 @@ theorem map_mul_eq_one [MonoidHomClass F M N] (f : F) {a b : M} (h : a * b = 1)
 lean 3 declaration is
   forall {G : Type.{u1}} {H : Type.{u2}} {F : Type.{u3}} [_inst_3 : DivInvMonoid.{u1} G] [_inst_4 : DivInvMonoid.{u2} H] [_inst_5 : MonoidHomClass.{u3, u1, u2} F G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G _inst_3)) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H _inst_4))] (f : F), (forall (a : G), Eq.{succ u2} H (coeFn.{succ u3, max (succ u1) (succ u2)} F (fun (_x : F) => G -> H) (FunLike.hasCoeToFun.{succ u3, succ u1, succ u2} F G (fun (_x : G) => H) (MulHomClass.toFunLike.{u3, u1, u2} F G H (MulOneClass.toHasMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G _inst_3))) (MulOneClass.toHasMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H _inst_4))) (MonoidHomClass.toMulHomClass.{u3, u1, u2} F G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G _inst_3)) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H _inst_4)) _inst_5))) f (Inv.inv.{u1} G (DivInvMonoid.toHasInv.{u1} G _inst_3) a)) (Inv.inv.{u2} H (DivInvMonoid.toHasInv.{u2} H _inst_4) (coeFn.{succ u3, max (succ u1) (succ u2)} F (fun (_x : F) => G -> H) (FunLike.hasCoeToFun.{succ u3, succ u1, succ u2} F G (fun (_x : G) => H) (MulHomClass.toFunLike.{u3, u1, u2} F G H (MulOneClass.toHasMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G _inst_3))) (MulOneClass.toHasMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H _inst_4))) (MonoidHomClass.toMulHomClass.{u3, u1, u2} F G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G _inst_3)) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H _inst_4)) _inst_5))) f a))) -> (forall (a : G) (b : G), Eq.{succ u2} H (coeFn.{succ u3, max (succ u1) (succ u2)} F (fun (_x : F) => G -> H) (FunLike.hasCoeToFun.{succ u3, succ u1, succ u2} F G (fun (_x : G) => H) (MulHomClass.toFunLike.{u3, u1, u2} F G H (MulOneClass.toHasMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G _inst_3))) (MulOneClass.toHasMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H _inst_4))) (MonoidHomClass.toMulHomClass.{u3, u1, u2} F G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G _inst_3)) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H _inst_4)) _inst_5))) f (HDiv.hDiv.{u1, u1, u1} G G G (instHDiv.{u1} G (DivInvMonoid.toHasDiv.{u1} G _inst_3)) a b)) (HDiv.hDiv.{u2, u2, u2} H H H (instHDiv.{u2} H (DivInvMonoid.toHasDiv.{u2} H _inst_4)) (coeFn.{succ u3, max (succ u1) (succ u2)} F (fun (_x : F) => G -> H) (FunLike.hasCoeToFun.{succ u3, succ u1, succ u2} F G (fun (_x : G) => H) (MulHomClass.toFunLike.{u3, u1, u2} F G H (MulOneClass.toHasMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G _inst_3))) (MulOneClass.toHasMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H _inst_4))) (MonoidHomClass.toMulHomClass.{u3, u1, u2} F G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G _inst_3)) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H _inst_4)) _inst_5))) f a) (coeFn.{succ u3, max (succ u1) (succ u2)} F (fun (_x : F) => G -> H) (FunLike.hasCoeToFun.{succ u3, succ u1, succ u2} F G (fun (_x : G) => H) (MulHomClass.toFunLike.{u3, u1, u2} F G H (MulOneClass.toHasMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G _inst_3))) (MulOneClass.toHasMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H _inst_4))) (MonoidHomClass.toMulHomClass.{u3, u1, u2} F G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G _inst_3)) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H _inst_4)) _inst_5))) f b)))
 but is expected to have type
-  forall {G : Type.{u3}} {H : Type.{u2}} {F : Type.{u1}} [_inst_3 : DivInvMonoid.{u3} G] [_inst_4 : DivInvMonoid.{u2} H] [_inst_5 : MonoidHomClass.{u1, u3, u2} F G H (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G _inst_3)) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H _inst_4))] (f : F), (forall (a : G), Eq.{succ u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : G) => H) (Inv.inv.{u3} G (DivInvMonoid.toInv.{u3} G _inst_3) a)) (FunLike.coe.{succ u1, succ u3, succ u2} F G (fun (_x : G) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : G) => H) _x) (MulHomClass.toFunLike.{u1, u3, u2} F G H (MulOneClass.toMul.{u3} G (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G _inst_3))) (MulOneClass.toMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H _inst_4))) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F G H (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G _inst_3)) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H _inst_4)) _inst_5)) f (Inv.inv.{u3} G (DivInvMonoid.toInv.{u3} G _inst_3) a)) (Inv.inv.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : G) => H) a) (DivInvMonoid.toInv.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : G) => H) a) _inst_4) (FunLike.coe.{succ u1, succ u3, succ u2} F G (fun (_x : G) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : G) => H) _x) (MulHomClass.toFunLike.{u1, u3, u2} F G H (MulOneClass.toMul.{u3} G (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G _inst_3))) (MulOneClass.toMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H _inst_4))) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F G H (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G _inst_3)) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H _inst_4)) _inst_5)) f a))) -> (forall (a : G) (b : G), Eq.{succ u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : G) => H) (HDiv.hDiv.{u3, u3, u3} G G G (instHDiv.{u3} G (DivInvMonoid.toDiv.{u3} G _inst_3)) a b)) (FunLike.coe.{succ u1, succ u3, succ u2} F G (fun (_x : G) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : G) => H) _x) (MulHomClass.toFunLike.{u1, u3, u2} F G H (MulOneClass.toMul.{u3} G (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G _inst_3))) (MulOneClass.toMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H _inst_4))) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F G H (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G _inst_3)) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H _inst_4)) _inst_5)) f (HDiv.hDiv.{u3, u3, u3} G G G (instHDiv.{u3} G (DivInvMonoid.toDiv.{u3} G _inst_3)) a b)) (HDiv.hDiv.{u2, u2, u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : G) => H) a) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : G) => H) b) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : G) => H) a) (instHDiv.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : G) => H) a) (DivInvMonoid.toDiv.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : G) => H) a) _inst_4)) (FunLike.coe.{succ u1, succ u3, succ u2} F G (fun (_x : G) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : G) => H) _x) (MulHomClass.toFunLike.{u1, u3, u2} F G H (MulOneClass.toMul.{u3} G (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G _inst_3))) (MulOneClass.toMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H _inst_4))) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F G H (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G _inst_3)) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H _inst_4)) _inst_5)) f a) (FunLike.coe.{succ u1, succ u3, succ u2} F G (fun (_x : G) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : G) => H) _x) (MulHomClass.toFunLike.{u1, u3, u2} F G H (MulOneClass.toMul.{u3} G (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G _inst_3))) (MulOneClass.toMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H _inst_4))) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F G H (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G _inst_3)) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H _inst_4)) _inst_5)) f b)))
+  forall {G : Type.{u3}} {H : Type.{u2}} {F : Type.{u1}} [_inst_3 : DivInvMonoid.{u3} G] [_inst_4 : DivInvMonoid.{u2} H] [_inst_5 : MonoidHomClass.{u1, u3, u2} F G H (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G _inst_3)) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H _inst_4))] (f : F), (forall (a : G), Eq.{succ u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : G) => H) (Inv.inv.{u3} G (DivInvMonoid.toInv.{u3} G _inst_3) a)) (FunLike.coe.{succ u1, succ u3, succ u2} F G (fun (_x : G) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : G) => H) _x) (MulHomClass.toFunLike.{u1, u3, u2} F G H (MulOneClass.toMul.{u3} G (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G _inst_3))) (MulOneClass.toMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H _inst_4))) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F G H (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G _inst_3)) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H _inst_4)) _inst_5)) f (Inv.inv.{u3} G (DivInvMonoid.toInv.{u3} G _inst_3) a)) (Inv.inv.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : G) => H) a) (DivInvMonoid.toInv.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : G) => H) a) _inst_4) (FunLike.coe.{succ u1, succ u3, succ u2} F G (fun (_x : G) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : G) => H) _x) (MulHomClass.toFunLike.{u1, u3, u2} F G H (MulOneClass.toMul.{u3} G (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G _inst_3))) (MulOneClass.toMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H _inst_4))) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F G H (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G _inst_3)) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H _inst_4)) _inst_5)) f a))) -> (forall (a : G) (b : G), Eq.{succ u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : G) => H) (HDiv.hDiv.{u3, u3, u3} G G G (instHDiv.{u3} G (DivInvMonoid.toDiv.{u3} G _inst_3)) a b)) (FunLike.coe.{succ u1, succ u3, succ u2} F G (fun (_x : G) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : G) => H) _x) (MulHomClass.toFunLike.{u1, u3, u2} F G H (MulOneClass.toMul.{u3} G (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G _inst_3))) (MulOneClass.toMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H _inst_4))) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F G H (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G _inst_3)) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H _inst_4)) _inst_5)) f (HDiv.hDiv.{u3, u3, u3} G G G (instHDiv.{u3} G (DivInvMonoid.toDiv.{u3} G _inst_3)) a b)) (HDiv.hDiv.{u2, u2, u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : G) => H) a) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : G) => H) b) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : G) => H) a) (instHDiv.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : G) => H) a) (DivInvMonoid.toDiv.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : G) => H) a) _inst_4)) (FunLike.coe.{succ u1, succ u3, succ u2} F G (fun (_x : G) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : G) => H) _x) (MulHomClass.toFunLike.{u1, u3, u2} F G H (MulOneClass.toMul.{u3} G (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G _inst_3))) (MulOneClass.toMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H _inst_4))) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F G H (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G _inst_3)) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H _inst_4)) _inst_5)) f a) (FunLike.coe.{succ u1, succ u3, succ u2} F G (fun (_x : G) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : G) => H) _x) (MulHomClass.toFunLike.{u1, u3, u2} F G H (MulOneClass.toMul.{u3} G (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G _inst_3))) (MulOneClass.toMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H _inst_4))) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F G H (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G _inst_3)) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H _inst_4)) _inst_5)) f b)))
 Case conversion may be inaccurate. Consider using '#align map_div' map_div'ₓ'. -/
 @[to_additive]
 theorem map_div' [DivInvMonoid G] [DivInvMonoid H] [MonoidHomClass F G H] (f : F)
@@ -495,7 +495,7 @@ theorem map_div' [DivInvMonoid G] [DivInvMonoid H] [MonoidHomClass F G H] (f : F
 lean 3 declaration is
   forall {G : Type.{u1}} {H : Type.{u2}} {F : Type.{u3}} [_inst_3 : Group.{u1} G] [_inst_4 : DivisionMonoid.{u2} H] [_inst_5 : MonoidHomClass.{u3, u1, u2} F G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4)))] (f : F) (a : G), Eq.{succ u2} H (coeFn.{succ u3, max (succ u1) (succ u2)} F (fun (_x : F) => G -> H) (FunLike.hasCoeToFun.{succ u3, succ u1, succ u2} F G (fun (_x : G) => H) (MulHomClass.toFunLike.{u3, u1, u2} F G H (MulOneClass.toHasMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (MulOneClass.toHasMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4)))) (MonoidHomClass.toMulHomClass.{u3, u1, u2} F G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4))) _inst_5))) f (Inv.inv.{u1} G (DivInvMonoid.toHasInv.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)) a)) (Inv.inv.{u2} H (DivInvMonoid.toHasInv.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4)) (coeFn.{succ u3, max (succ u1) (succ u2)} F (fun (_x : F) => G -> H) (FunLike.hasCoeToFun.{succ u3, succ u1, succ u2} F G (fun (_x : G) => H) (MulHomClass.toFunLike.{u3, u1, u2} F G H (MulOneClass.toHasMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (MulOneClass.toHasMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4)))) (MonoidHomClass.toMulHomClass.{u3, u1, u2} F G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4))) _inst_5))) f a))
 but is expected to have type
-  forall {G : Type.{u3}} {H : Type.{u2}} {F : Type.{u1}} [_inst_3 : Group.{u3} G] [_inst_4 : DivisionMonoid.{u2} H] [_inst_5 : MonoidHomClass.{u1, u3, u2} F G H (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4)))] (f : F) (a : G), Eq.{succ u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : G) => H) (Inv.inv.{u3} G (InvOneClass.toInv.{u3} G (DivInvOneMonoid.toInvOneClass.{u3} G (DivisionMonoid.toDivInvOneMonoid.{u3} G (Group.toDivisionMonoid.{u3} G _inst_3)))) a)) (FunLike.coe.{succ u1, succ u3, succ u2} F G (fun (_x : G) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : G) => H) _x) (MulHomClass.toFunLike.{u1, u3, u2} F G H (MulOneClass.toMul.{u3} G (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3)))) (MulOneClass.toMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4)))) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F G H (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4))) _inst_5)) f (Inv.inv.{u3} G (InvOneClass.toInv.{u3} G (DivInvOneMonoid.toInvOneClass.{u3} G (DivisionMonoid.toDivInvOneMonoid.{u3} G (Group.toDivisionMonoid.{u3} G _inst_3)))) a)) (Inv.inv.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : G) => H) a) (InvOneClass.toInv.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : G) => H) a) (DivInvOneMonoid.toInvOneClass.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : G) => H) a) (DivisionMonoid.toDivInvOneMonoid.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : G) => H) a) _inst_4))) (FunLike.coe.{succ u1, succ u3, succ u2} F G (fun (_x : G) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : G) => H) _x) (MulHomClass.toFunLike.{u1, u3, u2} F G H (MulOneClass.toMul.{u3} G (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3)))) (MulOneClass.toMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4)))) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F G H (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4))) _inst_5)) f a))
+  forall {G : Type.{u3}} {H : Type.{u2}} {F : Type.{u1}} [_inst_3 : Group.{u3} G] [_inst_4 : DivisionMonoid.{u2} H] [_inst_5 : MonoidHomClass.{u1, u3, u2} F G H (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4)))] (f : F) (a : G), Eq.{succ u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : G) => H) (Inv.inv.{u3} G (InvOneClass.toInv.{u3} G (DivInvOneMonoid.toInvOneClass.{u3} G (DivisionMonoid.toDivInvOneMonoid.{u3} G (Group.toDivisionMonoid.{u3} G _inst_3)))) a)) (FunLike.coe.{succ u1, succ u3, succ u2} F G (fun (_x : G) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : G) => H) _x) (MulHomClass.toFunLike.{u1, u3, u2} F G H (MulOneClass.toMul.{u3} G (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3)))) (MulOneClass.toMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4)))) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F G H (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4))) _inst_5)) f (Inv.inv.{u3} G (InvOneClass.toInv.{u3} G (DivInvOneMonoid.toInvOneClass.{u3} G (DivisionMonoid.toDivInvOneMonoid.{u3} G (Group.toDivisionMonoid.{u3} G _inst_3)))) a)) (Inv.inv.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : G) => H) a) (InvOneClass.toInv.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : G) => H) a) (DivInvOneMonoid.toInvOneClass.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : G) => H) a) (DivisionMonoid.toDivInvOneMonoid.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : G) => H) a) _inst_4))) (FunLike.coe.{succ u1, succ u3, succ u2} F G (fun (_x : G) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : G) => H) _x) (MulHomClass.toFunLike.{u1, u3, u2} F G H (MulOneClass.toMul.{u3} G (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3)))) (MulOneClass.toMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4)))) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F G H (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4))) _inst_5)) f a))
 Case conversion may be inaccurate. Consider using '#align map_inv map_invₓ'. -/
 /-- Group homomorphisms preserve inverse. -/
 @[simp, to_additive "Additive group homomorphisms preserve negation."]
@@ -509,7 +509,7 @@ theorem map_inv [Group G] [DivisionMonoid H] [MonoidHomClass F G H] (f : F) (a :
 lean 3 declaration is
   forall {G : Type.{u1}} {H : Type.{u2}} {F : Type.{u3}} [_inst_3 : Group.{u1} G] [_inst_4 : DivisionMonoid.{u2} H] [_inst_5 : MonoidHomClass.{u3, u1, u2} F G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4)))] (f : F) (a : G) (b : G), Eq.{succ u2} H (coeFn.{succ u3, max (succ u1) (succ u2)} F (fun (_x : F) => G -> H) (FunLike.hasCoeToFun.{succ u3, succ u1, succ u2} F G (fun (_x : G) => H) (MulHomClass.toFunLike.{u3, u1, u2} F G H (MulOneClass.toHasMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (MulOneClass.toHasMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4)))) (MonoidHomClass.toMulHomClass.{u3, u1, u2} F G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4))) _inst_5))) f (HMul.hMul.{u1, u1, u1} G G G (instHMul.{u1} G (MulOneClass.toHasMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3))))) a (Inv.inv.{u1} G (DivInvMonoid.toHasInv.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)) b))) (HMul.hMul.{u2, u2, u2} H H H (instHMul.{u2} H (MulOneClass.toHasMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4))))) (coeFn.{succ u3, max (succ u1) (succ u2)} F (fun (_x : F) => G -> H) (FunLike.hasCoeToFun.{succ u3, succ u1, succ u2} F G (fun (_x : G) => H) (MulHomClass.toFunLike.{u3, u1, u2} F G H (MulOneClass.toHasMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (MulOneClass.toHasMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4)))) (MonoidHomClass.toMulHomClass.{u3, u1, u2} F G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4))) _inst_5))) f a) (Inv.inv.{u2} H (DivInvMonoid.toHasInv.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4)) (coeFn.{succ u3, max (succ u1) (succ u2)} F (fun (_x : F) => G -> H) (FunLike.hasCoeToFun.{succ u3, succ u1, succ u2} F G (fun (_x : G) => H) (MulHomClass.toFunLike.{u3, u1, u2} F G H (MulOneClass.toHasMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (MulOneClass.toHasMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4)))) (MonoidHomClass.toMulHomClass.{u3, u1, u2} F G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4))) _inst_5))) f b)))
 but is expected to have type
-  forall {G : Type.{u3}} {H : Type.{u2}} {F : Type.{u1}} [_inst_3 : Group.{u3} G] [_inst_4 : DivisionMonoid.{u2} H] [_inst_5 : MonoidHomClass.{u1, u3, u2} F G H (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4)))] (f : F) (a : G) (b : G), Eq.{succ u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : G) => H) (HMul.hMul.{u3, u3, u3} G G G (instHMul.{u3} G (MulOneClass.toMul.{u3} G (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3))))) a (Inv.inv.{u3} G (InvOneClass.toInv.{u3} G (DivInvOneMonoid.toInvOneClass.{u3} G (DivisionMonoid.toDivInvOneMonoid.{u3} G (Group.toDivisionMonoid.{u3} G _inst_3)))) b))) (FunLike.coe.{succ u1, succ u3, succ u2} F G (fun (_x : G) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : G) => H) _x) (MulHomClass.toFunLike.{u1, u3, u2} F G H (MulOneClass.toMul.{u3} G (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3)))) (MulOneClass.toMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4)))) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F G H (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4))) _inst_5)) f (HMul.hMul.{u3, u3, u3} G G G (instHMul.{u3} G (MulOneClass.toMul.{u3} G (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3))))) a (Inv.inv.{u3} G (InvOneClass.toInv.{u3} G (DivInvOneMonoid.toInvOneClass.{u3} G (DivisionMonoid.toDivInvOneMonoid.{u3} G (Group.toDivisionMonoid.{u3} G _inst_3)))) b))) (HMul.hMul.{u2, u2, u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : G) => H) a) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : G) => H) b) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : G) => H) a) (instHMul.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : G) => H) a) (MulOneClass.toMul.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : G) => H) a) (Monoid.toMulOneClass.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : G) => H) a) (DivInvMonoid.toMonoid.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : G) => H) a) (DivisionMonoid.toDivInvMonoid.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : G) => H) a) _inst_4))))) (FunLike.coe.{succ u1, succ u3, succ u2} F G (fun (_x : G) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : G) => H) _x) (MulHomClass.toFunLike.{u1, u3, u2} F G H (MulOneClass.toMul.{u3} G (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3)))) (MulOneClass.toMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4)))) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F G H (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4))) _inst_5)) f a) (Inv.inv.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : G) => H) b) (InvOneClass.toInv.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : G) => H) b) (DivInvOneMonoid.toInvOneClass.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : G) => H) b) (DivisionMonoid.toDivInvOneMonoid.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : G) => H) b) _inst_4))) (FunLike.coe.{succ u1, succ u3, succ u2} F G (fun (_x : G) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : G) => H) _x) (MulHomClass.toFunLike.{u1, u3, u2} F G H (MulOneClass.toMul.{u3} G (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3)))) (MulOneClass.toMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4)))) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F G H (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4))) _inst_5)) f b)))
+  forall {G : Type.{u3}} {H : Type.{u2}} {F : Type.{u1}} [_inst_3 : Group.{u3} G] [_inst_4 : DivisionMonoid.{u2} H] [_inst_5 : MonoidHomClass.{u1, u3, u2} F G H (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4)))] (f : F) (a : G) (b : G), Eq.{succ u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : G) => H) (HMul.hMul.{u3, u3, u3} G G G (instHMul.{u3} G (MulOneClass.toMul.{u3} G (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3))))) a (Inv.inv.{u3} G (InvOneClass.toInv.{u3} G (DivInvOneMonoid.toInvOneClass.{u3} G (DivisionMonoid.toDivInvOneMonoid.{u3} G (Group.toDivisionMonoid.{u3} G _inst_3)))) b))) (FunLike.coe.{succ u1, succ u3, succ u2} F G (fun (_x : G) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : G) => H) _x) (MulHomClass.toFunLike.{u1, u3, u2} F G H (MulOneClass.toMul.{u3} G (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3)))) (MulOneClass.toMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4)))) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F G H (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4))) _inst_5)) f (HMul.hMul.{u3, u3, u3} G G G (instHMul.{u3} G (MulOneClass.toMul.{u3} G (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3))))) a (Inv.inv.{u3} G (InvOneClass.toInv.{u3} G (DivInvOneMonoid.toInvOneClass.{u3} G (DivisionMonoid.toDivInvOneMonoid.{u3} G (Group.toDivisionMonoid.{u3} G _inst_3)))) b))) (HMul.hMul.{u2, u2, u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : G) => H) a) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : G) => H) b) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : G) => H) a) (instHMul.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : G) => H) a) (MulOneClass.toMul.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : G) => H) a) (Monoid.toMulOneClass.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : G) => H) a) (DivInvMonoid.toMonoid.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : G) => H) a) (DivisionMonoid.toDivInvMonoid.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : G) => H) a) _inst_4))))) (FunLike.coe.{succ u1, succ u3, succ u2} F G (fun (_x : G) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : G) => H) _x) (MulHomClass.toFunLike.{u1, u3, u2} F G H (MulOneClass.toMul.{u3} G (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3)))) (MulOneClass.toMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4)))) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F G H (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4))) _inst_5)) f a) (Inv.inv.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : G) => H) b) (InvOneClass.toInv.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : G) => H) b) (DivInvOneMonoid.toInvOneClass.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : G) => H) b) (DivisionMonoid.toDivInvOneMonoid.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : G) => H) b) _inst_4))) (FunLike.coe.{succ u1, succ u3, succ u2} F G (fun (_x : G) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : G) => H) _x) (MulHomClass.toFunLike.{u1, u3, u2} F G H (MulOneClass.toMul.{u3} G (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3)))) (MulOneClass.toMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4)))) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F G H (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4))) _inst_5)) f b)))
 Case conversion may be inaccurate. Consider using '#align map_mul_inv map_mul_invₓ'. -/
 /-- Group homomorphisms preserve division. -/
 @[simp, to_additive "Additive group homomorphisms preserve subtraction."]
@@ -522,7 +522,7 @@ theorem map_mul_inv [Group G] [DivisionMonoid H] [MonoidHomClass F G H] (f : F)
 lean 3 declaration is
   forall {G : Type.{u1}} {H : Type.{u2}} {F : Type.{u3}} [_inst_3 : Group.{u1} G] [_inst_4 : DivisionMonoid.{u2} H] [_inst_5 : MonoidHomClass.{u3, u1, u2} F G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4)))] (f : F) (a : G) (b : G), Eq.{succ u2} H (coeFn.{succ u3, max (succ u1) (succ u2)} F (fun (_x : F) => G -> H) (FunLike.hasCoeToFun.{succ u3, succ u1, succ u2} F G (fun (_x : G) => H) (MulHomClass.toFunLike.{u3, u1, u2} F G H (MulOneClass.toHasMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (MulOneClass.toHasMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4)))) (MonoidHomClass.toMulHomClass.{u3, u1, u2} F G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4))) _inst_5))) f (HDiv.hDiv.{u1, u1, u1} G G G (instHDiv.{u1} G (DivInvMonoid.toHasDiv.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3))) a b)) (HDiv.hDiv.{u2, u2, u2} H H H (instHDiv.{u2} H (DivInvMonoid.toHasDiv.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4))) (coeFn.{succ u3, max (succ u1) (succ u2)} F (fun (_x : F) => G -> H) (FunLike.hasCoeToFun.{succ u3, succ u1, succ u2} F G (fun (_x : G) => H) (MulHomClass.toFunLike.{u3, u1, u2} F G H (MulOneClass.toHasMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (MulOneClass.toHasMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4)))) (MonoidHomClass.toMulHomClass.{u3, u1, u2} F G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4))) _inst_5))) f a) (coeFn.{succ u3, max (succ u1) (succ u2)} F (fun (_x : F) => G -> H) (FunLike.hasCoeToFun.{succ u3, succ u1, succ u2} F G (fun (_x : G) => H) (MulHomClass.toFunLike.{u3, u1, u2} F G H (MulOneClass.toHasMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (MulOneClass.toHasMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4)))) (MonoidHomClass.toMulHomClass.{u3, u1, u2} F G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4))) _inst_5))) f b))
 but is expected to have type
-  forall {G : Type.{u3}} {H : Type.{u2}} {F : Type.{u1}} [_inst_3 : Group.{u3} G] [_inst_4 : DivisionMonoid.{u2} H] [_inst_5 : MonoidHomClass.{u1, u3, u2} F G H (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4)))] (f : F) (a : G) (b : G), Eq.{succ u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : G) => H) (HDiv.hDiv.{u3, u3, u3} G G G (instHDiv.{u3} G (DivInvMonoid.toDiv.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3))) a b)) (FunLike.coe.{succ u1, succ u3, succ u2} F G (fun (_x : G) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : G) => H) _x) (MulHomClass.toFunLike.{u1, u3, u2} F G H (MulOneClass.toMul.{u3} G (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3)))) (MulOneClass.toMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4)))) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F G H (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4))) _inst_5)) f (HDiv.hDiv.{u3, u3, u3} G G G (instHDiv.{u3} G (DivInvMonoid.toDiv.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3))) a b)) (HDiv.hDiv.{u2, u2, u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : G) => H) a) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : G) => H) b) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : G) => H) a) (instHDiv.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : G) => H) a) (DivInvMonoid.toDiv.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : G) => H) a) (DivisionMonoid.toDivInvMonoid.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : G) => H) a) _inst_4))) (FunLike.coe.{succ u1, succ u3, succ u2} F G (fun (_x : G) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : G) => H) _x) (MulHomClass.toFunLike.{u1, u3, u2} F G H (MulOneClass.toMul.{u3} G (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3)))) (MulOneClass.toMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4)))) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F G H (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4))) _inst_5)) f a) (FunLike.coe.{succ u1, succ u3, succ u2} F G (fun (_x : G) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : G) => H) _x) (MulHomClass.toFunLike.{u1, u3, u2} F G H (MulOneClass.toMul.{u3} G (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3)))) (MulOneClass.toMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4)))) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F G H (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4))) _inst_5)) f b))
+  forall {G : Type.{u3}} {H : Type.{u2}} {F : Type.{u1}} [_inst_3 : Group.{u3} G] [_inst_4 : DivisionMonoid.{u2} H] [_inst_5 : MonoidHomClass.{u1, u3, u2} F G H (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4)))] (f : F) (a : G) (b : G), Eq.{succ u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : G) => H) (HDiv.hDiv.{u3, u3, u3} G G G (instHDiv.{u3} G (DivInvMonoid.toDiv.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3))) a b)) (FunLike.coe.{succ u1, succ u3, succ u2} F G (fun (_x : G) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : G) => H) _x) (MulHomClass.toFunLike.{u1, u3, u2} F G H (MulOneClass.toMul.{u3} G (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3)))) (MulOneClass.toMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4)))) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F G H (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4))) _inst_5)) f (HDiv.hDiv.{u3, u3, u3} G G G (instHDiv.{u3} G (DivInvMonoid.toDiv.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3))) a b)) (HDiv.hDiv.{u2, u2, u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : G) => H) a) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : G) => H) b) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : G) => H) a) (instHDiv.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : G) => H) a) (DivInvMonoid.toDiv.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : G) => H) a) (DivisionMonoid.toDivInvMonoid.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : G) => H) a) _inst_4))) (FunLike.coe.{succ u1, succ u3, succ u2} F G (fun (_x : G) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : G) => H) _x) (MulHomClass.toFunLike.{u1, u3, u2} F G H (MulOneClass.toMul.{u3} G (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3)))) (MulOneClass.toMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4)))) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F G H (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4))) _inst_5)) f a) (FunLike.coe.{succ u1, succ u3, succ u2} F G (fun (_x : G) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : G) => H) _x) (MulHomClass.toFunLike.{u1, u3, u2} F G H (MulOneClass.toMul.{u3} G (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3)))) (MulOneClass.toMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4)))) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F G H (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4))) _inst_5)) f b))
 Case conversion may be inaccurate. Consider using '#align map_div map_divₓ'. -/
 /-- Group homomorphisms preserve division. -/
 @[simp, to_additive "Additive group homomorphisms preserve subtraction."]
@@ -536,7 +536,7 @@ theorem map_div [Group G] [DivisionMonoid H] [MonoidHomClass F G H] (f : F) :
 lean 3 declaration is
   forall {G : Type.{u1}} {H : Type.{u2}} {F : Type.{u3}} [_inst_3 : Monoid.{u1} G] [_inst_4 : Monoid.{u2} H] [_inst_5 : MonoidHomClass.{u3, u1, u2} F G H (Monoid.toMulOneClass.{u1} G _inst_3) (Monoid.toMulOneClass.{u2} H _inst_4)] (f : F) (a : G) (n : Nat), Eq.{succ u2} H (coeFn.{succ u3, max (succ u1) (succ u2)} F (fun (_x : F) => G -> H) (FunLike.hasCoeToFun.{succ u3, succ u1, succ u2} F G (fun (_x : G) => H) (MulHomClass.toFunLike.{u3, u1, u2} F G H (MulOneClass.toHasMul.{u1} G (Monoid.toMulOneClass.{u1} G _inst_3)) (MulOneClass.toHasMul.{u2} H (Monoid.toMulOneClass.{u2} H _inst_4)) (MonoidHomClass.toMulHomClass.{u3, u1, u2} F G H (Monoid.toMulOneClass.{u1} G _inst_3) (Monoid.toMulOneClass.{u2} H _inst_4) _inst_5))) f (HPow.hPow.{u1, 0, u1} G Nat G (instHPow.{u1, 0} G Nat (Monoid.Pow.{u1} G _inst_3)) a n)) (HPow.hPow.{u2, 0, u2} H Nat H (instHPow.{u2, 0} H Nat (Monoid.Pow.{u2} H _inst_4)) (coeFn.{succ u3, max (succ u1) (succ u2)} F (fun (_x : F) => G -> H) (FunLike.hasCoeToFun.{succ u3, succ u1, succ u2} F G (fun (_x : G) => H) (MulHomClass.toFunLike.{u3, u1, u2} F G H (MulOneClass.toHasMul.{u1} G (Monoid.toMulOneClass.{u1} G _inst_3)) (MulOneClass.toHasMul.{u2} H (Monoid.toMulOneClass.{u2} H _inst_4)) (MonoidHomClass.toMulHomClass.{u3, u1, u2} F G H (Monoid.toMulOneClass.{u1} G _inst_3) (Monoid.toMulOneClass.{u2} H _inst_4) _inst_5))) f a) n)
 but is expected to have type
-  forall {G : Type.{u3}} {H : Type.{u2}} {F : Type.{u1}} [_inst_3 : Monoid.{u3} G] [_inst_4 : Monoid.{u2} H] [_inst_5 : MonoidHomClass.{u1, u3, u2} F G H (Monoid.toMulOneClass.{u3} G _inst_3) (Monoid.toMulOneClass.{u2} H _inst_4)] (f : F) (a : G) (n : Nat), Eq.{succ u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : G) => H) (HPow.hPow.{u3, 0, u3} G Nat G (instHPow.{u3, 0} G Nat (Monoid.Pow.{u3} G _inst_3)) a n)) (FunLike.coe.{succ u1, succ u3, succ u2} F G (fun (_x : G) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : G) => H) _x) (MulHomClass.toFunLike.{u1, u3, u2} F G H (MulOneClass.toMul.{u3} G (Monoid.toMulOneClass.{u3} G _inst_3)) (MulOneClass.toMul.{u2} H (Monoid.toMulOneClass.{u2} H _inst_4)) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F G H (Monoid.toMulOneClass.{u3} G _inst_3) (Monoid.toMulOneClass.{u2} H _inst_4) _inst_5)) f (HPow.hPow.{u3, 0, u3} G Nat G (instHPow.{u3, 0} G Nat (Monoid.Pow.{u3} G _inst_3)) a n)) (HPow.hPow.{u2, 0, u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : G) => H) a) Nat ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : G) => H) a) (instHPow.{u2, 0} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : G) => H) a) Nat (Monoid.Pow.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : G) => H) a) _inst_4)) (FunLike.coe.{succ u1, succ u3, succ u2} F G (fun (_x : G) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : G) => H) _x) (MulHomClass.toFunLike.{u1, u3, u2} F G H (MulOneClass.toMul.{u3} G (Monoid.toMulOneClass.{u3} G _inst_3)) (MulOneClass.toMul.{u2} H (Monoid.toMulOneClass.{u2} H _inst_4)) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F G H (Monoid.toMulOneClass.{u3} G _inst_3) (Monoid.toMulOneClass.{u2} H _inst_4) _inst_5)) f a) n)
+  forall {G : Type.{u3}} {H : Type.{u2}} {F : Type.{u1}} [_inst_3 : Monoid.{u3} G] [_inst_4 : Monoid.{u2} H] [_inst_5 : MonoidHomClass.{u1, u3, u2} F G H (Monoid.toMulOneClass.{u3} G _inst_3) (Monoid.toMulOneClass.{u2} H _inst_4)] (f : F) (a : G) (n : Nat), Eq.{succ u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : G) => H) (HPow.hPow.{u3, 0, u3} G Nat G (instHPow.{u3, 0} G Nat (Monoid.Pow.{u3} G _inst_3)) a n)) (FunLike.coe.{succ u1, succ u3, succ u2} F G (fun (_x : G) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : G) => H) _x) (MulHomClass.toFunLike.{u1, u3, u2} F G H (MulOneClass.toMul.{u3} G (Monoid.toMulOneClass.{u3} G _inst_3)) (MulOneClass.toMul.{u2} H (Monoid.toMulOneClass.{u2} H _inst_4)) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F G H (Monoid.toMulOneClass.{u3} G _inst_3) (Monoid.toMulOneClass.{u2} H _inst_4) _inst_5)) f (HPow.hPow.{u3, 0, u3} G Nat G (instHPow.{u3, 0} G Nat (Monoid.Pow.{u3} G _inst_3)) a n)) (HPow.hPow.{u2, 0, u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : G) => H) a) Nat ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : G) => H) a) (instHPow.{u2, 0} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : G) => H) a) Nat (Monoid.Pow.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : G) => H) a) _inst_4)) (FunLike.coe.{succ u1, succ u3, succ u2} F G (fun (_x : G) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : G) => H) _x) (MulHomClass.toFunLike.{u1, u3, u2} F G H (MulOneClass.toMul.{u3} G (Monoid.toMulOneClass.{u3} G _inst_3)) (MulOneClass.toMul.{u2} H (Monoid.toMulOneClass.{u2} H _inst_4)) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F G H (Monoid.toMulOneClass.{u3} G _inst_3) (Monoid.toMulOneClass.{u2} H _inst_4) _inst_5)) f a) n)
 Case conversion may be inaccurate. Consider using '#align map_pow map_powₓ'. -/
 -- to_additive puts the arguments in the wrong order, so generate an auxiliary lemma, then
 -- swap its arguments.
@@ -552,7 +552,7 @@ theorem map_pow [Monoid G] [Monoid H] [MonoidHomClass F G H] (f : F) (a : G) :
 lean 3 declaration is
   forall {G : Type.{u1}} {H : Type.{u2}} {F : Type.{u3}} [_inst_3 : AddMonoid.{u1} G] [_inst_4 : AddMonoid.{u2} H] [_inst_5 : AddMonoidHomClass.{u3, u1, u2} F G H (AddMonoid.toAddZeroClass.{u1} G _inst_3) (AddMonoid.toAddZeroClass.{u2} H _inst_4)] (f : F) (n : Nat) (a : G), Eq.{succ u2} H (coeFn.{succ u3, max (succ u1) (succ u2)} F (fun (_x : F) => G -> H) (FunLike.hasCoeToFun.{succ u3, succ u1, succ u2} F G (fun (_x : G) => H) (AddHomClass.toFunLike.{u3, u1, u2} F G H (AddZeroClass.toHasAdd.{u1} G (AddMonoid.toAddZeroClass.{u1} G _inst_3)) (AddZeroClass.toHasAdd.{u2} H (AddMonoid.toAddZeroClass.{u2} H _inst_4)) (AddMonoidHomClass.toAddHomClass.{u3, u1, u2} F G H (AddMonoid.toAddZeroClass.{u1} G _inst_3) (AddMonoid.toAddZeroClass.{u2} H _inst_4) _inst_5))) f (SMul.smul.{0, u1} Nat G (AddMonoid.SMul.{u1} G _inst_3) n a)) (SMul.smul.{0, u2} Nat H (AddMonoid.SMul.{u2} H _inst_4) n (coeFn.{succ u3, max (succ u1) (succ u2)} F (fun (_x : F) => G -> H) (FunLike.hasCoeToFun.{succ u3, succ u1, succ u2} F G (fun (_x : G) => H) (AddHomClass.toFunLike.{u3, u1, u2} F G H (AddZeroClass.toHasAdd.{u1} G (AddMonoid.toAddZeroClass.{u1} G _inst_3)) (AddZeroClass.toHasAdd.{u2} H (AddMonoid.toAddZeroClass.{u2} H _inst_4)) (AddMonoidHomClass.toAddHomClass.{u3, u1, u2} F G H (AddMonoid.toAddZeroClass.{u1} G _inst_3) (AddMonoid.toAddZeroClass.{u2} H _inst_4) _inst_5))) f a))
 but is expected to have type
-  forall {G : Type.{u3}} {H : Type.{u2}} {F : Type.{u1}} [_inst_3 : AddMonoid.{u3} G] [_inst_4 : AddMonoid.{u2} H] [_inst_5 : AddMonoidHomClass.{u1, u3, u2} F G H (AddMonoid.toAddZeroClass.{u3} G _inst_3) (AddMonoid.toAddZeroClass.{u2} H _inst_4)] (f : F) (n : Nat) (a : G), Eq.{succ u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : G) => H) (HSMul.hSMul.{0, u3, u3} Nat G G (instHSMul.{0, u3} Nat G (AddMonoid.SMul.{u3} G _inst_3)) n a)) (FunLike.coe.{succ u1, succ u3, succ u2} F G (fun (_x : G) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : G) => H) _x) (AddHomClass.toFunLike.{u1, u3, u2} F G H (AddZeroClass.toAdd.{u3} G (AddMonoid.toAddZeroClass.{u3} G _inst_3)) (AddZeroClass.toAdd.{u2} H (AddMonoid.toAddZeroClass.{u2} H _inst_4)) (AddMonoidHomClass.toAddHomClass.{u1, u3, u2} F G H (AddMonoid.toAddZeroClass.{u3} G _inst_3) (AddMonoid.toAddZeroClass.{u2} H _inst_4) _inst_5)) f (HSMul.hSMul.{0, u3, u3} Nat G G (instHSMul.{0, u3} Nat G (AddMonoid.SMul.{u3} G _inst_3)) n a)) (HSMul.hSMul.{0, u2, u2} Nat ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : G) => H) a) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : G) => H) a) (instHSMul.{0, u2} Nat ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : G) => H) a) (AddMonoid.SMul.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : G) => H) a) _inst_4)) n (FunLike.coe.{succ u1, succ u3, succ u2} F G (fun (_x : G) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : G) => H) _x) (AddHomClass.toFunLike.{u1, u3, u2} F G H (AddZeroClass.toAdd.{u3} G (AddMonoid.toAddZeroClass.{u3} G _inst_3)) (AddZeroClass.toAdd.{u2} H (AddMonoid.toAddZeroClass.{u2} H _inst_4)) (AddMonoidHomClass.toAddHomClass.{u1, u3, u2} F G H (AddMonoid.toAddZeroClass.{u3} G _inst_3) (AddMonoid.toAddZeroClass.{u2} H _inst_4) _inst_5)) f a))
+  forall {G : Type.{u3}} {H : Type.{u2}} {F : Type.{u1}} [_inst_3 : AddMonoid.{u3} G] [_inst_4 : AddMonoid.{u2} H] [_inst_5 : AddMonoidHomClass.{u1, u3, u2} F G H (AddMonoid.toAddZeroClass.{u3} G _inst_3) (AddMonoid.toAddZeroClass.{u2} H _inst_4)] (f : F) (n : Nat) (a : G), Eq.{succ u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : G) => H) (HSMul.hSMul.{0, u3, u3} Nat G G (instHSMul.{0, u3} Nat G (AddMonoid.SMul.{u3} G _inst_3)) n a)) (FunLike.coe.{succ u1, succ u3, succ u2} F G (fun (_x : G) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : G) => H) _x) (AddHomClass.toFunLike.{u1, u3, u2} F G H (AddZeroClass.toAdd.{u3} G (AddMonoid.toAddZeroClass.{u3} G _inst_3)) (AddZeroClass.toAdd.{u2} H (AddMonoid.toAddZeroClass.{u2} H _inst_4)) (AddMonoidHomClass.toAddHomClass.{u1, u3, u2} F G H (AddMonoid.toAddZeroClass.{u3} G _inst_3) (AddMonoid.toAddZeroClass.{u2} H _inst_4) _inst_5)) f (HSMul.hSMul.{0, u3, u3} Nat G G (instHSMul.{0, u3} Nat G (AddMonoid.SMul.{u3} G _inst_3)) n a)) (HSMul.hSMul.{0, u2, u2} Nat ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : G) => H) a) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : G) => H) a) (instHSMul.{0, u2} Nat ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : G) => H) a) (AddMonoid.SMul.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : G) => H) a) _inst_4)) n (FunLike.coe.{succ u1, succ u3, succ u2} F G (fun (_x : G) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : G) => H) _x) (AddHomClass.toFunLike.{u1, u3, u2} F G H (AddZeroClass.toAdd.{u3} G (AddMonoid.toAddZeroClass.{u3} G _inst_3)) (AddZeroClass.toAdd.{u2} H (AddMonoid.toAddZeroClass.{u2} H _inst_4)) (AddMonoidHomClass.toAddHomClass.{u1, u3, u2} F G H (AddMonoid.toAddZeroClass.{u3} G _inst_3) (AddMonoid.toAddZeroClass.{u2} H _inst_4) _inst_5)) f a))
 Case conversion may be inaccurate. Consider using '#align map_nsmul map_nsmulₓ'. -/
 @[simp]
 theorem map_nsmul [AddMonoid G] [AddMonoid H] [AddMonoidHomClass F G H] (f : F) (n : ℕ) (a : G) :
@@ -566,7 +566,7 @@ attribute [to_additive_reorder 8, to_additive] map_pow
 lean 3 declaration is
   forall {G : Type.{u1}} {H : Type.{u2}} {F : Type.{u3}} [_inst_3 : DivInvMonoid.{u1} G] [_inst_4 : DivInvMonoid.{u2} H] [_inst_5 : MonoidHomClass.{u3, u1, u2} F G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G _inst_3)) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H _inst_4))] (f : F), (forall (x : G), Eq.{succ u2} H (coeFn.{succ u3, max (succ u1) (succ u2)} F (fun (_x : F) => G -> H) (FunLike.hasCoeToFun.{succ u3, succ u1, succ u2} F G (fun (_x : G) => H) (MulHomClass.toFunLike.{u3, u1, u2} F G H (MulOneClass.toHasMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G _inst_3))) (MulOneClass.toHasMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H _inst_4))) (MonoidHomClass.toMulHomClass.{u3, u1, u2} F G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G _inst_3)) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H _inst_4)) _inst_5))) f (Inv.inv.{u1} G (DivInvMonoid.toHasInv.{u1} G _inst_3) x)) (Inv.inv.{u2} H (DivInvMonoid.toHasInv.{u2} H _inst_4) (coeFn.{succ u3, max (succ u1) (succ u2)} F (fun (_x : F) => G -> H) (FunLike.hasCoeToFun.{succ u3, succ u1, succ u2} F G (fun (_x : G) => H) (MulHomClass.toFunLike.{u3, u1, u2} F G H (MulOneClass.toHasMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G _inst_3))) (MulOneClass.toHasMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H _inst_4))) (MonoidHomClass.toMulHomClass.{u3, u1, u2} F G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G _inst_3)) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H _inst_4)) _inst_5))) f x))) -> (forall (a : G) (n : Int), Eq.{succ u2} H (coeFn.{succ u3, max (succ u1) (succ u2)} F (fun (_x : F) => G -> H) (FunLike.hasCoeToFun.{succ u3, succ u1, succ u2} F G (fun (_x : G) => H) (MulHomClass.toFunLike.{u3, u1, u2} F G H (MulOneClass.toHasMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G _inst_3))) (MulOneClass.toHasMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H _inst_4))) (MonoidHomClass.toMulHomClass.{u3, u1, u2} F G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G _inst_3)) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H _inst_4)) _inst_5))) f (HPow.hPow.{u1, 0, u1} G Int G (instHPow.{u1, 0} G Int (DivInvMonoid.Pow.{u1} G _inst_3)) a n)) (HPow.hPow.{u2, 0, u2} H Int H (instHPow.{u2, 0} H Int (DivInvMonoid.Pow.{u2} H _inst_4)) (coeFn.{succ u3, max (succ u1) (succ u2)} F (fun (_x : F) => G -> H) (FunLike.hasCoeToFun.{succ u3, succ u1, succ u2} F G (fun (_x : G) => H) (MulHomClass.toFunLike.{u3, u1, u2} F G H (MulOneClass.toHasMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G _inst_3))) (MulOneClass.toHasMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H _inst_4))) (MonoidHomClass.toMulHomClass.{u3, u1, u2} F G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G _inst_3)) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H _inst_4)) _inst_5))) f a) n))
 but is expected to have type
-  forall {G : Type.{u3}} {H : Type.{u2}} {F : Type.{u1}} [_inst_3 : DivInvMonoid.{u3} G] [_inst_4 : DivInvMonoid.{u2} H] [_inst_5 : MonoidHomClass.{u1, u3, u2} F G H (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G _inst_3)) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H _inst_4))] (f : F), (forall (x : G), Eq.{succ u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : G) => H) (Inv.inv.{u3} G (DivInvMonoid.toInv.{u3} G _inst_3) x)) (FunLike.coe.{succ u1, succ u3, succ u2} F G (fun (_x : G) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : G) => H) _x) (MulHomClass.toFunLike.{u1, u3, u2} F G H (MulOneClass.toMul.{u3} G (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G _inst_3))) (MulOneClass.toMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H _inst_4))) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F G H (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G _inst_3)) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H _inst_4)) _inst_5)) f (Inv.inv.{u3} G (DivInvMonoid.toInv.{u3} G _inst_3) x)) (Inv.inv.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : G) => H) x) (DivInvMonoid.toInv.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : G) => H) x) _inst_4) (FunLike.coe.{succ u1, succ u3, succ u2} F G (fun (_x : G) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : G) => H) _x) (MulHomClass.toFunLike.{u1, u3, u2} F G H (MulOneClass.toMul.{u3} G (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G _inst_3))) (MulOneClass.toMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H _inst_4))) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F G H (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G _inst_3)) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H _inst_4)) _inst_5)) f x))) -> (forall (a : G) (n : Int), Eq.{succ u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : G) => H) (HPow.hPow.{u3, 0, u3} G Int G (instHPow.{u3, 0} G Int (DivInvMonoid.Pow.{u3} G _inst_3)) a n)) (FunLike.coe.{succ u1, succ u3, succ u2} F G (fun (_x : G) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : G) => H) _x) (MulHomClass.toFunLike.{u1, u3, u2} F G H (MulOneClass.toMul.{u3} G (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G _inst_3))) (MulOneClass.toMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H _inst_4))) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F G H (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G _inst_3)) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H _inst_4)) _inst_5)) f (HPow.hPow.{u3, 0, u3} G Int G (instHPow.{u3, 0} G Int (DivInvMonoid.Pow.{u3} G _inst_3)) a n)) (HPow.hPow.{u2, 0, u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : G) => H) a) Int ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : G) => H) a) (instHPow.{u2, 0} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : G) => H) a) Int (DivInvMonoid.Pow.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : G) => H) a) _inst_4)) (FunLike.coe.{succ u1, succ u3, succ u2} F G (fun (_x : G) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : G) => H) _x) (MulHomClass.toFunLike.{u1, u3, u2} F G H (MulOneClass.toMul.{u3} G (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G _inst_3))) (MulOneClass.toMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H _inst_4))) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F G H (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G _inst_3)) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H _inst_4)) _inst_5)) f a) n))
+  forall {G : Type.{u3}} {H : Type.{u2}} {F : Type.{u1}} [_inst_3 : DivInvMonoid.{u3} G] [_inst_4 : DivInvMonoid.{u2} H] [_inst_5 : MonoidHomClass.{u1, u3, u2} F G H (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G _inst_3)) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H _inst_4))] (f : F), (forall (x : G), Eq.{succ u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : G) => H) (Inv.inv.{u3} G (DivInvMonoid.toInv.{u3} G _inst_3) x)) (FunLike.coe.{succ u1, succ u3, succ u2} F G (fun (_x : G) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : G) => H) _x) (MulHomClass.toFunLike.{u1, u3, u2} F G H (MulOneClass.toMul.{u3} G (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G _inst_3))) (MulOneClass.toMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H _inst_4))) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F G H (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G _inst_3)) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H _inst_4)) _inst_5)) f (Inv.inv.{u3} G (DivInvMonoid.toInv.{u3} G _inst_3) x)) (Inv.inv.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : G) => H) x) (DivInvMonoid.toInv.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : G) => H) x) _inst_4) (FunLike.coe.{succ u1, succ u3, succ u2} F G (fun (_x : G) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : G) => H) _x) (MulHomClass.toFunLike.{u1, u3, u2} F G H (MulOneClass.toMul.{u3} G (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G _inst_3))) (MulOneClass.toMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H _inst_4))) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F G H (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G _inst_3)) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H _inst_4)) _inst_5)) f x))) -> (forall (a : G) (n : Int), Eq.{succ u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : G) => H) (HPow.hPow.{u3, 0, u3} G Int G (instHPow.{u3, 0} G Int (DivInvMonoid.Pow.{u3} G _inst_3)) a n)) (FunLike.coe.{succ u1, succ u3, succ u2} F G (fun (_x : G) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : G) => H) _x) (MulHomClass.toFunLike.{u1, u3, u2} F G H (MulOneClass.toMul.{u3} G (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G _inst_3))) (MulOneClass.toMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H _inst_4))) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F G H (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G _inst_3)) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H _inst_4)) _inst_5)) f (HPow.hPow.{u3, 0, u3} G Int G (instHPow.{u3, 0} G Int (DivInvMonoid.Pow.{u3} G _inst_3)) a n)) (HPow.hPow.{u2, 0, u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : G) => H) a) Int ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : G) => H) a) (instHPow.{u2, 0} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : G) => H) a) Int (DivInvMonoid.Pow.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : G) => H) a) _inst_4)) (FunLike.coe.{succ u1, succ u3, succ u2} F G (fun (_x : G) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : G) => H) _x) (MulHomClass.toFunLike.{u1, u3, u2} F G H (MulOneClass.toMul.{u3} G (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G _inst_3))) (MulOneClass.toMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H _inst_4))) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F G H (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G _inst_3)) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H _inst_4)) _inst_5)) f a) n))
 Case conversion may be inaccurate. Consider using '#align map_zpow' map_zpow'ₓ'. -/
 @[to_additive]
 theorem map_zpow' [DivInvMonoid G] [DivInvMonoid H] [MonoidHomClass F G H] (f : F)
@@ -580,7 +580,7 @@ theorem map_zpow' [DivInvMonoid G] [DivInvMonoid H] [MonoidHomClass F G H] (f :
 lean 3 declaration is
   forall {G : Type.{u1}} {H : Type.{u2}} {F : Type.{u3}} [_inst_3 : Group.{u1} G] [_inst_4 : DivisionMonoid.{u2} H] [_inst_5 : MonoidHomClass.{u3, u1, u2} F G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4)))] (f : F) (g : G) (n : Int), Eq.{succ u2} H (coeFn.{succ u3, max (succ u1) (succ u2)} F (fun (_x : F) => G -> H) (FunLike.hasCoeToFun.{succ u3, succ u1, succ u2} F G (fun (_x : G) => H) (MulHomClass.toFunLike.{u3, u1, u2} F G H (MulOneClass.toHasMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (MulOneClass.toHasMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4)))) (MonoidHomClass.toMulHomClass.{u3, u1, u2} F G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4))) _inst_5))) f (HPow.hPow.{u1, 0, u1} G Int G (instHPow.{u1, 0} G Int (DivInvMonoid.Pow.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3))) g n)) (HPow.hPow.{u2, 0, u2} H Int H (instHPow.{u2, 0} H Int (DivInvMonoid.Pow.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4))) (coeFn.{succ u3, max (succ u1) (succ u2)} F (fun (_x : F) => G -> H) (FunLike.hasCoeToFun.{succ u3, succ u1, succ u2} F G (fun (_x : G) => H) (MulHomClass.toFunLike.{u3, u1, u2} F G H (MulOneClass.toHasMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (MulOneClass.toHasMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4)))) (MonoidHomClass.toMulHomClass.{u3, u1, u2} F G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4))) _inst_5))) f g) n)
 but is expected to have type
-  forall {G : Type.{u3}} {H : Type.{u2}} {F : Type.{u1}} [_inst_3 : Group.{u3} G] [_inst_4 : DivisionMonoid.{u2} H] [_inst_5 : MonoidHomClass.{u1, u3, u2} F G H (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4)))] (f : F) (g : G) (n : Int), Eq.{succ u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : G) => H) (HPow.hPow.{u3, 0, u3} G Int G (instHPow.{u3, 0} G Int (DivInvMonoid.Pow.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3))) g n)) (FunLike.coe.{succ u1, succ u3, succ u2} F G (fun (_x : G) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : G) => H) _x) (MulHomClass.toFunLike.{u1, u3, u2} F G H (MulOneClass.toMul.{u3} G (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3)))) (MulOneClass.toMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4)))) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F G H (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4))) _inst_5)) f (HPow.hPow.{u3, 0, u3} G Int G (instHPow.{u3, 0} G Int (DivInvMonoid.Pow.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3))) g n)) (HPow.hPow.{u2, 0, u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : G) => H) g) Int ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : G) => H) g) (instHPow.{u2, 0} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : G) => H) g) Int (DivInvMonoid.Pow.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : G) => H) g) (DivisionMonoid.toDivInvMonoid.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : G) => H) g) _inst_4))) (FunLike.coe.{succ u1, succ u3, succ u2} F G (fun (_x : G) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : G) => H) _x) (MulHomClass.toFunLike.{u1, u3, u2} F G H (MulOneClass.toMul.{u3} G (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3)))) (MulOneClass.toMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4)))) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F G H (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4))) _inst_5)) f g) n)
+  forall {G : Type.{u3}} {H : Type.{u2}} {F : Type.{u1}} [_inst_3 : Group.{u3} G] [_inst_4 : DivisionMonoid.{u2} H] [_inst_5 : MonoidHomClass.{u1, u3, u2} F G H (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4)))] (f : F) (g : G) (n : Int), Eq.{succ u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : G) => H) (HPow.hPow.{u3, 0, u3} G Int G (instHPow.{u3, 0} G Int (DivInvMonoid.Pow.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3))) g n)) (FunLike.coe.{succ u1, succ u3, succ u2} F G (fun (_x : G) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : G) => H) _x) (MulHomClass.toFunLike.{u1, u3, u2} F G H (MulOneClass.toMul.{u3} G (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3)))) (MulOneClass.toMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4)))) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F G H (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4))) _inst_5)) f (HPow.hPow.{u3, 0, u3} G Int G (instHPow.{u3, 0} G Int (DivInvMonoid.Pow.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3))) g n)) (HPow.hPow.{u2, 0, u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : G) => H) g) Int ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : G) => H) g) (instHPow.{u2, 0} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : G) => H) g) Int (DivInvMonoid.Pow.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : G) => H) g) (DivisionMonoid.toDivInvMonoid.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : G) => H) g) _inst_4))) (FunLike.coe.{succ u1, succ u3, succ u2} F G (fun (_x : G) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : G) => H) _x) (MulHomClass.toFunLike.{u1, u3, u2} F G H (MulOneClass.toMul.{u3} G (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3)))) (MulOneClass.toMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4)))) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F G H (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4))) _inst_5)) f g) n)
 Case conversion may be inaccurate. Consider using '#align map_zpow map_zpowₓ'. -/
 -- to_additive puts the arguments in the wrong order, so generate an auxiliary lemma, then
 -- swap its arguments.
@@ -596,7 +596,7 @@ theorem map_zpow [Group G] [DivisionMonoid H] [MonoidHomClass F G H] (f : F) (g
 lean 3 declaration is
   forall {G : Type.{u1}} {H : Type.{u2}} {F : Type.{u3}} [_inst_3 : AddGroup.{u1} G] [_inst_4 : SubtractionMonoid.{u2} H] [_inst_5 : AddMonoidHomClass.{u3, u1, u2} F G H (AddMonoid.toAddZeroClass.{u1} G (SubNegMonoid.toAddMonoid.{u1} G (AddGroup.toSubNegMonoid.{u1} G _inst_3))) (AddMonoid.toAddZeroClass.{u2} H (SubNegMonoid.toAddMonoid.{u2} H (SubtractionMonoid.toSubNegMonoid.{u2} H _inst_4)))] (f : F) (n : Int) (g : G), Eq.{succ u2} H (coeFn.{succ u3, max (succ u1) (succ u2)} F (fun (_x : F) => G -> H) (FunLike.hasCoeToFun.{succ u3, succ u1, succ u2} F G (fun (_x : G) => H) (AddHomClass.toFunLike.{u3, u1, u2} F G H (AddZeroClass.toHasAdd.{u1} G (AddMonoid.toAddZeroClass.{u1} G (SubNegMonoid.toAddMonoid.{u1} G (AddGroup.toSubNegMonoid.{u1} G _inst_3)))) (AddZeroClass.toHasAdd.{u2} H (AddMonoid.toAddZeroClass.{u2} H (SubNegMonoid.toAddMonoid.{u2} H (SubtractionMonoid.toSubNegMonoid.{u2} H _inst_4)))) (AddMonoidHomClass.toAddHomClass.{u3, u1, u2} F G H (AddMonoid.toAddZeroClass.{u1} G (SubNegMonoid.toAddMonoid.{u1} G (AddGroup.toSubNegMonoid.{u1} G _inst_3))) (AddMonoid.toAddZeroClass.{u2} H (SubNegMonoid.toAddMonoid.{u2} H (SubtractionMonoid.toSubNegMonoid.{u2} H _inst_4))) _inst_5))) f (SMul.smul.{0, u1} Int G (SubNegMonoid.SMulInt.{u1} G (AddGroup.toSubNegMonoid.{u1} G _inst_3)) n g)) (SMul.smul.{0, u2} Int H (SubNegMonoid.SMulInt.{u2} H (SubtractionMonoid.toSubNegMonoid.{u2} H _inst_4)) n (coeFn.{succ u3, max (succ u1) (succ u2)} F (fun (_x : F) => G -> H) (FunLike.hasCoeToFun.{succ u3, succ u1, succ u2} F G (fun (_x : G) => H) (AddHomClass.toFunLike.{u3, u1, u2} F G H (AddZeroClass.toHasAdd.{u1} G (AddMonoid.toAddZeroClass.{u1} G (SubNegMonoid.toAddMonoid.{u1} G (AddGroup.toSubNegMonoid.{u1} G _inst_3)))) (AddZeroClass.toHasAdd.{u2} H (AddMonoid.toAddZeroClass.{u2} H (SubNegMonoid.toAddMonoid.{u2} H (SubtractionMonoid.toSubNegMonoid.{u2} H _inst_4)))) (AddMonoidHomClass.toAddHomClass.{u3, u1, u2} F G H (AddMonoid.toAddZeroClass.{u1} G (SubNegMonoid.toAddMonoid.{u1} G (AddGroup.toSubNegMonoid.{u1} G _inst_3))) (AddMonoid.toAddZeroClass.{u2} H (SubNegMonoid.toAddMonoid.{u2} H (SubtractionMonoid.toSubNegMonoid.{u2} H _inst_4))) _inst_5))) f g))
 but is expected to have type
-  forall {G : Type.{u3}} {H : Type.{u2}} {F : Type.{u1}} [_inst_3 : AddGroup.{u3} G] [_inst_4 : SubtractionMonoid.{u2} H] [_inst_5 : AddMonoidHomClass.{u1, u3, u2} F G H (AddMonoid.toAddZeroClass.{u3} G (SubNegMonoid.toAddMonoid.{u3} G (AddGroup.toSubNegMonoid.{u3} G _inst_3))) (AddMonoid.toAddZeroClass.{u2} H (SubNegMonoid.toAddMonoid.{u2} H (SubtractionMonoid.toSubNegMonoid.{u2} H _inst_4)))] (f : F) (n : Int) (g : G), Eq.{succ u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : G) => H) (HSMul.hSMul.{0, u3, u3} Int G G (instHSMul.{0, u3} Int G (SubNegMonoid.SMulInt.{u3} G (AddGroup.toSubNegMonoid.{u3} G _inst_3))) n g)) (FunLike.coe.{succ u1, succ u3, succ u2} F G (fun (_x : G) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : G) => H) _x) (AddHomClass.toFunLike.{u1, u3, u2} F G H (AddZeroClass.toAdd.{u3} G (AddMonoid.toAddZeroClass.{u3} G (SubNegMonoid.toAddMonoid.{u3} G (AddGroup.toSubNegMonoid.{u3} G _inst_3)))) (AddZeroClass.toAdd.{u2} H (AddMonoid.toAddZeroClass.{u2} H (SubNegMonoid.toAddMonoid.{u2} H (SubtractionMonoid.toSubNegMonoid.{u2} H _inst_4)))) (AddMonoidHomClass.toAddHomClass.{u1, u3, u2} F G H (AddMonoid.toAddZeroClass.{u3} G (SubNegMonoid.toAddMonoid.{u3} G (AddGroup.toSubNegMonoid.{u3} G _inst_3))) (AddMonoid.toAddZeroClass.{u2} H (SubNegMonoid.toAddMonoid.{u2} H (SubtractionMonoid.toSubNegMonoid.{u2} H _inst_4))) _inst_5)) f (HSMul.hSMul.{0, u3, u3} Int G G (instHSMul.{0, u3} Int G (SubNegMonoid.SMulInt.{u3} G (AddGroup.toSubNegMonoid.{u3} G _inst_3))) n g)) (HSMul.hSMul.{0, u2, u2} Int ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : G) => H) g) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : G) => H) g) (instHSMul.{0, u2} Int ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : G) => H) g) (SubNegMonoid.SMulInt.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : G) => H) g) (SubtractionMonoid.toSubNegMonoid.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : G) => H) g) _inst_4))) n (FunLike.coe.{succ u1, succ u3, succ u2} F G (fun (_x : G) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : G) => H) _x) (AddHomClass.toFunLike.{u1, u3, u2} F G H (AddZeroClass.toAdd.{u3} G (AddMonoid.toAddZeroClass.{u3} G (SubNegMonoid.toAddMonoid.{u3} G (AddGroup.toSubNegMonoid.{u3} G _inst_3)))) (AddZeroClass.toAdd.{u2} H (AddMonoid.toAddZeroClass.{u2} H (SubNegMonoid.toAddMonoid.{u2} H (SubtractionMonoid.toSubNegMonoid.{u2} H _inst_4)))) (AddMonoidHomClass.toAddHomClass.{u1, u3, u2} F G H (AddMonoid.toAddZeroClass.{u3} G (SubNegMonoid.toAddMonoid.{u3} G (AddGroup.toSubNegMonoid.{u3} G _inst_3))) (AddMonoid.toAddZeroClass.{u2} H (SubNegMonoid.toAddMonoid.{u2} H (SubtractionMonoid.toSubNegMonoid.{u2} H _inst_4))) _inst_5)) f g))
+  forall {G : Type.{u3}} {H : Type.{u2}} {F : Type.{u1}} [_inst_3 : AddGroup.{u3} G] [_inst_4 : SubtractionMonoid.{u2} H] [_inst_5 : AddMonoidHomClass.{u1, u3, u2} F G H (AddMonoid.toAddZeroClass.{u3} G (SubNegMonoid.toAddMonoid.{u3} G (AddGroup.toSubNegMonoid.{u3} G _inst_3))) (AddMonoid.toAddZeroClass.{u2} H (SubNegMonoid.toAddMonoid.{u2} H (SubtractionMonoid.toSubNegMonoid.{u2} H _inst_4)))] (f : F) (n : Int) (g : G), Eq.{succ u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : G) => H) (HSMul.hSMul.{0, u3, u3} Int G G (instHSMul.{0, u3} Int G (SubNegMonoid.SMulInt.{u3} G (AddGroup.toSubNegMonoid.{u3} G _inst_3))) n g)) (FunLike.coe.{succ u1, succ u3, succ u2} F G (fun (_x : G) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : G) => H) _x) (AddHomClass.toFunLike.{u1, u3, u2} F G H (AddZeroClass.toAdd.{u3} G (AddMonoid.toAddZeroClass.{u3} G (SubNegMonoid.toAddMonoid.{u3} G (AddGroup.toSubNegMonoid.{u3} G _inst_3)))) (AddZeroClass.toAdd.{u2} H (AddMonoid.toAddZeroClass.{u2} H (SubNegMonoid.toAddMonoid.{u2} H (SubtractionMonoid.toSubNegMonoid.{u2} H _inst_4)))) (AddMonoidHomClass.toAddHomClass.{u1, u3, u2} F G H (AddMonoid.toAddZeroClass.{u3} G (SubNegMonoid.toAddMonoid.{u3} G (AddGroup.toSubNegMonoid.{u3} G _inst_3))) (AddMonoid.toAddZeroClass.{u2} H (SubNegMonoid.toAddMonoid.{u2} H (SubtractionMonoid.toSubNegMonoid.{u2} H _inst_4))) _inst_5)) f (HSMul.hSMul.{0, u3, u3} Int G G (instHSMul.{0, u3} Int G (SubNegMonoid.SMulInt.{u3} G (AddGroup.toSubNegMonoid.{u3} G _inst_3))) n g)) (HSMul.hSMul.{0, u2, u2} Int ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : G) => H) g) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : G) => H) g) (instHSMul.{0, u2} Int ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : G) => H) g) (SubNegMonoid.SMulInt.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : G) => H) g) (SubtractionMonoid.toSubNegMonoid.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : G) => H) g) _inst_4))) n (FunLike.coe.{succ u1, succ u3, succ u2} F G (fun (_x : G) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : G) => H) _x) (AddHomClass.toFunLike.{u1, u3, u2} F G H (AddZeroClass.toAdd.{u3} G (AddMonoid.toAddZeroClass.{u3} G (SubNegMonoid.toAddMonoid.{u3} G (AddGroup.toSubNegMonoid.{u3} G _inst_3)))) (AddZeroClass.toAdd.{u2} H (AddMonoid.toAddZeroClass.{u2} H (SubNegMonoid.toAddMonoid.{u2} H (SubtractionMonoid.toSubNegMonoid.{u2} H _inst_4)))) (AddMonoidHomClass.toAddHomClass.{u1, u3, u2} F G H (AddMonoid.toAddZeroClass.{u3} G (SubNegMonoid.toAddMonoid.{u3} G (AddGroup.toSubNegMonoid.{u3} G _inst_3))) (AddMonoid.toAddZeroClass.{u2} H (SubNegMonoid.toAddMonoid.{u2} H (SubtractionMonoid.toSubNegMonoid.{u2} H _inst_4))) _inst_5)) f g))
 Case conversion may be inaccurate. Consider using '#align map_zsmul map_zsmulₓ'. -/
 /-- Additive group homomorphisms preserve integer scaling. -/
 theorem map_zsmul [AddGroup G] [SubtractionMonoid H] [AddMonoidHomClass F G H] (f : F) (n : ℤ)
@@ -668,7 +668,7 @@ instance [MonoidWithZeroHomClass F M N] : CoeTC F (M →*₀ N) :=
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} {F : Type.{u3}} [_inst_1 : MulZeroOneClass.{u1} M] [_inst_2 : MulZeroOneClass.{u2} N] [_inst_3 : MonoidWithZeroHomClass.{u3, u1, u2} F M N _inst_1 _inst_2] (f : F), Eq.{max (succ u1) (succ u2)} ((fun (_x : MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) ((fun (a : Type.{u3}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{succ u3, max (succ u2) (succ u1)} a b] => self.0) F (MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) (HasLiftT.mk.{succ u3, max (succ u2) (succ u1)} F (MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) (CoeTCₓ.coe.{succ u3, max (succ u2) (succ u1)} F (MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) (MonoidWithZeroHom.hasCoeT.{u1, u2, u3} M N F _inst_1 _inst_2 _inst_3))) f)) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (FunLike.hasCoeToFun.{max (succ u2) (succ u1), succ u1, succ u2} (MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) M (fun (_x : M) => N) (MulHomClass.toFunLike.{max u2 u1, u1, u2} (MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) M N (MulOneClass.toHasMul.{u1} M (MulZeroOneClass.toMulOneClass.{u1} M _inst_1)) (MulOneClass.toHasMul.{u2} N (MulZeroOneClass.toMulOneClass.{u2} N _inst_2)) (MonoidHomClass.toMulHomClass.{max u2 u1, u1, u2} (MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) M N (MulZeroOneClass.toMulOneClass.{u1} M _inst_1) (MulZeroOneClass.toMulOneClass.{u2} N _inst_2) (MonoidWithZeroHomClass.toMonoidHomClass.{max u2 u1, u1, u2} (MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidWithZeroHom.monoidWithZeroHomClass.{u1, u2} M N _inst_1 _inst_2))))) ((fun (a : Type.{u3}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{succ u3, max (succ u2) (succ u1)} a b] => self.0) F (MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) (HasLiftT.mk.{succ u3, max (succ u2) (succ u1)} F (MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) (CoeTCₓ.coe.{succ u3, max (succ u2) (succ u1)} F (MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) (MonoidWithZeroHom.hasCoeT.{u1, u2, u3} M N F _inst_1 _inst_2 _inst_3))) f)) (coeFn.{succ u3, max (succ u1) (succ u2)} F (fun (_x : F) => M -> N) (FunLike.hasCoeToFun.{succ u3, succ u1, succ u2} F M (fun (_x : M) => N) (MulHomClass.toFunLike.{u3, u1, u2} F M N (MulOneClass.toHasMul.{u1} M (MulZeroOneClass.toMulOneClass.{u1} M _inst_1)) (MulOneClass.toHasMul.{u2} N (MulZeroOneClass.toMulOneClass.{u2} N _inst_2)) (MonoidHomClass.toMulHomClass.{u3, u1, u2} F M N (MulZeroOneClass.toMulOneClass.{u1} M _inst_1) (MulZeroOneClass.toMulOneClass.{u2} N _inst_2) (MonoidWithZeroHomClass.toMonoidHomClass.{u3, u1, u2} F M N _inst_1 _inst_2 _inst_3)))) f)
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} {F : Type.{u3}} [_inst_1 : MulZeroOneClass.{u2} M] [_inst_2 : MulZeroOneClass.{u1} N] [_inst_3 : MonoidWithZeroHomClass.{u3, u2, u1} F M N _inst_1 _inst_2] (f : F), Eq.{max (succ u2) (succ u1)} (forall (a : M), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) a) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M (MulZeroOneClass.toMulOneClass.{u2} M _inst_1)) (MulOneClass.toMul.{u1} N (MulZeroOneClass.toMulOneClass.{u1} N _inst_2)) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulZeroOneClass.toMulOneClass.{u2} M _inst_1) (MulZeroOneClass.toMulOneClass.{u1} N _inst_2) (MonoidWithZeroHomClass.toMonoidHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidWithZeroHom.monoidWithZeroHomClass.{u2, u1} M N _inst_1 _inst_2)))) (MonoidWithZeroHomClass.toMonoidWithZeroHom.{u2, u1, u3} M N F _inst_1 _inst_2 _inst_3 f)) (FunLike.coe.{succ u3, succ u2, succ u1} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{u3, u2, u1} F M N (MulOneClass.toMul.{u2} M (MulZeroOneClass.toMulOneClass.{u2} M _inst_1)) (MulOneClass.toMul.{u1} N (MulZeroOneClass.toMulOneClass.{u1} N _inst_2)) (MonoidHomClass.toMulHomClass.{u3, u2, u1} F M N (MulZeroOneClass.toMulOneClass.{u2} M _inst_1) (MulZeroOneClass.toMulOneClass.{u1} N _inst_2) (MonoidWithZeroHomClass.toMonoidHomClass.{u3, u2, u1} F M N _inst_1 _inst_2 _inst_3))) f)
+  forall {M : Type.{u2}} {N : Type.{u1}} {F : Type.{u3}} [_inst_1 : MulZeroOneClass.{u2} M] [_inst_2 : MulZeroOneClass.{u1} N] [_inst_3 : MonoidWithZeroHomClass.{u3, u2, u1} F M N _inst_1 _inst_2] (f : F), Eq.{max (succ u2) (succ u1)} (forall (a : M), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) a) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M (MulZeroOneClass.toMulOneClass.{u2} M _inst_1)) (MulOneClass.toMul.{u1} N (MulZeroOneClass.toMulOneClass.{u1} N _inst_2)) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulZeroOneClass.toMulOneClass.{u2} M _inst_1) (MulZeroOneClass.toMulOneClass.{u1} N _inst_2) (MonoidWithZeroHomClass.toMonoidHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidWithZeroHom.monoidWithZeroHomClass.{u2, u1} M N _inst_1 _inst_2)))) (MonoidWithZeroHomClass.toMonoidWithZeroHom.{u2, u1, u3} M N F _inst_1 _inst_2 _inst_3 f)) (FunLike.coe.{succ u3, succ u2, succ u1} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{u3, u2, u1} F M N (MulOneClass.toMul.{u2} M (MulZeroOneClass.toMulOneClass.{u2} M _inst_1)) (MulOneClass.toMul.{u1} N (MulZeroOneClass.toMulOneClass.{u1} N _inst_2)) (MonoidHomClass.toMulHomClass.{u3, u2, u1} F M N (MulZeroOneClass.toMulOneClass.{u2} M _inst_1) (MulZeroOneClass.toMulOneClass.{u1} N _inst_2) (MonoidWithZeroHomClass.toMonoidHomClass.{u3, u2, u1} F M N _inst_1 _inst_2 _inst_3))) f)
 Case conversion may be inaccurate. Consider using '#align monoid_with_zero_hom.coe_coe MonoidWithZeroHom.coe_coeₓ'. -/
 @[simp]
 theorem MonoidWithZeroHom.coe_coe [MonoidWithZeroHomClass F M N] (f : F) :
@@ -793,7 +793,7 @@ initialize_simps_projections MonoidWithZeroHom (toFun → apply)
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : One.{u1} M] [_inst_2 : One.{u2} N] (f : OneHom.{u1, u2} M N _inst_1 _inst_2), Eq.{max (succ u1) (succ u2)} (M -> N) (OneHom.toFun.{u1, u2} M N _inst_1 _inst_2 f) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (OneHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : OneHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (OneHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f)
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : One.{u2} M] [_inst_2 : One.{u1} N] (f : OneHom.{u2, u1} M N _inst_1 _inst_2), Eq.{max (succ u2) (succ u1)} (M -> N) (OneHom.toFun.{u2, u1} M N _inst_1 _inst_2 f) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (OneHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1262 : M) => N) _x) (OneHomClass.toFunLike.{max u2 u1, u2, u1} (OneHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (OneHom.oneHomClass.{u2, u1} M N _inst_1 _inst_2)) f)
+  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : One.{u2} M] [_inst_2 : One.{u1} N] (f : OneHom.{u2, u1} M N _inst_1 _inst_2), Eq.{max (succ u2) (succ u1)} (M -> N) (OneHom.toFun.{u2, u1} M N _inst_1 _inst_2 f) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (OneHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1264 : M) => N) _x) (OneHomClass.toFunLike.{max u2 u1, u2, u1} (OneHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (OneHom.oneHomClass.{u2, u1} M N _inst_1 _inst_2)) f)
 Case conversion may be inaccurate. Consider using '#align one_hom.to_fun_eq_coe OneHom.toFun_eq_coeₓ'. -/
 @[simp, to_additive]
 theorem OneHom.toFun_eq_coe [One M] [One N] (f : OneHom M N) : f.toFun = f :=
@@ -805,7 +805,7 @@ theorem OneHom.toFun_eq_coe [One M] [One N] (f : OneHom M N) : f.toFun = f :=
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] (f : MulHom.{u1, u2} M N _inst_1 _inst_2), Eq.{max (succ u1) (succ u2)} (M -> N) (MulHom.toFun.{u1, u2} M N _inst_1 _inst_2 f) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MulHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MulHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MulHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f)
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : Mul.{u2} M] [_inst_2 : Mul.{u1} N] (f : MulHom.{u2, u1} M N _inst_1 _inst_2), Eq.{max (succ u2) (succ u1)} (M -> N) (MulHom.toFun.{u2, u1} M N _inst_1 _inst_2 f) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) f)
+  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : Mul.{u2} M] [_inst_2 : Mul.{u1} N] (f : MulHom.{u2, u1} M N _inst_1 _inst_2), Eq.{max (succ u2) (succ u1)} (M -> N) (MulHom.toFun.{u2, u1} M N _inst_1 _inst_2 f) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) f)
 Case conversion may be inaccurate. Consider using '#align mul_hom.to_fun_eq_coe MulHom.toFun_eq_coeₓ'. -/
 @[simp, to_additive]
 theorem MulHom.toFun_eq_coe [Mul M] [Mul N] (f : M →ₙ* N) : f.toFun = f :=
@@ -817,7 +817,7 @@ theorem MulHom.toFun_eq_coe [Mul M] [Mul N] (f : M →ₙ* N) : f.toFun = f :=
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N] (f : MonoidHom.{u1, u2} M N _inst_1 _inst_2), Eq.{max (succ u1) (succ u2)} (M -> N) (MonoidHom.toFun.{u1, u2} M N _inst_1 _inst_2 f) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MonoidHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MonoidHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f)
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u1} N] (f : MonoidHom.{u2, u1} M N _inst_1 _inst_2), Eq.{max (succ u2) (succ u1)} (M -> N) (OneHom.toFun.{u2, u1} M N (MulOneClass.toOne.{u2} M _inst_1) (MulOneClass.toOne.{u1} N _inst_2) (MonoidHom.toOneHom.{u2, u1} M N _inst_1 _inst_2 f)) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2))) f)
+  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u1} N] (f : MonoidHom.{u2, u1} M N _inst_1 _inst_2), Eq.{max (succ u2) (succ u1)} (M -> N) (OneHom.toFun.{u2, u1} M N (MulOneClass.toOne.{u2} M _inst_1) (MulOneClass.toOne.{u1} N _inst_2) (MonoidHom.toOneHom.{u2, u1} M N _inst_1 _inst_2 f)) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2))) f)
 Case conversion may be inaccurate. Consider using '#align monoid_hom.to_fun_eq_coe MonoidHom.toFun_eq_coeₓ'. -/
 @[simp, to_additive]
 theorem MonoidHom.toFun_eq_coe [MulOneClass M] [MulOneClass N] (f : M →* N) : f.toFun = f :=
@@ -835,7 +835,7 @@ theorem MonoidWithZeroHom.toFun_eq_coe [MulZeroOneClass M] [MulZeroOneClass N] (
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : One.{u1} M] [_inst_2 : One.{u2} N] (f : M -> N) (h1 : Eq.{succ u2} N (f (OfNat.ofNat.{u1} M 1 (OfNat.mk.{u1} M 1 (One.one.{u1} M _inst_1)))) (OfNat.ofNat.{u2} N 1 (OfNat.mk.{u2} N 1 (One.one.{u2} N _inst_2)))), Eq.{max (succ u1) (succ u2)} ((fun (_x : OneHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (OneHom.mk.{u1, u2} M N _inst_1 _inst_2 f h1)) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (OneHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : OneHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (OneHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) (OneHom.mk.{u1, u2} M N _inst_1 _inst_2 f h1)) f
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : One.{u2} M] [_inst_2 : One.{u1} N] (f : M -> N) (h1 : Eq.{succ u1} N (f (OfNat.ofNat.{u2} M 1 (One.toOfNat1.{u2} M _inst_1))) (OfNat.ofNat.{u1} N 1 (One.toOfNat1.{u1} N _inst_2))), Eq.{max (succ u2) (succ u1)} (forall (a : M), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1262 : M) => N) a) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (OneHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1262 : M) => N) _x) (OneHomClass.toFunLike.{max u2 u1, u2, u1} (OneHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (OneHom.oneHomClass.{u2, u1} M N _inst_1 _inst_2)) (OneHom.mk.{u2, u1} M N _inst_1 _inst_2 f h1)) f
+  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : One.{u2} M] [_inst_2 : One.{u1} N] (f : M -> N) (h1 : Eq.{succ u1} N (f (OfNat.ofNat.{u2} M 1 (One.toOfNat1.{u2} M _inst_1))) (OfNat.ofNat.{u1} N 1 (One.toOfNat1.{u1} N _inst_2))), Eq.{max (succ u2) (succ u1)} (forall (a : M), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1264 : M) => N) a) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (OneHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1264 : M) => N) _x) (OneHomClass.toFunLike.{max u2 u1, u2, u1} (OneHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (OneHom.oneHomClass.{u2, u1} M N _inst_1 _inst_2)) (OneHom.mk.{u2, u1} M N _inst_1 _inst_2 f h1)) f
 Case conversion may be inaccurate. Consider using '#align one_hom.coe_mk OneHom.coe_mkₓ'. -/
 @[simp, to_additive]
 theorem OneHom.coe_mk [One M] [One N] (f : M → N) (h1) : (OneHom.mk f h1 : M → N) = f :=
@@ -847,7 +847,7 @@ theorem OneHom.coe_mk [One M] [One N] (f : M → N) (h1) : (OneHom.mk f h1 : M 
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] (f : M -> N) (hmul : forall (x : M) (y : M), Eq.{succ u2} N (f (HMul.hMul.{u1, u1, u1} M M M (instHMul.{u1} M _inst_1) x y)) (HMul.hMul.{u2, u2, u2} N N N (instHMul.{u2} N _inst_2) (f x) (f y))), Eq.{max (succ u1) (succ u2)} ((fun (_x : MulHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MulHom.mk.{u1, u2} M N _inst_1 _inst_2 f hmul)) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MulHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MulHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MulHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) (MulHom.mk.{u1, u2} M N _inst_1 _inst_2 f hmul)) f
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : Mul.{u2} M] [_inst_2 : Mul.{u1} N] (f : M -> N) (hmul : forall (x : M) (y : M), Eq.{succ u1} N (f (HMul.hMul.{u2, u2, u2} M M M (instHMul.{u2} M _inst_1) x y)) (HMul.hMul.{u1, u1, u1} N N N (instHMul.{u1} N _inst_2) (f x) (f y))), Eq.{max (succ u2) (succ u1)} (forall (a : M), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) a) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) (MulHom.mk.{u2, u1} M N _inst_1 _inst_2 f hmul)) f
+  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : Mul.{u2} M] [_inst_2 : Mul.{u1} N] (f : M -> N) (hmul : forall (x : M) (y : M), Eq.{succ u1} N (f (HMul.hMul.{u2, u2, u2} M M M (instHMul.{u2} M _inst_1) x y)) (HMul.hMul.{u1, u1, u1} N N N (instHMul.{u1} N _inst_2) (f x) (f y))), Eq.{max (succ u2) (succ u1)} (forall (a : M), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) a) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) (MulHom.mk.{u2, u1} M N _inst_1 _inst_2 f hmul)) f
 Case conversion may be inaccurate. Consider using '#align mul_hom.coe_mk MulHom.coe_mkₓ'. -/
 @[simp, to_additive]
 theorem MulHom.coe_mk [Mul M] [Mul N] (f : M → N) (hmul) : (MulHom.mk f hmul : M → N) = f :=
@@ -859,7 +859,7 @@ theorem MulHom.coe_mk [Mul M] [Mul N] (f : M → N) (hmul) : (MulHom.mk f hmul :
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N] (f : M -> N) (h1 : Eq.{succ u2} N (f (OfNat.ofNat.{u1} M 1 (OfNat.mk.{u1} M 1 (One.one.{u1} M (MulOneClass.toHasOne.{u1} M _inst_1))))) (OfNat.ofNat.{u2} N 1 (OfNat.mk.{u2} N 1 (One.one.{u2} N (MulOneClass.toHasOne.{u2} N _inst_2))))) (hmul : forall (x : M) (y : M), Eq.{succ u2} N (f (HMul.hMul.{u1, u1, u1} M M M (instHMul.{u1} M (MulOneClass.toHasMul.{u1} M _inst_1)) x y)) (HMul.hMul.{u2, u2, u2} N N N (instHMul.{u2} N (MulOneClass.toHasMul.{u2} N _inst_2)) (f x) (f y))), Eq.{max (succ u1) (succ u2)} ((fun (_x : MonoidHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MonoidHom.mk.{u1, u2} M N _inst_1 _inst_2 f h1 hmul)) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MonoidHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MonoidHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.mk.{u1, u2} M N _inst_1 _inst_2 f h1 hmul)) f
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u1} N] (f : OneHom.{u2, u1} M N (MulOneClass.toOne.{u2} M _inst_1) (MulOneClass.toOne.{u1} N _inst_2)) (h1 : forall (x : M) (y : M), Eq.{succ u1} N (OneHom.toFun.{u2, u1} M N (MulOneClass.toOne.{u2} M _inst_1) (MulOneClass.toOne.{u1} N _inst_2) f (HMul.hMul.{u2, u2, u2} M M M (instHMul.{u2} M (MulOneClass.toMul.{u2} M _inst_1)) x y)) (HMul.hMul.{u1, u1, u1} N N N (instHMul.{u1} N (MulOneClass.toMul.{u1} N _inst_2)) (OneHom.toFun.{u2, u1} M N (MulOneClass.toOne.{u2} M _inst_1) (MulOneClass.toOne.{u1} N _inst_2) f x) (OneHom.toFun.{u2, u1} M N (MulOneClass.toOne.{u2} M _inst_1) (MulOneClass.toOne.{u1} N _inst_2) f y))), Eq.{max (succ u2) (succ u1)} (forall (a : M), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) a) (FunLike.coe.{max (succ u1) (succ u2), succ u2, succ u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M (fun (a : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) a) (MulHomClass.toFunLike.{max u1 u2, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2) (MonoidHomClass.toMulHomClass.{max u1 u2, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2))) (MonoidHom.mk.{u2, u1} M N _inst_1 _inst_2 f h1)) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (OneHom.{u2, u1} M N (MulOneClass.toOne.{u2} M _inst_1) (MulOneClass.toOne.{u1} N _inst_2)) M (fun (a : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1262 : M) => N) a) (OneHomClass.toFunLike.{max u2 u1, u2, u1} (OneHom.{u2, u1} M N (MulOneClass.toOne.{u2} M _inst_1) (MulOneClass.toOne.{u1} N _inst_2)) M N (MulOneClass.toOne.{u2} M _inst_1) (MulOneClass.toOne.{u1} N _inst_2) (OneHom.oneHomClass.{u2, u1} M N (MulOneClass.toOne.{u2} M _inst_1) (MulOneClass.toOne.{u1} N _inst_2))) f)
+  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u1} N] (f : OneHom.{u2, u1} M N (MulOneClass.toOne.{u2} M _inst_1) (MulOneClass.toOne.{u1} N _inst_2)) (h1 : forall (x : M) (y : M), Eq.{succ u1} N (OneHom.toFun.{u2, u1} M N (MulOneClass.toOne.{u2} M _inst_1) (MulOneClass.toOne.{u1} N _inst_2) f (HMul.hMul.{u2, u2, u2} M M M (instHMul.{u2} M (MulOneClass.toMul.{u2} M _inst_1)) x y)) (HMul.hMul.{u1, u1, u1} N N N (instHMul.{u1} N (MulOneClass.toMul.{u1} N _inst_2)) (OneHom.toFun.{u2, u1} M N (MulOneClass.toOne.{u2} M _inst_1) (MulOneClass.toOne.{u1} N _inst_2) f x) (OneHom.toFun.{u2, u1} M N (MulOneClass.toOne.{u2} M _inst_1) (MulOneClass.toOne.{u1} N _inst_2) f y))), Eq.{max (succ u2) (succ u1)} (forall (a : M), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) a) (FunLike.coe.{max (succ u1) (succ u2), succ u2, succ u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M (fun (a : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) a) (MulHomClass.toFunLike.{max u1 u2, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2) (MonoidHomClass.toMulHomClass.{max u1 u2, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2))) (MonoidHom.mk.{u2, u1} M N _inst_1 _inst_2 f h1)) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (OneHom.{u2, u1} M N (MulOneClass.toOne.{u2} M _inst_1) (MulOneClass.toOne.{u1} N _inst_2)) M (fun (a : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1264 : M) => N) a) (OneHomClass.toFunLike.{max u2 u1, u2, u1} (OneHom.{u2, u1} M N (MulOneClass.toOne.{u2} M _inst_1) (MulOneClass.toOne.{u1} N _inst_2)) M N (MulOneClass.toOne.{u2} M _inst_1) (MulOneClass.toOne.{u1} N _inst_2) (OneHom.oneHomClass.{u2, u1} M N (MulOneClass.toOne.{u2} M _inst_1) (MulOneClass.toOne.{u1} N _inst_2))) f)
 Case conversion may be inaccurate. Consider using '#align monoid_hom.coe_mk MonoidHom.coe_mkₓ'. -/
 @[simp, to_additive]
 theorem MonoidHom.coe_mk [MulOneClass M] [MulOneClass N] (f : M → N) (h1 hmul) :
@@ -872,7 +872,7 @@ theorem MonoidHom.coe_mk [MulOneClass M] [MulOneClass N] (f : M → N) (h1 hmul)
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulZeroOneClass.{u1} M] [_inst_2 : MulZeroOneClass.{u2} N] (f : M -> N) (h0 : Eq.{succ u2} N (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} N 0 (OfNat.mk.{u2} N 0 (Zero.zero.{u2} N (MulZeroClass.toHasZero.{u2} N (MulZeroOneClass.toMulZeroClass.{u2} N _inst_2)))))) (h1 : Eq.{succ u2} N (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} N 1 (OfNat.mk.{u2} N 1 (One.one.{u2} N (MulOneClass.toHasOne.{u2} N (MulZeroOneClass.toMulOneClass.{u2} N _inst_2)))))) (hmul : forall (x : M) (y : M), Eq.{succ u2} N (f (HMul.hMul.{u1, u1, u1} M M M (instHMul.{u1} M (MulOneClass.toHasMul.{u1} M (MulZeroOneClass.toMulOneClass.{u1} M _inst_1))) x y)) (HMul.hMul.{u2, u2, u2} N N N (instHMul.{u2} N (MulOneClass.toHasMul.{u2} N (MulZeroOneClass.toMulOneClass.{u2} N _inst_2))) (f x) (f y))), Eq.{max (succ u1) (succ u2)} ((fun (_x : MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MonoidWithZeroHom.mk.{u1, u2} M N _inst_1 _inst_2 f h0 h1 hmul)) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MonoidWithZeroHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) (MonoidWithZeroHom.mk.{u1, u2} M N _inst_1 _inst_2 f h0 h1 hmul)) f
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : MulZeroOneClass.{u2} M] [_inst_2 : MulZeroOneClass.{u1} N] (f : ZeroHom.{u2, u1} M N (MulZeroOneClass.toZero.{u2} M _inst_1) (MulZeroOneClass.toZero.{u1} N _inst_2)) (h0 : Eq.{succ u1} N (ZeroHom.toFun.{u2, u1} M N (MulZeroOneClass.toZero.{u2} M _inst_1) (MulZeroOneClass.toZero.{u1} N _inst_2) f (OfNat.ofNat.{u2} M 1 (One.toOfNat1.{u2} M (MulOneClass.toOne.{u2} M (MulZeroOneClass.toMulOneClass.{u2} M _inst_1))))) (OfNat.ofNat.{u1} N 1 (One.toOfNat1.{u1} N (MulOneClass.toOne.{u1} N (MulZeroOneClass.toMulOneClass.{u1} N _inst_2))))) (h1 : forall (x : M) (y : M), Eq.{succ u1} N (ZeroHom.toFun.{u2, u1} M N (MulZeroOneClass.toZero.{u2} M _inst_1) (MulZeroOneClass.toZero.{u1} N _inst_2) f (HMul.hMul.{u2, u2, u2} M M M (instHMul.{u2} M (MulOneClass.toMul.{u2} M (MulZeroOneClass.toMulOneClass.{u2} M _inst_1))) x y)) (HMul.hMul.{u1, u1, u1} N N N (instHMul.{u1} N (MulOneClass.toMul.{u1} N (MulZeroOneClass.toMulOneClass.{u1} N _inst_2))) (ZeroHom.toFun.{u2, u1} M N (MulZeroOneClass.toZero.{u2} M _inst_1) (MulZeroOneClass.toZero.{u1} N _inst_2) f x) (ZeroHom.toFun.{u2, u1} M N (MulZeroOneClass.toZero.{u2} M _inst_1) (MulZeroOneClass.toZero.{u1} N _inst_2) f y))), Eq.{max (succ u2) (succ u1)} (forall (a : M), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) a) (FunLike.coe.{max (succ u1) (succ u2), succ u2, succ u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M (fun (a : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) a) (MulHomClass.toFunLike.{max u1 u2, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M (MulZeroOneClass.toMulOneClass.{u2} M _inst_1)) (MulOneClass.toMul.{u1} N (MulZeroOneClass.toMulOneClass.{u1} N _inst_2)) (MonoidHomClass.toMulHomClass.{max u1 u2, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulZeroOneClass.toMulOneClass.{u2} M _inst_1) (MulZeroOneClass.toMulOneClass.{u1} N _inst_2) (MonoidWithZeroHomClass.toMonoidHomClass.{max u1 u2, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidWithZeroHom.monoidWithZeroHomClass.{u2, u1} M N _inst_1 _inst_2)))) (MonoidWithZeroHom.mk.{u2, u1} M N _inst_1 _inst_2 f h0 h1)) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (ZeroHom.{u2, u1} M N (MulZeroOneClass.toZero.{u2} M _inst_1) (MulZeroOneClass.toZero.{u1} N _inst_2)) M (fun (a : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.124 : M) => N) a) (ZeroHomClass.toFunLike.{max u2 u1, u2, u1} (ZeroHom.{u2, u1} M N (MulZeroOneClass.toZero.{u2} M _inst_1) (MulZeroOneClass.toZero.{u1} N _inst_2)) M N (MulZeroOneClass.toZero.{u2} M _inst_1) (MulZeroOneClass.toZero.{u1} N _inst_2) (ZeroHom.zeroHomClass.{u2, u1} M N (MulZeroOneClass.toZero.{u2} M _inst_1) (MulZeroOneClass.toZero.{u1} N _inst_2))) f)
+  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : MulZeroOneClass.{u2} M] [_inst_2 : MulZeroOneClass.{u1} N] (f : ZeroHom.{u2, u1} M N (MulZeroOneClass.toZero.{u2} M _inst_1) (MulZeroOneClass.toZero.{u1} N _inst_2)) (h0 : Eq.{succ u1} N (ZeroHom.toFun.{u2, u1} M N (MulZeroOneClass.toZero.{u2} M _inst_1) (MulZeroOneClass.toZero.{u1} N _inst_2) f (OfNat.ofNat.{u2} M 1 (One.toOfNat1.{u2} M (MulOneClass.toOne.{u2} M (MulZeroOneClass.toMulOneClass.{u2} M _inst_1))))) (OfNat.ofNat.{u1} N 1 (One.toOfNat1.{u1} N (MulOneClass.toOne.{u1} N (MulZeroOneClass.toMulOneClass.{u1} N _inst_2))))) (h1 : forall (x : M) (y : M), Eq.{succ u1} N (ZeroHom.toFun.{u2, u1} M N (MulZeroOneClass.toZero.{u2} M _inst_1) (MulZeroOneClass.toZero.{u1} N _inst_2) f (HMul.hMul.{u2, u2, u2} M M M (instHMul.{u2} M (MulOneClass.toMul.{u2} M (MulZeroOneClass.toMulOneClass.{u2} M _inst_1))) x y)) (HMul.hMul.{u1, u1, u1} N N N (instHMul.{u1} N (MulOneClass.toMul.{u1} N (MulZeroOneClass.toMulOneClass.{u1} N _inst_2))) (ZeroHom.toFun.{u2, u1} M N (MulZeroOneClass.toZero.{u2} M _inst_1) (MulZeroOneClass.toZero.{u1} N _inst_2) f x) (ZeroHom.toFun.{u2, u1} M N (MulZeroOneClass.toZero.{u2} M _inst_1) (MulZeroOneClass.toZero.{u1} N _inst_2) f y))), Eq.{max (succ u2) (succ u1)} (forall (a : M), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) a) (FunLike.coe.{max (succ u1) (succ u2), succ u2, succ u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M (fun (a : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) a) (MulHomClass.toFunLike.{max u1 u2, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M (MulZeroOneClass.toMulOneClass.{u2} M _inst_1)) (MulOneClass.toMul.{u1} N (MulZeroOneClass.toMulOneClass.{u1} N _inst_2)) (MonoidHomClass.toMulHomClass.{max u1 u2, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulZeroOneClass.toMulOneClass.{u2} M _inst_1) (MulZeroOneClass.toMulOneClass.{u1} N _inst_2) (MonoidWithZeroHomClass.toMonoidHomClass.{max u1 u2, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidWithZeroHom.monoidWithZeroHomClass.{u2, u1} M N _inst_1 _inst_2)))) (MonoidWithZeroHom.mk.{u2, u1} M N _inst_1 _inst_2 f h0 h1)) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (ZeroHom.{u2, u1} M N (MulZeroOneClass.toZero.{u2} M _inst_1) (MulZeroOneClass.toZero.{u1} N _inst_2)) M (fun (a : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.124 : M) => N) a) (ZeroHomClass.toFunLike.{max u2 u1, u2, u1} (ZeroHom.{u2, u1} M N (MulZeroOneClass.toZero.{u2} M _inst_1) (MulZeroOneClass.toZero.{u1} N _inst_2)) M N (MulZeroOneClass.toZero.{u2} M _inst_1) (MulZeroOneClass.toZero.{u1} N _inst_2) (ZeroHom.zeroHomClass.{u2, u1} M N (MulZeroOneClass.toZero.{u2} M _inst_1) (MulZeroOneClass.toZero.{u1} N _inst_2))) f)
 Case conversion may be inaccurate. Consider using '#align monoid_with_zero_hom.coe_mk MonoidWithZeroHom.coe_mkₓ'. -/
 @[simp]
 theorem MonoidWithZeroHom.coe_mk [MulZeroOneClass M] [MulZeroOneClass N] (f : M → N) (h0 h1 hmul) :
@@ -884,7 +884,7 @@ theorem MonoidWithZeroHom.coe_mk [MulZeroOneClass M] [MulZeroOneClass N] (f : M
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N] (f : MonoidHom.{u1, u2} M N _inst_1 _inst_2), Eq.{max (succ u1) (succ u2)} ((fun (_x : OneHom.{u1, u2} M N (MulOneClass.toHasOne.{u1} M _inst_1) (MulOneClass.toHasOne.{u2} N _inst_2)) => M -> N) (MonoidHom.toOneHom.{u1, u2} M N _inst_1 _inst_2 f)) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (OneHom.{u1, u2} M N (MulOneClass.toHasOne.{u1} M _inst_1) (MulOneClass.toHasOne.{u2} N _inst_2)) (fun (_x : OneHom.{u1, u2} M N (MulOneClass.toHasOne.{u1} M _inst_1) (MulOneClass.toHasOne.{u2} N _inst_2)) => M -> N) (OneHom.hasCoeToFun.{u1, u2} M N (MulOneClass.toHasOne.{u1} M _inst_1) (MulOneClass.toHasOne.{u2} N _inst_2)) (MonoidHom.toOneHom.{u1, u2} M N _inst_1 _inst_2 f)) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MonoidHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MonoidHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f)
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u1} N] (f : MonoidHom.{u2, u1} M N _inst_1 _inst_2), Eq.{max (succ u2) (succ u1)} (forall (a : M), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1262 : M) => N) a) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (OneHom.{u2, u1} M N (MulOneClass.toOne.{u2} M _inst_1) (MulOneClass.toOne.{u1} N _inst_2)) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1262 : M) => N) _x) (OneHomClass.toFunLike.{max u2 u1, u2, u1} (OneHom.{u2, u1} M N (MulOneClass.toOne.{u2} M _inst_1) (MulOneClass.toOne.{u1} N _inst_2)) M N (MulOneClass.toOne.{u2} M _inst_1) (MulOneClass.toOne.{u1} N _inst_2) (OneHom.oneHomClass.{u2, u1} M N (MulOneClass.toOne.{u2} M _inst_1) (MulOneClass.toOne.{u1} N _inst_2))) (MonoidHom.toOneHom.{u2, u1} M N _inst_1 _inst_2 f)) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2))) f)
+  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u1} N] (f : MonoidHom.{u2, u1} M N _inst_1 _inst_2), Eq.{max (succ u2) (succ u1)} (forall (a : M), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1264 : M) => N) a) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (OneHom.{u2, u1} M N (MulOneClass.toOne.{u2} M _inst_1) (MulOneClass.toOne.{u1} N _inst_2)) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1264 : M) => N) _x) (OneHomClass.toFunLike.{max u2 u1, u2, u1} (OneHom.{u2, u1} M N (MulOneClass.toOne.{u2} M _inst_1) (MulOneClass.toOne.{u1} N _inst_2)) M N (MulOneClass.toOne.{u2} M _inst_1) (MulOneClass.toOne.{u1} N _inst_2) (OneHom.oneHomClass.{u2, u1} M N (MulOneClass.toOne.{u2} M _inst_1) (MulOneClass.toOne.{u1} N _inst_2))) (MonoidHom.toOneHom.{u2, u1} M N _inst_1 _inst_2 f)) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2))) f)
 Case conversion may be inaccurate. Consider using '#align monoid_hom.to_one_hom_coe MonoidHom.toOneHom_coeₓ'. -/
 @[simp, to_additive]
 theorem MonoidHom.toOneHom_coe [MulOneClass M] [MulOneClass N] (f : M →* N) :
@@ -897,7 +897,7 @@ theorem MonoidHom.toOneHom_coe [MulOneClass M] [MulOneClass N] (f : M →* N) :
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N] (f : MonoidHom.{u1, u2} M N _inst_1 _inst_2), Eq.{max (succ u1) (succ u2)} ((fun (_x : MulHom.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) => M -> N) (MonoidHom.toMulHom.{u1, u2} M N _inst_1 _inst_2 f)) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MulHom.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (fun (_x : MulHom.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) => M -> N) (MulHom.hasCoeToFun.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.toMulHom.{u1, u2} M N _inst_1 _inst_2 f)) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MonoidHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MonoidHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f)
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u1} N] (f : MonoidHom.{u2, u1} M N _inst_1 _inst_2), Eq.{max (succ u2) (succ u1)} (M -> N) (MulHom.toFun.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2) (MonoidHom.toMulHom.{u2, u1} M N _inst_1 _inst_2 f)) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2))) f)
+  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u1} N] (f : MonoidHom.{u2, u1} M N _inst_1 _inst_2), Eq.{max (succ u2) (succ u1)} (M -> N) (MulHom.toFun.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2) (MonoidHom.toMulHom.{u2, u1} M N _inst_1 _inst_2 f)) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2))) f)
 Case conversion may be inaccurate. Consider using '#align monoid_hom.to_mul_hom_coe MonoidHom.toMulHom_coeₓ'. -/
 @[simp, to_additive]
 theorem MonoidHom.toMulHom_coe [MulOneClass M] [MulOneClass N] (f : M →* N) :
@@ -910,7 +910,7 @@ theorem MonoidHom.toMulHom_coe [MulOneClass M] [MulOneClass N] (f : M →* N) :
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulZeroOneClass.{u1} M] [_inst_2 : MulZeroOneClass.{u2} N] (f : MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2), Eq.{max (succ u1) (succ u2)} ((fun (_x : ZeroHom.{u1, u2} M N (MulZeroClass.toHasZero.{u1} M (MulZeroOneClass.toMulZeroClass.{u1} M _inst_1)) (MulZeroClass.toHasZero.{u2} N (MulZeroOneClass.toMulZeroClass.{u2} N _inst_2))) => M -> N) (MonoidWithZeroHom.toZeroHom.{u1, u2} M N _inst_1 _inst_2 f)) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (ZeroHom.{u1, u2} M N (MulZeroClass.toHasZero.{u1} M (MulZeroOneClass.toMulZeroClass.{u1} M _inst_1)) (MulZeroClass.toHasZero.{u2} N (MulZeroOneClass.toMulZeroClass.{u2} N _inst_2))) (fun (_x : ZeroHom.{u1, u2} M N (MulZeroClass.toHasZero.{u1} M (MulZeroOneClass.toMulZeroClass.{u1} M _inst_1)) (MulZeroClass.toHasZero.{u2} N (MulZeroOneClass.toMulZeroClass.{u2} N _inst_2))) => M -> N) (ZeroHom.hasCoeToFun.{u1, u2} M N (MulZeroClass.toHasZero.{u1} M (MulZeroOneClass.toMulZeroClass.{u1} M _inst_1)) (MulZeroClass.toHasZero.{u2} N (MulZeroOneClass.toMulZeroClass.{u2} N _inst_2))) (MonoidWithZeroHom.toZeroHom.{u1, u2} M N _inst_1 _inst_2 f)) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MonoidWithZeroHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f)
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : MulZeroOneClass.{u2} M] [_inst_2 : MulZeroOneClass.{u1} N] (f : MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2), Eq.{max (succ u2) (succ u1)} (forall (a : M), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.124 : M) => N) a) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (ZeroHom.{u2, u1} M N (MulZeroOneClass.toZero.{u2} M _inst_1) (MulZeroOneClass.toZero.{u1} N _inst_2)) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.124 : M) => N) _x) (ZeroHomClass.toFunLike.{max u2 u1, u2, u1} (ZeroHom.{u2, u1} M N (MulZeroOneClass.toZero.{u2} M _inst_1) (MulZeroOneClass.toZero.{u1} N _inst_2)) M N (MulZeroOneClass.toZero.{u2} M _inst_1) (MulZeroOneClass.toZero.{u1} N _inst_2) (ZeroHom.zeroHomClass.{u2, u1} M N (MulZeroOneClass.toZero.{u2} M _inst_1) (MulZeroOneClass.toZero.{u1} N _inst_2))) (MonoidWithZeroHom.toZeroHom.{u2, u1} M N _inst_1 _inst_2 f)) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M (MulZeroOneClass.toMulOneClass.{u2} M _inst_1)) (MulOneClass.toMul.{u1} N (MulZeroOneClass.toMulOneClass.{u1} N _inst_2)) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulZeroOneClass.toMulOneClass.{u2} M _inst_1) (MulZeroOneClass.toMulOneClass.{u1} N _inst_2) (MonoidWithZeroHomClass.toMonoidHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidWithZeroHom.monoidWithZeroHomClass.{u2, u1} M N _inst_1 _inst_2)))) f)
+  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : MulZeroOneClass.{u2} M] [_inst_2 : MulZeroOneClass.{u1} N] (f : MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2), Eq.{max (succ u2) (succ u1)} (forall (a : M), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.124 : M) => N) a) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (ZeroHom.{u2, u1} M N (MulZeroOneClass.toZero.{u2} M _inst_1) (MulZeroOneClass.toZero.{u1} N _inst_2)) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.124 : M) => N) _x) (ZeroHomClass.toFunLike.{max u2 u1, u2, u1} (ZeroHom.{u2, u1} M N (MulZeroOneClass.toZero.{u2} M _inst_1) (MulZeroOneClass.toZero.{u1} N _inst_2)) M N (MulZeroOneClass.toZero.{u2} M _inst_1) (MulZeroOneClass.toZero.{u1} N _inst_2) (ZeroHom.zeroHomClass.{u2, u1} M N (MulZeroOneClass.toZero.{u2} M _inst_1) (MulZeroOneClass.toZero.{u1} N _inst_2))) (MonoidWithZeroHom.toZeroHom.{u2, u1} M N _inst_1 _inst_2 f)) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M (MulZeroOneClass.toMulOneClass.{u2} M _inst_1)) (MulOneClass.toMul.{u1} N (MulZeroOneClass.toMulOneClass.{u1} N _inst_2)) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulZeroOneClass.toMulOneClass.{u2} M _inst_1) (MulZeroOneClass.toMulOneClass.{u1} N _inst_2) (MonoidWithZeroHomClass.toMonoidHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidWithZeroHom.monoidWithZeroHomClass.{u2, u1} M N _inst_1 _inst_2)))) f)
 Case conversion may be inaccurate. Consider using '#align monoid_with_zero_hom.to_zero_hom_coe MonoidWithZeroHom.toZeroHom_coeₓ'. -/
 @[simp]
 theorem MonoidWithZeroHom.toZeroHom_coe [MulZeroOneClass M] [MulZeroOneClass N] (f : M →*₀ N) :
@@ -922,7 +922,7 @@ theorem MonoidWithZeroHom.toZeroHom_coe [MulZeroOneClass M] [MulZeroOneClass N]
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulZeroOneClass.{u1} M] [_inst_2 : MulZeroOneClass.{u2} N] (f : MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2), Eq.{max (succ u1) (succ u2)} ((fun (_x : MonoidHom.{u1, u2} M N (MulZeroOneClass.toMulOneClass.{u1} M _inst_1) (MulZeroOneClass.toMulOneClass.{u2} N _inst_2)) => M -> N) (MonoidWithZeroHom.toMonoidHom.{u1, u2} M N _inst_1 _inst_2 f)) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} M N (MulZeroOneClass.toMulOneClass.{u1} M _inst_1) (MulZeroOneClass.toMulOneClass.{u2} N _inst_2)) (fun (_x : MonoidHom.{u1, u2} M N (MulZeroOneClass.toMulOneClass.{u1} M _inst_1) (MulZeroOneClass.toMulOneClass.{u2} N _inst_2)) => M -> N) (MonoidHom.hasCoeToFun.{u1, u2} M N (MulZeroOneClass.toMulOneClass.{u1} M _inst_1) (MulZeroOneClass.toMulOneClass.{u2} N _inst_2)) (MonoidWithZeroHom.toMonoidHom.{u1, u2} M N _inst_1 _inst_2 f)) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MonoidWithZeroHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f)
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : MulZeroOneClass.{u2} M] [_inst_2 : MulZeroOneClass.{u1} N] (f : MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2), Eq.{max (succ u2) (succ u1)} (M -> N) (OneHom.toFun.{u2, u1} M N (MulOneClass.toOne.{u2} M (MulZeroOneClass.toMulOneClass.{u2} M _inst_1)) (MulOneClass.toOne.{u1} N (MulZeroOneClass.toMulOneClass.{u1} N _inst_2)) (MonoidHom.toOneHom.{u2, u1} M N (MulZeroOneClass.toMulOneClass.{u2} M _inst_1) (MulZeroOneClass.toMulOneClass.{u1} N _inst_2) (MonoidWithZeroHom.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 f))) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M (MulZeroOneClass.toMulOneClass.{u2} M _inst_1)) (MulOneClass.toMul.{u1} N (MulZeroOneClass.toMulOneClass.{u1} N _inst_2)) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulZeroOneClass.toMulOneClass.{u2} M _inst_1) (MulZeroOneClass.toMulOneClass.{u1} N _inst_2) (MonoidWithZeroHomClass.toMonoidHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidWithZeroHom.monoidWithZeroHomClass.{u2, u1} M N _inst_1 _inst_2)))) f)
+  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : MulZeroOneClass.{u2} M] [_inst_2 : MulZeroOneClass.{u1} N] (f : MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2), Eq.{max (succ u2) (succ u1)} (M -> N) (OneHom.toFun.{u2, u1} M N (MulOneClass.toOne.{u2} M (MulZeroOneClass.toMulOneClass.{u2} M _inst_1)) (MulOneClass.toOne.{u1} N (MulZeroOneClass.toMulOneClass.{u1} N _inst_2)) (MonoidHom.toOneHom.{u2, u1} M N (MulZeroOneClass.toMulOneClass.{u2} M _inst_1) (MulZeroOneClass.toMulOneClass.{u1} N _inst_2) (MonoidWithZeroHom.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 f))) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M (MulZeroOneClass.toMulOneClass.{u2} M _inst_1)) (MulOneClass.toMul.{u1} N (MulZeroOneClass.toMulOneClass.{u1} N _inst_2)) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulZeroOneClass.toMulOneClass.{u2} M _inst_1) (MulZeroOneClass.toMulOneClass.{u1} N _inst_2) (MonoidWithZeroHomClass.toMonoidHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidWithZeroHom.monoidWithZeroHomClass.{u2, u1} M N _inst_1 _inst_2)))) f)
 Case conversion may be inaccurate. Consider using '#align monoid_with_zero_hom.to_monoid_hom_coe MonoidWithZeroHom.toMonoidHom_coeₓ'. -/
 @[simp]
 theorem MonoidWithZeroHom.toMonoidHom_coe [MulZeroOneClass M] [MulZeroOneClass N] (f : M →*₀ N) :
@@ -934,7 +934,7 @@ theorem MonoidWithZeroHom.toMonoidHom_coe [MulZeroOneClass M] [MulZeroOneClass N
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : One.{u1} M] [_inst_2 : One.{u2} N] {{f : OneHom.{u1, u2} M N _inst_1 _inst_2}} {{g : OneHom.{u1, u2} M N _inst_1 _inst_2}}, (forall (x : M), Eq.{succ u2} N (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (OneHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : OneHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (OneHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f x) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (OneHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : OneHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (OneHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) g x)) -> (Eq.{max (succ u2) (succ u1)} (OneHom.{u1, u2} M N _inst_1 _inst_2) f g)
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : One.{u2} M] [_inst_2 : One.{u1} N] {{f : OneHom.{u2, u1} M N _inst_1 _inst_2}} {{g : OneHom.{u2, u1} M N _inst_1 _inst_2}}, (forall (x : M), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1262 : M) => N) x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (OneHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1262 : M) => N) _x) (OneHomClass.toFunLike.{max u2 u1, u2, u1} (OneHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (OneHom.oneHomClass.{u2, u1} M N _inst_1 _inst_2)) f x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (OneHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1262 : M) => N) _x) (OneHomClass.toFunLike.{max u2 u1, u2, u1} (OneHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (OneHom.oneHomClass.{u2, u1} M N _inst_1 _inst_2)) g x)) -> (Eq.{max (succ u2) (succ u1)} (OneHom.{u2, u1} M N _inst_1 _inst_2) f g)
+  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : One.{u2} M] [_inst_2 : One.{u1} N] {{f : OneHom.{u2, u1} M N _inst_1 _inst_2}} {{g : OneHom.{u2, u1} M N _inst_1 _inst_2}}, (forall (x : M), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1264 : M) => N) x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (OneHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1264 : M) => N) _x) (OneHomClass.toFunLike.{max u2 u1, u2, u1} (OneHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (OneHom.oneHomClass.{u2, u1} M N _inst_1 _inst_2)) f x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (OneHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1264 : M) => N) _x) (OneHomClass.toFunLike.{max u2 u1, u2, u1} (OneHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (OneHom.oneHomClass.{u2, u1} M N _inst_1 _inst_2)) g x)) -> (Eq.{max (succ u2) (succ u1)} (OneHom.{u2, u1} M N _inst_1 _inst_2) f g)
 Case conversion may be inaccurate. Consider using '#align one_hom.ext OneHom.extₓ'. -/
 @[ext, to_additive]
 theorem OneHom.ext [One M] [One N] ⦃f g : OneHom M N⦄ (h : ∀ x, f x = g x) : f = g :=
@@ -946,7 +946,7 @@ theorem OneHom.ext [One M] [One N] ⦃f g : OneHom M N⦄ (h : ∀ x, f x = g x)
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] {{f : MulHom.{u1, u2} M N _inst_1 _inst_2}} {{g : MulHom.{u1, u2} M N _inst_1 _inst_2}}, (forall (x : M), Eq.{succ u2} N (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MulHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MulHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MulHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f x) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MulHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MulHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MulHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) g x)) -> (Eq.{max (succ u2) (succ u1)} (MulHom.{u1, u2} M N _inst_1 _inst_2) f g)
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : Mul.{u2} M] [_inst_2 : Mul.{u1} N] {{f : MulHom.{u2, u1} M N _inst_1 _inst_2}} {{g : MulHom.{u2, u1} M N _inst_1 _inst_2}}, (forall (x : M), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) f x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) g x)) -> (Eq.{max (succ u2) (succ u1)} (MulHom.{u2, u1} M N _inst_1 _inst_2) f g)
+  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : Mul.{u2} M] [_inst_2 : Mul.{u1} N] {{f : MulHom.{u2, u1} M N _inst_1 _inst_2}} {{g : MulHom.{u2, u1} M N _inst_1 _inst_2}}, (forall (x : M), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) f x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) g x)) -> (Eq.{max (succ u2) (succ u1)} (MulHom.{u2, u1} M N _inst_1 _inst_2) f g)
 Case conversion may be inaccurate. Consider using '#align mul_hom.ext MulHom.extₓ'. -/
 @[ext, to_additive]
 theorem MulHom.ext [Mul M] [Mul N] ⦃f g : M →ₙ* N⦄ (h : ∀ x, f x = g x) : f = g :=
@@ -958,7 +958,7 @@ theorem MulHom.ext [Mul M] [Mul N] ⦃f g : M →ₙ* N⦄ (h : ∀ x, f x = g x
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N] {{f : MonoidHom.{u1, u2} M N _inst_1 _inst_2}} {{g : MonoidHom.{u1, u2} M N _inst_1 _inst_2}}, (forall (x : M), Eq.{succ u2} N (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MonoidHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MonoidHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f x) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MonoidHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MonoidHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) g x)) -> (Eq.{max (succ u2) (succ u1)} (MonoidHom.{u1, u2} M N _inst_1 _inst_2) f g)
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u1} N] {{f : MonoidHom.{u2, u1} M N _inst_1 _inst_2}} {{g : MonoidHom.{u2, u1} M N _inst_1 _inst_2}}, (forall (x : M), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2))) f x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2))) g x)) -> (Eq.{max (succ u2) (succ u1)} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) f g)
+  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u1} N] {{f : MonoidHom.{u2, u1} M N _inst_1 _inst_2}} {{g : MonoidHom.{u2, u1} M N _inst_1 _inst_2}}, (forall (x : M), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2))) f x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2))) g x)) -> (Eq.{max (succ u2) (succ u1)} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) f g)
 Case conversion may be inaccurate. Consider using '#align monoid_hom.ext MonoidHom.extₓ'. -/
 @[ext, to_additive]
 theorem MonoidHom.ext [MulOneClass M] [MulOneClass N] ⦃f g : M →* N⦄ (h : ∀ x, f x = g x) : f = g :=
@@ -970,7 +970,7 @@ theorem MonoidHom.ext [MulOneClass M] [MulOneClass N] ⦃f g : M →* N⦄ (h :
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulZeroOneClass.{u1} M] [_inst_2 : MulZeroOneClass.{u2} N] {{f : MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2}} {{g : MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2}}, (forall (x : M), Eq.{succ u2} N (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MonoidWithZeroHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f x) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MonoidWithZeroHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) g x)) -> (Eq.{max (succ u2) (succ u1)} (MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) f g)
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : MulZeroOneClass.{u2} M] [_inst_2 : MulZeroOneClass.{u1} N] {{f : MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2}} {{g : MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2}}, (forall (x : M), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M (MulZeroOneClass.toMulOneClass.{u2} M _inst_1)) (MulOneClass.toMul.{u1} N (MulZeroOneClass.toMulOneClass.{u1} N _inst_2)) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulZeroOneClass.toMulOneClass.{u2} M _inst_1) (MulZeroOneClass.toMulOneClass.{u1} N _inst_2) (MonoidWithZeroHomClass.toMonoidHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidWithZeroHom.monoidWithZeroHomClass.{u2, u1} M N _inst_1 _inst_2)))) f x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M (MulZeroOneClass.toMulOneClass.{u2} M _inst_1)) (MulOneClass.toMul.{u1} N (MulZeroOneClass.toMulOneClass.{u1} N _inst_2)) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulZeroOneClass.toMulOneClass.{u2} M _inst_1) (MulZeroOneClass.toMulOneClass.{u1} N _inst_2) (MonoidWithZeroHomClass.toMonoidHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidWithZeroHom.monoidWithZeroHomClass.{u2, u1} M N _inst_1 _inst_2)))) g x)) -> (Eq.{max (succ u2) (succ u1)} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) f g)
+  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : MulZeroOneClass.{u2} M] [_inst_2 : MulZeroOneClass.{u1} N] {{f : MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2}} {{g : MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2}}, (forall (x : M), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M (MulZeroOneClass.toMulOneClass.{u2} M _inst_1)) (MulOneClass.toMul.{u1} N (MulZeroOneClass.toMulOneClass.{u1} N _inst_2)) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulZeroOneClass.toMulOneClass.{u2} M _inst_1) (MulZeroOneClass.toMulOneClass.{u1} N _inst_2) (MonoidWithZeroHomClass.toMonoidHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidWithZeroHom.monoidWithZeroHomClass.{u2, u1} M N _inst_1 _inst_2)))) f x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M (MulZeroOneClass.toMulOneClass.{u2} M _inst_1)) (MulOneClass.toMul.{u1} N (MulZeroOneClass.toMulOneClass.{u1} N _inst_2)) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulZeroOneClass.toMulOneClass.{u2} M _inst_1) (MulZeroOneClass.toMulOneClass.{u1} N _inst_2) (MonoidWithZeroHomClass.toMonoidHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidWithZeroHom.monoidWithZeroHomClass.{u2, u1} M N _inst_1 _inst_2)))) g x)) -> (Eq.{max (succ u2) (succ u1)} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) f g)
 Case conversion may be inaccurate. Consider using '#align monoid_with_zero_hom.ext MonoidWithZeroHom.extₓ'. -/
 @[ext]
 theorem MonoidWithZeroHom.ext [MulZeroOneClass M] [MulZeroOneClass N] ⦃f g : M →*₀ N⦄
@@ -984,7 +984,7 @@ section Deprecated
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : One.{u1} M] [_inst_2 : One.{u2} N] {f : OneHom.{u1, u2} M N _inst_1 _inst_2} {g : OneHom.{u1, u2} M N _inst_1 _inst_2}, (Eq.{max (succ u2) (succ u1)} (OneHom.{u1, u2} M N _inst_1 _inst_2) f g) -> (forall (x : M), Eq.{succ u2} N (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (OneHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : OneHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (OneHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f x) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (OneHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : OneHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (OneHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) g x))
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : One.{u2} M] [_inst_2 : One.{u1} N] {f : OneHom.{u2, u1} M N _inst_1 _inst_2} {g : OneHom.{u2, u1} M N _inst_1 _inst_2}, (Eq.{max (succ u2) (succ u1)} (OneHom.{u2, u1} M N _inst_1 _inst_2) f g) -> (forall (x : M), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1262 : M) => N) x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (OneHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1262 : M) => N) _x) (OneHomClass.toFunLike.{max u2 u1, u2, u1} (OneHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (OneHom.oneHomClass.{u2, u1} M N _inst_1 _inst_2)) f x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (OneHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1262 : M) => N) _x) (OneHomClass.toFunLike.{max u2 u1, u2, u1} (OneHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (OneHom.oneHomClass.{u2, u1} M N _inst_1 _inst_2)) g x))
+  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : One.{u2} M] [_inst_2 : One.{u1} N] {f : OneHom.{u2, u1} M N _inst_1 _inst_2} {g : OneHom.{u2, u1} M N _inst_1 _inst_2}, (Eq.{max (succ u2) (succ u1)} (OneHom.{u2, u1} M N _inst_1 _inst_2) f g) -> (forall (x : M), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1264 : M) => N) x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (OneHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1264 : M) => N) _x) (OneHomClass.toFunLike.{max u2 u1, u2, u1} (OneHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (OneHom.oneHomClass.{u2, u1} M N _inst_1 _inst_2)) f x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (OneHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1264 : M) => N) _x) (OneHomClass.toFunLike.{max u2 u1, u2, u1} (OneHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (OneHom.oneHomClass.{u2, u1} M N _inst_1 _inst_2)) g x))
 Case conversion may be inaccurate. Consider using '#align one_hom.congr_fun OneHom.congr_funₓ'. -/
 /-- Deprecated: use `fun_like.congr_fun` instead. -/
 @[to_additive "Deprecated: use `fun_like.congr_fun` instead."]
@@ -997,7 +997,7 @@ theorem OneHom.congr_fun [One M] [One N] {f g : OneHom M N} (h : f = g) (x : M)
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] {f : MulHom.{u1, u2} M N _inst_1 _inst_2} {g : MulHom.{u1, u2} M N _inst_1 _inst_2}, (Eq.{max (succ u2) (succ u1)} (MulHom.{u1, u2} M N _inst_1 _inst_2) f g) -> (forall (x : M), Eq.{succ u2} N (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MulHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MulHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MulHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f x) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MulHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MulHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MulHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) g x))
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : Mul.{u2} M] [_inst_2 : Mul.{u1} N] {f : MulHom.{u2, u1} M N _inst_1 _inst_2} {g : MulHom.{u2, u1} M N _inst_1 _inst_2}, (Eq.{max (succ u2) (succ u1)} (MulHom.{u2, u1} M N _inst_1 _inst_2) f g) -> (forall (x : M), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) f x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) g x))
+  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : Mul.{u2} M] [_inst_2 : Mul.{u1} N] {f : MulHom.{u2, u1} M N _inst_1 _inst_2} {g : MulHom.{u2, u1} M N _inst_1 _inst_2}, (Eq.{max (succ u2) (succ u1)} (MulHom.{u2, u1} M N _inst_1 _inst_2) f g) -> (forall (x : M), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) f x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) g x))
 Case conversion may be inaccurate. Consider using '#align mul_hom.congr_fun MulHom.congr_funₓ'. -/
 /-- Deprecated: use `fun_like.congr_fun` instead. -/
 @[to_additive "Deprecated: use `fun_like.congr_fun` instead."]
@@ -1010,7 +1010,7 @@ theorem MulHom.congr_fun [Mul M] [Mul N] {f g : M →ₙ* N} (h : f = g) (x : M)
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N] {f : MonoidHom.{u1, u2} M N _inst_1 _inst_2} {g : MonoidHom.{u1, u2} M N _inst_1 _inst_2}, (Eq.{max (succ u2) (succ u1)} (MonoidHom.{u1, u2} M N _inst_1 _inst_2) f g) -> (forall (x : M), Eq.{succ u2} N (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MonoidHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MonoidHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f x) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MonoidHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MonoidHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) g x))
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u1} N] {f : MonoidHom.{u2, u1} M N _inst_1 _inst_2} {g : MonoidHom.{u2, u1} M N _inst_1 _inst_2}, (Eq.{max (succ u2) (succ u1)} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) f g) -> (forall (x : M), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2))) f x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2))) g x))
+  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u1} N] {f : MonoidHom.{u2, u1} M N _inst_1 _inst_2} {g : MonoidHom.{u2, u1} M N _inst_1 _inst_2}, (Eq.{max (succ u2) (succ u1)} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) f g) -> (forall (x : M), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2))) f x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2))) g x))
 Case conversion may be inaccurate. Consider using '#align monoid_hom.congr_fun MonoidHom.congr_funₓ'. -/
 /-- Deprecated: use `fun_like.congr_fun` instead. -/
 @[to_additive "Deprecated: use `fun_like.congr_fun` instead."]
@@ -1024,7 +1024,7 @@ theorem MonoidHom.congr_fun [MulOneClass M] [MulOneClass N] {f g : M →* N} (h
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulZeroOneClass.{u1} M] [_inst_2 : MulZeroOneClass.{u2} N] {f : MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2} {g : MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2}, (Eq.{max (succ u2) (succ u1)} (MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) f g) -> (forall (x : M), Eq.{succ u2} N (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MonoidWithZeroHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f x) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MonoidWithZeroHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) g x))
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : MulZeroOneClass.{u2} M] [_inst_2 : MulZeroOneClass.{u1} N] {f : MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2} {g : MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2}, (Eq.{max (succ u2) (succ u1)} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) f g) -> (forall (x : M), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M (MulZeroOneClass.toMulOneClass.{u2} M _inst_1)) (MulOneClass.toMul.{u1} N (MulZeroOneClass.toMulOneClass.{u1} N _inst_2)) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulZeroOneClass.toMulOneClass.{u2} M _inst_1) (MulZeroOneClass.toMulOneClass.{u1} N _inst_2) (MonoidWithZeroHomClass.toMonoidHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidWithZeroHom.monoidWithZeroHomClass.{u2, u1} M N _inst_1 _inst_2)))) f x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M (MulZeroOneClass.toMulOneClass.{u2} M _inst_1)) (MulOneClass.toMul.{u1} N (MulZeroOneClass.toMulOneClass.{u1} N _inst_2)) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulZeroOneClass.toMulOneClass.{u2} M _inst_1) (MulZeroOneClass.toMulOneClass.{u1} N _inst_2) (MonoidWithZeroHomClass.toMonoidHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidWithZeroHom.monoidWithZeroHomClass.{u2, u1} M N _inst_1 _inst_2)))) g x))
+  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : MulZeroOneClass.{u2} M] [_inst_2 : MulZeroOneClass.{u1} N] {f : MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2} {g : MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2}, (Eq.{max (succ u2) (succ u1)} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) f g) -> (forall (x : M), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M (MulZeroOneClass.toMulOneClass.{u2} M _inst_1)) (MulOneClass.toMul.{u1} N (MulZeroOneClass.toMulOneClass.{u1} N _inst_2)) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulZeroOneClass.toMulOneClass.{u2} M _inst_1) (MulZeroOneClass.toMulOneClass.{u1} N _inst_2) (MonoidWithZeroHomClass.toMonoidHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidWithZeroHom.monoidWithZeroHomClass.{u2, u1} M N _inst_1 _inst_2)))) f x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M (MulZeroOneClass.toMulOneClass.{u2} M _inst_1)) (MulOneClass.toMul.{u1} N (MulZeroOneClass.toMulOneClass.{u1} N _inst_2)) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulZeroOneClass.toMulOneClass.{u2} M _inst_1) (MulZeroOneClass.toMulOneClass.{u1} N _inst_2) (MonoidWithZeroHomClass.toMonoidHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidWithZeroHom.monoidWithZeroHomClass.{u2, u1} M N _inst_1 _inst_2)))) g x))
 Case conversion may be inaccurate. Consider using '#align monoid_with_zero_hom.congr_fun MonoidWithZeroHom.congr_funₓ'. -/
 /-- Deprecated: use `fun_like.congr_fun` instead. -/
 theorem MonoidWithZeroHom.congr_fun [MulZeroOneClass M] [MulZeroOneClass N] {f g : M →*₀ N}
@@ -1036,7 +1036,7 @@ theorem MonoidWithZeroHom.congr_fun [MulZeroOneClass M] [MulZeroOneClass N] {f g
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : One.{u1} M] [_inst_2 : One.{u2} N] (f : OneHom.{u1, u2} M N _inst_1 _inst_2) {x : M} {y : M}, (Eq.{succ u1} M x y) -> (Eq.{succ u2} N (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (OneHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : OneHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (OneHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f x) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (OneHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : OneHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (OneHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f y))
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : One.{u2} M] [_inst_2 : One.{u1} N] (f : OneHom.{u2, u1} M N _inst_1 _inst_2) {x : M} {y : M}, (Eq.{succ u2} M x y) -> (Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1262 : M) => N) x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (OneHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1262 : M) => N) _x) (OneHomClass.toFunLike.{max u2 u1, u2, u1} (OneHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (OneHom.oneHomClass.{u2, u1} M N _inst_1 _inst_2)) f x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (OneHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1262 : M) => N) _x) (OneHomClass.toFunLike.{max u2 u1, u2, u1} (OneHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (OneHom.oneHomClass.{u2, u1} M N _inst_1 _inst_2)) f y))
+  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : One.{u2} M] [_inst_2 : One.{u1} N] (f : OneHom.{u2, u1} M N _inst_1 _inst_2) {x : M} {y : M}, (Eq.{succ u2} M x y) -> (Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1264 : M) => N) x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (OneHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1264 : M) => N) _x) (OneHomClass.toFunLike.{max u2 u1, u2, u1} (OneHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (OneHom.oneHomClass.{u2, u1} M N _inst_1 _inst_2)) f x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (OneHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1264 : M) => N) _x) (OneHomClass.toFunLike.{max u2 u1, u2, u1} (OneHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (OneHom.oneHomClass.{u2, u1} M N _inst_1 _inst_2)) f y))
 Case conversion may be inaccurate. Consider using '#align one_hom.congr_arg OneHom.congr_argₓ'. -/
 /-- Deprecated: use `fun_like.congr_arg` instead. -/
 @[to_additive "Deprecated: use `fun_like.congr_arg` instead."]
@@ -1049,7 +1049,7 @@ theorem OneHom.congr_arg [One M] [One N] (f : OneHom M N) {x y : M} (h : x = y)
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] (f : MulHom.{u1, u2} M N _inst_1 _inst_2) {x : M} {y : M}, (Eq.{succ u1} M x y) -> (Eq.{succ u2} N (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MulHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MulHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MulHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f x) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MulHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MulHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MulHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f y))
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : Mul.{u2} M] [_inst_2 : Mul.{u1} N] (f : MulHom.{u2, u1} M N _inst_1 _inst_2) {x : M} {y : M}, (Eq.{succ u2} M x y) -> (Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) f x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) f y))
+  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : Mul.{u2} M] [_inst_2 : Mul.{u1} N] (f : MulHom.{u2, u1} M N _inst_1 _inst_2) {x : M} {y : M}, (Eq.{succ u2} M x y) -> (Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) f x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) f y))
 Case conversion may be inaccurate. Consider using '#align mul_hom.congr_arg MulHom.congr_argₓ'. -/
 /-- Deprecated: use `fun_like.congr_arg` instead. -/
 @[to_additive "Deprecated: use `fun_like.congr_arg` instead."]
@@ -1062,7 +1062,7 @@ theorem MulHom.congr_arg [Mul M] [Mul N] (f : M →ₙ* N) {x y : M} (h : x = y)
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N] (f : MonoidHom.{u1, u2} M N _inst_1 _inst_2) {x : M} {y : M}, (Eq.{succ u1} M x y) -> (Eq.{succ u2} N (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MonoidHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MonoidHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f x) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MonoidHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MonoidHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f y))
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u1} N] (f : MonoidHom.{u2, u1} M N _inst_1 _inst_2) {x : M} {y : M}, (Eq.{succ u2} M x y) -> (Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2))) f x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2))) f y))
+  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u1} N] (f : MonoidHom.{u2, u1} M N _inst_1 _inst_2) {x : M} {y : M}, (Eq.{succ u2} M x y) -> (Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2))) f x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2))) f y))
 Case conversion may be inaccurate. Consider using '#align monoid_hom.congr_arg MonoidHom.congr_argₓ'. -/
 /-- Deprecated: use `fun_like.congr_arg` instead. -/
 @[to_additive "Deprecated: use `fun_like.congr_arg` instead."]
@@ -1076,7 +1076,7 @@ theorem MonoidHom.congr_arg [MulOneClass M] [MulOneClass N] (f : M →* N) {x y
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulZeroOneClass.{u1} M] [_inst_2 : MulZeroOneClass.{u2} N] (f : MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) {x : M} {y : M}, (Eq.{succ u1} M x y) -> (Eq.{succ u2} N (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MonoidWithZeroHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f x) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MonoidWithZeroHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f y))
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : MulZeroOneClass.{u2} M] [_inst_2 : MulZeroOneClass.{u1} N] (f : MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) {x : M} {y : M}, (Eq.{succ u2} M x y) -> (Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M (MulZeroOneClass.toMulOneClass.{u2} M _inst_1)) (MulOneClass.toMul.{u1} N (MulZeroOneClass.toMulOneClass.{u1} N _inst_2)) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulZeroOneClass.toMulOneClass.{u2} M _inst_1) (MulZeroOneClass.toMulOneClass.{u1} N _inst_2) (MonoidWithZeroHomClass.toMonoidHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidWithZeroHom.monoidWithZeroHomClass.{u2, u1} M N _inst_1 _inst_2)))) f x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M (MulZeroOneClass.toMulOneClass.{u2} M _inst_1)) (MulOneClass.toMul.{u1} N (MulZeroOneClass.toMulOneClass.{u1} N _inst_2)) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulZeroOneClass.toMulOneClass.{u2} M _inst_1) (MulZeroOneClass.toMulOneClass.{u1} N _inst_2) (MonoidWithZeroHomClass.toMonoidHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidWithZeroHom.monoidWithZeroHomClass.{u2, u1} M N _inst_1 _inst_2)))) f y))
+  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : MulZeroOneClass.{u2} M] [_inst_2 : MulZeroOneClass.{u1} N] (f : MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) {x : M} {y : M}, (Eq.{succ u2} M x y) -> (Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M (MulZeroOneClass.toMulOneClass.{u2} M _inst_1)) (MulOneClass.toMul.{u1} N (MulZeroOneClass.toMulOneClass.{u1} N _inst_2)) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulZeroOneClass.toMulOneClass.{u2} M _inst_1) (MulZeroOneClass.toMulOneClass.{u1} N _inst_2) (MonoidWithZeroHomClass.toMonoidHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidWithZeroHom.monoidWithZeroHomClass.{u2, u1} M N _inst_1 _inst_2)))) f x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M (MulZeroOneClass.toMulOneClass.{u2} M _inst_1)) (MulOneClass.toMul.{u1} N (MulZeroOneClass.toMulOneClass.{u1} N _inst_2)) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulZeroOneClass.toMulOneClass.{u2} M _inst_1) (MulZeroOneClass.toMulOneClass.{u1} N _inst_2) (MonoidWithZeroHomClass.toMonoidHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidWithZeroHom.monoidWithZeroHomClass.{u2, u1} M N _inst_1 _inst_2)))) f y))
 Case conversion may be inaccurate. Consider using '#align monoid_with_zero_hom.congr_arg MonoidWithZeroHom.congr_argₓ'. -/
 /-- Deprecated: use `fun_like.congr_arg` instead. -/
 theorem MonoidWithZeroHom.congr_arg [MulZeroOneClass M] [MulZeroOneClass N] (f : M →*₀ N) {x y : M}
@@ -1088,7 +1088,7 @@ theorem MonoidWithZeroHom.congr_arg [MulZeroOneClass M] [MulZeroOneClass N] (f :
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : One.{u1} M] [_inst_2 : One.{u2} N] {{f : OneHom.{u1, u2} M N _inst_1 _inst_2}} {{g : OneHom.{u1, u2} M N _inst_1 _inst_2}}, (Eq.{max (succ u1) (succ u2)} ((fun (_x : OneHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) f) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (OneHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : OneHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (OneHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (OneHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : OneHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (OneHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) g)) -> (Eq.{max (succ u2) (succ u1)} (OneHom.{u1, u2} M N _inst_1 _inst_2) f g)
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : One.{u2} M] [_inst_2 : One.{u1} N] {{f : OneHom.{u2, u1} M N _inst_1 _inst_2}} {{g : OneHom.{u2, u1} M N _inst_1 _inst_2}}, (Eq.{max (succ u2) (succ u1)} (forall (a : M), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1262 : M) => N) a) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (OneHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1262 : M) => N) _x) (OneHomClass.toFunLike.{max u2 u1, u2, u1} (OneHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (OneHom.oneHomClass.{u2, u1} M N _inst_1 _inst_2)) f) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (OneHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1262 : M) => N) _x) (OneHomClass.toFunLike.{max u2 u1, u2, u1} (OneHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (OneHom.oneHomClass.{u2, u1} M N _inst_1 _inst_2)) g)) -> (Eq.{max (succ u2) (succ u1)} (OneHom.{u2, u1} M N _inst_1 _inst_2) f g)
+  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : One.{u2} M] [_inst_2 : One.{u1} N] {{f : OneHom.{u2, u1} M N _inst_1 _inst_2}} {{g : OneHom.{u2, u1} M N _inst_1 _inst_2}}, (Eq.{max (succ u2) (succ u1)} (forall (a : M), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1264 : M) => N) a) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (OneHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1264 : M) => N) _x) (OneHomClass.toFunLike.{max u2 u1, u2, u1} (OneHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (OneHom.oneHomClass.{u2, u1} M N _inst_1 _inst_2)) f) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (OneHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1264 : M) => N) _x) (OneHomClass.toFunLike.{max u2 u1, u2, u1} (OneHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (OneHom.oneHomClass.{u2, u1} M N _inst_1 _inst_2)) g)) -> (Eq.{max (succ u2) (succ u1)} (OneHom.{u2, u1} M N _inst_1 _inst_2) f g)
 Case conversion may be inaccurate. Consider using '#align one_hom.coe_inj OneHom.coe_injₓ'. -/
 /-- Deprecated: use `fun_like.coe_injective` instead. -/
 @[to_additive "Deprecated: use `fun_like.coe_injective` instead."]
@@ -1101,7 +1101,7 @@ theorem OneHom.coe_inj [One M] [One N] ⦃f g : OneHom M N⦄ (h : (f : M → N)
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] {{f : MulHom.{u1, u2} M N _inst_1 _inst_2}} {{g : MulHom.{u1, u2} M N _inst_1 _inst_2}}, (Eq.{max (succ u1) (succ u2)} ((fun (_x : MulHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) f) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MulHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MulHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MulHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MulHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MulHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MulHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) g)) -> (Eq.{max (succ u2) (succ u1)} (MulHom.{u1, u2} M N _inst_1 _inst_2) f g)
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : Mul.{u2} M] [_inst_2 : Mul.{u1} N] {{f : MulHom.{u2, u1} M N _inst_1 _inst_2}} {{g : MulHom.{u2, u1} M N _inst_1 _inst_2}}, (Eq.{max (succ u2) (succ u1)} (forall (a : M), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) a) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) f) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) g)) -> (Eq.{max (succ u2) (succ u1)} (MulHom.{u2, u1} M N _inst_1 _inst_2) f g)
+  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : Mul.{u2} M] [_inst_2 : Mul.{u1} N] {{f : MulHom.{u2, u1} M N _inst_1 _inst_2}} {{g : MulHom.{u2, u1} M N _inst_1 _inst_2}}, (Eq.{max (succ u2) (succ u1)} (forall (a : M), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) a) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) f) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) g)) -> (Eq.{max (succ u2) (succ u1)} (MulHom.{u2, u1} M N _inst_1 _inst_2) f g)
 Case conversion may be inaccurate. Consider using '#align mul_hom.coe_inj MulHom.coe_injₓ'. -/
 /-- Deprecated: use `fun_like.coe_injective` instead. -/
 @[to_additive "Deprecated: use `fun_like.coe_injective` instead."]
@@ -1114,7 +1114,7 @@ theorem MulHom.coe_inj [Mul M] [Mul N] ⦃f g : M →ₙ* N⦄ (h : (f : M → N
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N] {{f : MonoidHom.{u1, u2} M N _inst_1 _inst_2}} {{g : MonoidHom.{u1, u2} M N _inst_1 _inst_2}}, (Eq.{max (succ u1) (succ u2)} ((fun (_x : MonoidHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) f) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MonoidHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MonoidHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MonoidHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MonoidHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) g)) -> (Eq.{max (succ u2) (succ u1)} (MonoidHom.{u1, u2} M N _inst_1 _inst_2) f g)
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u1} N] {{f : MonoidHom.{u2, u1} M N _inst_1 _inst_2}} {{g : MonoidHom.{u2, u1} M N _inst_1 _inst_2}}, (Eq.{max (succ u2) (succ u1)} (forall (a : M), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) a) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2))) f) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2))) g)) -> (Eq.{max (succ u2) (succ u1)} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) f g)
+  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u1} N] {{f : MonoidHom.{u2, u1} M N _inst_1 _inst_2}} {{g : MonoidHom.{u2, u1} M N _inst_1 _inst_2}}, (Eq.{max (succ u2) (succ u1)} (forall (a : M), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) a) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2))) f) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2))) g)) -> (Eq.{max (succ u2) (succ u1)} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) f g)
 Case conversion may be inaccurate. Consider using '#align monoid_hom.coe_inj MonoidHom.coe_injₓ'. -/
 /-- Deprecated: use `fun_like.coe_injective` instead. -/
 @[to_additive "Deprecated: use `fun_like.coe_injective` instead."]
@@ -1128,7 +1128,7 @@ theorem MonoidHom.coe_inj [MulOneClass M] [MulOneClass N] ⦃f g : M →* N⦄ (
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulZeroOneClass.{u1} M] [_inst_2 : MulZeroOneClass.{u2} N] {{f : MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2}} {{g : MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2}}, (Eq.{max (succ u1) (succ u2)} ((fun (_x : MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) f) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MonoidWithZeroHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MonoidWithZeroHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) g)) -> (Eq.{max (succ u2) (succ u1)} (MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) f g)
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : MulZeroOneClass.{u2} M] [_inst_2 : MulZeroOneClass.{u1} N] {{f : MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2}} {{g : MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2}}, (Eq.{max (succ u2) (succ u1)} (forall (a : M), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) a) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M (MulZeroOneClass.toMulOneClass.{u2} M _inst_1)) (MulOneClass.toMul.{u1} N (MulZeroOneClass.toMulOneClass.{u1} N _inst_2)) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulZeroOneClass.toMulOneClass.{u2} M _inst_1) (MulZeroOneClass.toMulOneClass.{u1} N _inst_2) (MonoidWithZeroHomClass.toMonoidHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidWithZeroHom.monoidWithZeroHomClass.{u2, u1} M N _inst_1 _inst_2)))) f) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M (MulZeroOneClass.toMulOneClass.{u2} M _inst_1)) (MulOneClass.toMul.{u1} N (MulZeroOneClass.toMulOneClass.{u1} N _inst_2)) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulZeroOneClass.toMulOneClass.{u2} M _inst_1) (MulZeroOneClass.toMulOneClass.{u1} N _inst_2) (MonoidWithZeroHomClass.toMonoidHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidWithZeroHom.monoidWithZeroHomClass.{u2, u1} M N _inst_1 _inst_2)))) g)) -> (Eq.{max (succ u2) (succ u1)} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) f g)
+  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : MulZeroOneClass.{u2} M] [_inst_2 : MulZeroOneClass.{u1} N] {{f : MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2}} {{g : MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2}}, (Eq.{max (succ u2) (succ u1)} (forall (a : M), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) a) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M (MulZeroOneClass.toMulOneClass.{u2} M _inst_1)) (MulOneClass.toMul.{u1} N (MulZeroOneClass.toMulOneClass.{u1} N _inst_2)) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulZeroOneClass.toMulOneClass.{u2} M _inst_1) (MulZeroOneClass.toMulOneClass.{u1} N _inst_2) (MonoidWithZeroHomClass.toMonoidHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidWithZeroHom.monoidWithZeroHomClass.{u2, u1} M N _inst_1 _inst_2)))) f) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M (MulZeroOneClass.toMulOneClass.{u2} M _inst_1)) (MulOneClass.toMul.{u1} N (MulZeroOneClass.toMulOneClass.{u1} N _inst_2)) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulZeroOneClass.toMulOneClass.{u2} M _inst_1) (MulZeroOneClass.toMulOneClass.{u1} N _inst_2) (MonoidWithZeroHomClass.toMonoidHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidWithZeroHom.monoidWithZeroHomClass.{u2, u1} M N _inst_1 _inst_2)))) g)) -> (Eq.{max (succ u2) (succ u1)} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) f g)
 Case conversion may be inaccurate. Consider using '#align monoid_with_zero_hom.coe_inj MonoidWithZeroHom.coe_injₓ'. -/
 /-- Deprecated: use `fun_like.coe_injective` instead. -/
 theorem MonoidWithZeroHom.coe_inj [MulZeroOneClass M] [MulZeroOneClass N] ⦃f g : M →*₀ N⦄
@@ -1140,7 +1140,7 @@ theorem MonoidWithZeroHom.coe_inj [MulZeroOneClass M] [MulZeroOneClass N] ⦃f g
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : One.{u1} M] [_inst_2 : One.{u2} N] {f : OneHom.{u1, u2} M N _inst_1 _inst_2} {g : OneHom.{u1, u2} M N _inst_1 _inst_2}, Iff (Eq.{max (succ u2) (succ u1)} (OneHom.{u1, u2} M N _inst_1 _inst_2) f g) (forall (x : M), Eq.{succ u2} N (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (OneHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : OneHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (OneHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f x) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (OneHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : OneHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (OneHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) g x))
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : One.{u2} M] [_inst_2 : One.{u1} N] {f : OneHom.{u2, u1} M N _inst_1 _inst_2} {g : OneHom.{u2, u1} M N _inst_1 _inst_2}, Iff (Eq.{max (succ u2) (succ u1)} (OneHom.{u2, u1} M N _inst_1 _inst_2) f g) (forall (x : M), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1262 : M) => N) x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (OneHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1262 : M) => N) _x) (OneHomClass.toFunLike.{max u2 u1, u2, u1} (OneHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (OneHom.oneHomClass.{u2, u1} M N _inst_1 _inst_2)) f x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (OneHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1262 : M) => N) _x) (OneHomClass.toFunLike.{max u2 u1, u2, u1} (OneHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (OneHom.oneHomClass.{u2, u1} M N _inst_1 _inst_2)) g x))
+  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : One.{u2} M] [_inst_2 : One.{u1} N] {f : OneHom.{u2, u1} M N _inst_1 _inst_2} {g : OneHom.{u2, u1} M N _inst_1 _inst_2}, Iff (Eq.{max (succ u2) (succ u1)} (OneHom.{u2, u1} M N _inst_1 _inst_2) f g) (forall (x : M), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1264 : M) => N) x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (OneHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1264 : M) => N) _x) (OneHomClass.toFunLike.{max u2 u1, u2, u1} (OneHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (OneHom.oneHomClass.{u2, u1} M N _inst_1 _inst_2)) f x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (OneHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1264 : M) => N) _x) (OneHomClass.toFunLike.{max u2 u1, u2, u1} (OneHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (OneHom.oneHomClass.{u2, u1} M N _inst_1 _inst_2)) g x))
 Case conversion may be inaccurate. Consider using '#align one_hom.ext_iff OneHom.ext_iffₓ'. -/
 /-- Deprecated: use `fun_like.ext_iff` instead. -/
 @[to_additive "Deprecated: use `fun_like.ext_iff` instead."]
@@ -1153,7 +1153,7 @@ theorem OneHom.ext_iff [One M] [One N] {f g : OneHom M N} : f = g ↔ ∀ x, f x
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] {f : MulHom.{u1, u2} M N _inst_1 _inst_2} {g : MulHom.{u1, u2} M N _inst_1 _inst_2}, Iff (Eq.{max (succ u2) (succ u1)} (MulHom.{u1, u2} M N _inst_1 _inst_2) f g) (forall (x : M), Eq.{succ u2} N (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MulHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MulHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MulHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f x) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MulHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MulHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MulHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) g x))
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : Mul.{u2} M] [_inst_2 : Mul.{u1} N] {f : MulHom.{u2, u1} M N _inst_1 _inst_2} {g : MulHom.{u2, u1} M N _inst_1 _inst_2}, Iff (Eq.{max (succ u2) (succ u1)} (MulHom.{u2, u1} M N _inst_1 _inst_2) f g) (forall (x : M), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) f x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) g x))
+  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : Mul.{u2} M] [_inst_2 : Mul.{u1} N] {f : MulHom.{u2, u1} M N _inst_1 _inst_2} {g : MulHom.{u2, u1} M N _inst_1 _inst_2}, Iff (Eq.{max (succ u2) (succ u1)} (MulHom.{u2, u1} M N _inst_1 _inst_2) f g) (forall (x : M), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) f x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) g x))
 Case conversion may be inaccurate. Consider using '#align mul_hom.ext_iff MulHom.ext_iffₓ'. -/
 /-- Deprecated: use `fun_like.ext_iff` instead. -/
 @[to_additive "Deprecated: use `fun_like.ext_iff` instead."]
@@ -1166,7 +1166,7 @@ theorem MulHom.ext_iff [Mul M] [Mul N] {f g : M →ₙ* N} : f = g ↔ ∀ x, f
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N] {f : MonoidHom.{u1, u2} M N _inst_1 _inst_2} {g : MonoidHom.{u1, u2} M N _inst_1 _inst_2}, Iff (Eq.{max (succ u2) (succ u1)} (MonoidHom.{u1, u2} M N _inst_1 _inst_2) f g) (forall (x : M), Eq.{succ u2} N (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MonoidHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MonoidHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f x) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MonoidHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MonoidHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) g x))
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u1} N] {f : MonoidHom.{u2, u1} M N _inst_1 _inst_2} {g : MonoidHom.{u2, u1} M N _inst_1 _inst_2}, Iff (Eq.{max (succ u2) (succ u1)} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) f g) (forall (x : M), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2))) f x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2))) g x))
+  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u1} N] {f : MonoidHom.{u2, u1} M N _inst_1 _inst_2} {g : MonoidHom.{u2, u1} M N _inst_1 _inst_2}, Iff (Eq.{max (succ u2) (succ u1)} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) f g) (forall (x : M), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2))) f x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2))) g x))
 Case conversion may be inaccurate. Consider using '#align monoid_hom.ext_iff MonoidHom.ext_iffₓ'. -/
 /-- Deprecated: use `fun_like.ext_iff` instead. -/
 @[to_additive "Deprecated: use `fun_like.ext_iff` instead."]
@@ -1179,7 +1179,7 @@ theorem MonoidHom.ext_iff [MulOneClass M] [MulOneClass N] {f g : M →* N} : f =
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulZeroOneClass.{u1} M] [_inst_2 : MulZeroOneClass.{u2} N] {f : MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2} {g : MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2}, Iff (Eq.{max (succ u2) (succ u1)} (MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) f g) (forall (x : M), Eq.{succ u2} N (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MonoidWithZeroHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f x) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MonoidWithZeroHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) g x))
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : MulZeroOneClass.{u2} M] [_inst_2 : MulZeroOneClass.{u1} N] {f : MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2} {g : MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2}, Iff (Eq.{max (succ u2) (succ u1)} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) f g) (forall (x : M), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M (MulZeroOneClass.toMulOneClass.{u2} M _inst_1)) (MulOneClass.toMul.{u1} N (MulZeroOneClass.toMulOneClass.{u1} N _inst_2)) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulZeroOneClass.toMulOneClass.{u2} M _inst_1) (MulZeroOneClass.toMulOneClass.{u1} N _inst_2) (MonoidWithZeroHomClass.toMonoidHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidWithZeroHom.monoidWithZeroHomClass.{u2, u1} M N _inst_1 _inst_2)))) f x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M (MulZeroOneClass.toMulOneClass.{u2} M _inst_1)) (MulOneClass.toMul.{u1} N (MulZeroOneClass.toMulOneClass.{u1} N _inst_2)) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulZeroOneClass.toMulOneClass.{u2} M _inst_1) (MulZeroOneClass.toMulOneClass.{u1} N _inst_2) (MonoidWithZeroHomClass.toMonoidHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidWithZeroHom.monoidWithZeroHomClass.{u2, u1} M N _inst_1 _inst_2)))) g x))
+  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : MulZeroOneClass.{u2} M] [_inst_2 : MulZeroOneClass.{u1} N] {f : MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2} {g : MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2}, Iff (Eq.{max (succ u2) (succ u1)} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) f g) (forall (x : M), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M (MulZeroOneClass.toMulOneClass.{u2} M _inst_1)) (MulOneClass.toMul.{u1} N (MulZeroOneClass.toMulOneClass.{u1} N _inst_2)) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulZeroOneClass.toMulOneClass.{u2} M _inst_1) (MulZeroOneClass.toMulOneClass.{u1} N _inst_2) (MonoidWithZeroHomClass.toMonoidHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidWithZeroHom.monoidWithZeroHomClass.{u2, u1} M N _inst_1 _inst_2)))) f x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M (MulZeroOneClass.toMulOneClass.{u2} M _inst_1)) (MulOneClass.toMul.{u1} N (MulZeroOneClass.toMulOneClass.{u1} N _inst_2)) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulZeroOneClass.toMulOneClass.{u2} M _inst_1) (MulZeroOneClass.toMulOneClass.{u1} N _inst_2) (MonoidWithZeroHomClass.toMonoidHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidWithZeroHom.monoidWithZeroHomClass.{u2, u1} M N _inst_1 _inst_2)))) g x))
 Case conversion may be inaccurate. Consider using '#align monoid_with_zero_hom.ext_iff MonoidWithZeroHom.ext_iffₓ'. -/
 /-- Deprecated: use `fun_like.ext_iff` instead. -/
 theorem MonoidWithZeroHom.ext_iff [MulZeroOneClass M] [MulZeroOneClass N] {f g : M →*₀ N} :
@@ -1193,7 +1193,7 @@ end Deprecated
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : One.{u1} M] [_inst_2 : One.{u2} N] (f : OneHom.{u1, u2} M N _inst_1 _inst_2) (h1 : Eq.{succ u2} N (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (OneHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : OneHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (OneHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f (OfNat.ofNat.{u1} M 1 (OfNat.mk.{u1} M 1 (One.one.{u1} M _inst_1)))) (OfNat.ofNat.{u2} N 1 (OfNat.mk.{u2} N 1 (One.one.{u2} N _inst_2)))), Eq.{max (succ u2) (succ u1)} (OneHom.{u1, u2} M N _inst_1 _inst_2) (OneHom.mk.{u1, u2} M N _inst_1 _inst_2 (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (OneHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : OneHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (OneHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f) h1) f
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : One.{u2} M] [_inst_2 : One.{u1} N] (f : OneHom.{u2, u1} M N _inst_1 _inst_2) (h1 : Eq.{succ u1} N (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (OneHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1262 : M) => N) _x) (OneHomClass.toFunLike.{max u2 u1, u2, u1} (OneHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (OneHom.oneHomClass.{u2, u1} M N _inst_1 _inst_2)) f (OfNat.ofNat.{u2} M 1 (One.toOfNat1.{u2} M _inst_1))) (OfNat.ofNat.{u1} N 1 (One.toOfNat1.{u1} N _inst_2))), Eq.{max (succ u2) (succ u1)} (OneHom.{u2, u1} M N _inst_1 _inst_2) (OneHom.mk.{u2, u1} M N _inst_1 _inst_2 (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (OneHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1262 : M) => N) _x) (OneHomClass.toFunLike.{max u2 u1, u2, u1} (OneHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (OneHom.oneHomClass.{u2, u1} M N _inst_1 _inst_2)) f) h1) f
+  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : One.{u2} M] [_inst_2 : One.{u1} N] (f : OneHom.{u2, u1} M N _inst_1 _inst_2) (h1 : Eq.{succ u1} N (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (OneHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1264 : M) => N) _x) (OneHomClass.toFunLike.{max u2 u1, u2, u1} (OneHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (OneHom.oneHomClass.{u2, u1} M N _inst_1 _inst_2)) f (OfNat.ofNat.{u2} M 1 (One.toOfNat1.{u2} M _inst_1))) (OfNat.ofNat.{u1} N 1 (One.toOfNat1.{u1} N _inst_2))), Eq.{max (succ u2) (succ u1)} (OneHom.{u2, u1} M N _inst_1 _inst_2) (OneHom.mk.{u2, u1} M N _inst_1 _inst_2 (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (OneHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1264 : M) => N) _x) (OneHomClass.toFunLike.{max u2 u1, u2, u1} (OneHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (OneHom.oneHomClass.{u2, u1} M N _inst_1 _inst_2)) f) h1) f
 Case conversion may be inaccurate. Consider using '#align one_hom.mk_coe OneHom.mk_coeₓ'. -/
 @[simp, to_additive]
 theorem OneHom.mk_coe [One M] [One N] (f : OneHom M N) (h1) : OneHom.mk f h1 = f :=
@@ -1205,7 +1205,7 @@ theorem OneHom.mk_coe [One M] [One N] (f : OneHom M N) (h1) : OneHom.mk f h1 = f
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] (f : MulHom.{u1, u2} M N _inst_1 _inst_2) (hmul : forall (x : M) (y : M), Eq.{succ u2} N (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MulHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MulHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MulHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f (HMul.hMul.{u1, u1, u1} M M M (instHMul.{u1} M _inst_1) x y)) (HMul.hMul.{u2, u2, u2} N N N (instHMul.{u2} N _inst_2) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MulHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MulHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MulHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f x) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MulHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MulHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MulHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f y))), Eq.{max (succ u2) (succ u1)} (MulHom.{u1, u2} M N _inst_1 _inst_2) (MulHom.mk.{u1, u2} M N _inst_1 _inst_2 (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MulHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MulHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MulHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f) hmul) f
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : Mul.{u2} M] [_inst_2 : Mul.{u1} N] (f : MulHom.{u2, u1} M N _inst_1 _inst_2) (hmul : forall (x : M) (y : M), Eq.{succ u1} N (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) f (HMul.hMul.{u2, u2, u2} M M M (instHMul.{u2} M _inst_1) x y)) (HMul.hMul.{u1, u1, u1} N N N (instHMul.{u1} N _inst_2) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) f x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) f y))), Eq.{max (succ u2) (succ u1)} (MulHom.{u2, u1} M N _inst_1 _inst_2) (MulHom.mk.{u2, u1} M N _inst_1 _inst_2 (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) f) hmul) f
+  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : Mul.{u2} M] [_inst_2 : Mul.{u1} N] (f : MulHom.{u2, u1} M N _inst_1 _inst_2) (hmul : forall (x : M) (y : M), Eq.{succ u1} N (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) f (HMul.hMul.{u2, u2, u2} M M M (instHMul.{u2} M _inst_1) x y)) (HMul.hMul.{u1, u1, u1} N N N (instHMul.{u1} N _inst_2) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) f x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) f y))), Eq.{max (succ u2) (succ u1)} (MulHom.{u2, u1} M N _inst_1 _inst_2) (MulHom.mk.{u2, u1} M N _inst_1 _inst_2 (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) f) hmul) f
 Case conversion may be inaccurate. Consider using '#align mul_hom.mk_coe MulHom.mk_coeₓ'. -/
 @[simp, to_additive]
 theorem MulHom.mk_coe [Mul M] [Mul N] (f : M →ₙ* N) (hmul) : MulHom.mk f hmul = f :=
@@ -1257,7 +1257,7 @@ protected def OneHom.copy {hM : One M} {hN : One N} (f : OneHom M N) (f' : M →
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} {hM : One.{u1} M} {hN : One.{u2} N} (f : OneHom.{u1, u2} M N hM hN) (f' : M -> N) (h : Eq.{max (succ u1) (succ u2)} (M -> N) f' (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (OneHom.{u1, u2} M N hM hN) (fun (_x : OneHom.{u1, u2} M N hM hN) => M -> N) (OneHom.hasCoeToFun.{u1, u2} M N hM hN) f)), Eq.{max (succ u1) (succ u2)} (M -> N) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (OneHom.{u1, u2} M N hM hN) (fun (_x : OneHom.{u1, u2} M N hM hN) => M -> N) (OneHom.hasCoeToFun.{u1, u2} M N hM hN) (OneHom.copy.{u1, u2} M N hM hN f f' h)) f'
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} {hM : One.{u2} M} {hN : One.{u1} N} (f : OneHom.{u2, u1} M N hM hN) (f' : M -> N) (h : Eq.{max (succ u2) (succ u1)} (M -> N) f' (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (OneHom.{u2, u1} M N hM hN) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1262 : M) => N) _x) (OneHomClass.toFunLike.{max u2 u1, u2, u1} (OneHom.{u2, u1} M N hM hN) M N hM hN (OneHom.oneHomClass.{u2, u1} M N hM hN)) f)), Eq.{max (succ u2) (succ u1)} (forall (ᾰ : M), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1262 : M) => N) ᾰ) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (OneHom.{u2, u1} M N hM hN) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1262 : M) => N) _x) (OneHomClass.toFunLike.{max u2 u1, u2, u1} (OneHom.{u2, u1} M N hM hN) M N hM hN (OneHom.oneHomClass.{u2, u1} M N hM hN)) (OneHom.copy.{u2, u1} M N hM hN f f' h)) f'
+  forall {M : Type.{u2}} {N : Type.{u1}} {hM : One.{u2} M} {hN : One.{u1} N} (f : OneHom.{u2, u1} M N hM hN) (f' : M -> N) (h : Eq.{max (succ u2) (succ u1)} (M -> N) f' (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (OneHom.{u2, u1} M N hM hN) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1264 : M) => N) _x) (OneHomClass.toFunLike.{max u2 u1, u2, u1} (OneHom.{u2, u1} M N hM hN) M N hM hN (OneHom.oneHomClass.{u2, u1} M N hM hN)) f)), Eq.{max (succ u2) (succ u1)} (forall (ᾰ : M), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1264 : M) => N) ᾰ) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (OneHom.{u2, u1} M N hM hN) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1264 : M) => N) _x) (OneHomClass.toFunLike.{max u2 u1, u2, u1} (OneHom.{u2, u1} M N hM hN) M N hM hN (OneHom.oneHomClass.{u2, u1} M N hM hN)) (OneHom.copy.{u2, u1} M N hM hN f f' h)) f'
 Case conversion may be inaccurate. Consider using '#align one_hom.coe_copy OneHom.coe_copyₓ'. -/
 @[simp, to_additive]
 theorem OneHom.coe_copy {hM : One M} {hN : One N} (f : OneHom M N) (f' : M → N) (h : f' = f) :
@@ -1270,7 +1270,7 @@ theorem OneHom.coe_copy {hM : One M} {hN : One N} (f : OneHom M N) (f' : M → N
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} {hM : One.{u1} M} {hN : One.{u2} N} (f : OneHom.{u1, u2} M N hM hN) (f' : M -> N) (h : Eq.{max (succ u1) (succ u2)} (M -> N) f' (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (OneHom.{u1, u2} M N hM hN) (fun (_x : OneHom.{u1, u2} M N hM hN) => M -> N) (OneHom.hasCoeToFun.{u1, u2} M N hM hN) f)), Eq.{max (succ u2) (succ u1)} (OneHom.{u1, u2} M N hM hN) (OneHom.copy.{u1, u2} M N hM hN f f' h) f
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} {hM : One.{u2} M} {hN : One.{u1} N} (f : OneHom.{u2, u1} M N hM hN) (f' : M -> N) (h : Eq.{max (succ u2) (succ u1)} (M -> N) f' (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (OneHom.{u2, u1} M N hM hN) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1262 : M) => N) _x) (OneHomClass.toFunLike.{max u2 u1, u2, u1} (OneHom.{u2, u1} M N hM hN) M N hM hN (OneHom.oneHomClass.{u2, u1} M N hM hN)) f)), Eq.{max (succ u2) (succ u1)} (OneHom.{u2, u1} M N hM hN) (OneHom.copy.{u2, u1} M N hM hN f f' h) f
+  forall {M : Type.{u2}} {N : Type.{u1}} {hM : One.{u2} M} {hN : One.{u1} N} (f : OneHom.{u2, u1} M N hM hN) (f' : M -> N) (h : Eq.{max (succ u2) (succ u1)} (M -> N) f' (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (OneHom.{u2, u1} M N hM hN) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1264 : M) => N) _x) (OneHomClass.toFunLike.{max u2 u1, u2, u1} (OneHom.{u2, u1} M N hM hN) M N hM hN (OneHom.oneHomClass.{u2, u1} M N hM hN)) f)), Eq.{max (succ u2) (succ u1)} (OneHom.{u2, u1} M N hM hN) (OneHom.copy.{u2, u1} M N hM hN f f' h) f
 Case conversion may be inaccurate. Consider using '#align one_hom.coe_copy_eq OneHom.coe_copy_eqₓ'. -/
 @[to_additive]
 theorem OneHom.coe_copy_eq {hM : One M} {hN : One N} (f : OneHom M N) (f' : M → N) (h : f' = f) :
@@ -1296,7 +1296,7 @@ protected def MulHom.copy {hM : Mul M} {hN : Mul N} (f : M →ₙ* N) (f' : M 
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} {hM : Mul.{u1} M} {hN : Mul.{u2} N} (f : MulHom.{u1, u2} M N hM hN) (f' : M -> N) (h : Eq.{max (succ u1) (succ u2)} (M -> N) f' (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MulHom.{u1, u2} M N hM hN) (fun (_x : MulHom.{u1, u2} M N hM hN) => M -> N) (MulHom.hasCoeToFun.{u1, u2} M N hM hN) f)), Eq.{max (succ u1) (succ u2)} (M -> N) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MulHom.{u1, u2} M N hM hN) (fun (_x : MulHom.{u1, u2} M N hM hN) => M -> N) (MulHom.hasCoeToFun.{u1, u2} M N hM hN) (MulHom.copy.{u1, u2} M N hM hN f f' h)) f'
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} {hM : Mul.{u2} M} {hN : Mul.{u1} N} (f : MulHom.{u2, u1} M N hM hN) (f' : M -> N) (h : Eq.{max (succ u2) (succ u1)} (M -> N) f' (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N hM hN) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N hM hN) M N hM hN (MulHom.mulHomClass.{u2, u1} M N hM hN)) f)), Eq.{max (succ u2) (succ u1)} (forall (ᾰ : M), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) ᾰ) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N hM hN) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N hM hN) M N hM hN (MulHom.mulHomClass.{u2, u1} M N hM hN)) (MulHom.copy.{u2, u1} M N hM hN f f' h)) f'
+  forall {M : Type.{u2}} {N : Type.{u1}} {hM : Mul.{u2} M} {hN : Mul.{u1} N} (f : MulHom.{u2, u1} M N hM hN) (f' : M -> N) (h : Eq.{max (succ u2) (succ u1)} (M -> N) f' (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N hM hN) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N hM hN) M N hM hN (MulHom.mulHomClass.{u2, u1} M N hM hN)) f)), Eq.{max (succ u2) (succ u1)} (forall (ᾰ : M), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) ᾰ) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N hM hN) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N hM hN) M N hM hN (MulHom.mulHomClass.{u2, u1} M N hM hN)) (MulHom.copy.{u2, u1} M N hM hN f f' h)) f'
 Case conversion may be inaccurate. Consider using '#align mul_hom.coe_copy MulHom.coe_copyₓ'. -/
 @[simp, to_additive]
 theorem MulHom.coe_copy {hM : Mul M} {hN : Mul N} (f : M →ₙ* N) (f' : M → N) (h : f' = f) :
@@ -1309,7 +1309,7 @@ theorem MulHom.coe_copy {hM : Mul M} {hN : Mul N} (f : M →ₙ* N) (f' : M →
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} {hM : Mul.{u1} M} {hN : Mul.{u2} N} (f : MulHom.{u1, u2} M N hM hN) (f' : M -> N) (h : Eq.{max (succ u1) (succ u2)} (M -> N) f' (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MulHom.{u1, u2} M N hM hN) (fun (_x : MulHom.{u1, u2} M N hM hN) => M -> N) (MulHom.hasCoeToFun.{u1, u2} M N hM hN) f)), Eq.{max (succ u2) (succ u1)} (MulHom.{u1, u2} M N hM hN) (MulHom.copy.{u1, u2} M N hM hN f f' h) f
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} {hM : Mul.{u2} M} {hN : Mul.{u1} N} (f : MulHom.{u2, u1} M N hM hN) (f' : M -> N) (h : Eq.{max (succ u2) (succ u1)} (M -> N) f' (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N hM hN) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N hM hN) M N hM hN (MulHom.mulHomClass.{u2, u1} M N hM hN)) f)), Eq.{max (succ u2) (succ u1)} (MulHom.{u2, u1} M N hM hN) (MulHom.copy.{u2, u1} M N hM hN f f' h) f
+  forall {M : Type.{u2}} {N : Type.{u1}} {hM : Mul.{u2} M} {hN : Mul.{u1} N} (f : MulHom.{u2, u1} M N hM hN) (f' : M -> N) (h : Eq.{max (succ u2) (succ u1)} (M -> N) f' (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N hM hN) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N hM hN) M N hM hN (MulHom.mulHomClass.{u2, u1} M N hM hN)) f)), Eq.{max (succ u2) (succ u1)} (MulHom.{u2, u1} M N hM hN) (MulHom.copy.{u2, u1} M N hM hN f f' h) f
 Case conversion may be inaccurate. Consider using '#align mul_hom.coe_copy_eq MulHom.coe_copy_eqₓ'. -/
 @[to_additive]
 theorem MulHom.coe_copy_eq {hM : Mul M} {hN : Mul N} (f : M →ₙ* N) (f' : M → N) (h : f' = f) :
@@ -1322,7 +1322,7 @@ theorem MulHom.coe_copy_eq {hM : Mul M} {hN : Mul N} (f : M →ₙ* N) (f' : M 
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} {hM : MulOneClass.{u1} M} {hN : MulOneClass.{u2} N} (f : MonoidHom.{u1, u2} M N hM hN) (f' : M -> N), (Eq.{max (succ u1) (succ u2)} (M -> N) f' (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} M N hM hN) (fun (_x : MonoidHom.{u1, u2} M N hM hN) => M -> N) (MonoidHom.hasCoeToFun.{u1, u2} M N hM hN) f)) -> (MonoidHom.{u1, u2} M N hM hN)
 but is expected to have type
-  forall {M : Type.{u1}} {N : Type.{u2}} [hM : MulOneClass.{u1} M] [hN : MulOneClass.{u2} N] (f : MonoidHom.{u1, u2} M N hM hN) (f' : M -> N), (Eq.{max (succ u1) (succ u2)} (M -> N) f' (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (MonoidHom.{u1, u2} M N hM hN) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{max u1 u2, u1, u2} (MonoidHom.{u1, u2} M N hM hN) M N (MulOneClass.toMul.{u1} M hM) (MulOneClass.toMul.{u2} N hN) (MonoidHomClass.toMulHomClass.{max u1 u2, u1, u2} (MonoidHom.{u1, u2} M N hM hN) M N hM hN (MonoidHom.monoidHomClass.{u1, u2} M N hM hN))) f)) -> (MonoidHom.{u1, u2} M N hM hN)
+  forall {M : Type.{u1}} {N : Type.{u2}} [hM : MulOneClass.{u1} M] [hN : MulOneClass.{u2} N] (f : MonoidHom.{u1, u2} M N hM hN) (f' : M -> N), (Eq.{max (succ u1) (succ u2)} (M -> N) f' (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (MonoidHom.{u1, u2} M N hM hN) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{max u1 u2, u1, u2} (MonoidHom.{u1, u2} M N hM hN) M N (MulOneClass.toMul.{u1} M hM) (MulOneClass.toMul.{u2} N hN) (MonoidHomClass.toMulHomClass.{max u1 u2, u1, u2} (MonoidHom.{u1, u2} M N hM hN) M N hM hN (MonoidHom.monoidHomClass.{u1, u2} M N hM hN))) f)) -> (MonoidHom.{u1, u2} M N hM hN)
 Case conversion may be inaccurate. Consider using '#align monoid_hom.copy MonoidHom.copyₓ'. -/
 /-- Copy of a `monoid_hom` with a new `to_fun` equal to the old one. Useful to fix
 definitional equalities. -/
@@ -1338,7 +1338,7 @@ protected def MonoidHom.copy {hM : MulOneClass M} {hN : MulOneClass N} (f : M 
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} {hM : MulOneClass.{u1} M} {hN : MulOneClass.{u2} N} (f : MonoidHom.{u1, u2} M N hM hN) (f' : M -> N) (h : Eq.{max (succ u1) (succ u2)} (M -> N) f' (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} M N hM hN) (fun (_x : MonoidHom.{u1, u2} M N hM hN) => M -> N) (MonoidHom.hasCoeToFun.{u1, u2} M N hM hN) f)), Eq.{max (succ u1) (succ u2)} (M -> N) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} M N hM hN) (fun (_x : MonoidHom.{u1, u2} M N hM hN) => M -> N) (MonoidHom.hasCoeToFun.{u1, u2} M N hM hN) (MonoidHom.copy.{u1, u2} M N hM hN f f' h)) f'
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} {hM : MulOneClass.{u2} M} {hN : MulOneClass.{u1} N} (f : MonoidHom.{u2, u1} M N hM hN) (f' : M -> N) (h : Eq.{max (succ u2) (succ u1)} (M -> N) f' (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M N hM hN) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N hM hN) M N (MulOneClass.toMul.{u2} M hM) (MulOneClass.toMul.{u1} N hN) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N hM hN) M N hM hN (MonoidHom.monoidHomClass.{u2, u1} M N hM hN))) f)), Eq.{max (succ u2) (succ u1)} (forall (ᾰ : M), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) ᾰ) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M N hM hN) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N hM hN) M N (MulOneClass.toMul.{u2} M hM) (MulOneClass.toMul.{u1} N hN) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N hM hN) M N hM hN (MonoidHom.monoidHomClass.{u2, u1} M N hM hN))) (MonoidHom.copy.{u2, u1} M N hM hN f f' h)) f'
+  forall {M : Type.{u2}} {N : Type.{u1}} {hM : MulOneClass.{u2} M} {hN : MulOneClass.{u1} N} (f : MonoidHom.{u2, u1} M N hM hN) (f' : M -> N) (h : Eq.{max (succ u2) (succ u1)} (M -> N) f' (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M N hM hN) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N hM hN) M N (MulOneClass.toMul.{u2} M hM) (MulOneClass.toMul.{u1} N hN) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N hM hN) M N hM hN (MonoidHom.monoidHomClass.{u2, u1} M N hM hN))) f)), Eq.{max (succ u2) (succ u1)} (forall (ᾰ : M), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) ᾰ) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M N hM hN) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N hM hN) M N (MulOneClass.toMul.{u2} M hM) (MulOneClass.toMul.{u1} N hN) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N hM hN) M N hM hN (MonoidHom.monoidHomClass.{u2, u1} M N hM hN))) (MonoidHom.copy.{u2, u1} M N hM hN f f' h)) f'
 Case conversion may be inaccurate. Consider using '#align monoid_hom.coe_copy MonoidHom.coe_copyₓ'. -/
 @[simp, to_additive]
 theorem MonoidHom.coe_copy {hM : MulOneClass M} {hN : MulOneClass N} (f : M →* N) (f' : M → N)
@@ -1351,7 +1351,7 @@ theorem MonoidHom.coe_copy {hM : MulOneClass M} {hN : MulOneClass N} (f : M →*
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} {hM : MulOneClass.{u1} M} {hN : MulOneClass.{u2} N} (f : MonoidHom.{u1, u2} M N hM hN) (f' : M -> N) (h : Eq.{max (succ u1) (succ u2)} (M -> N) f' (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} M N hM hN) (fun (_x : MonoidHom.{u1, u2} M N hM hN) => M -> N) (MonoidHom.hasCoeToFun.{u1, u2} M N hM hN) f)), Eq.{max (succ u2) (succ u1)} (MonoidHom.{u1, u2} M N hM hN) (MonoidHom.copy.{u1, u2} M N hM hN f f' h) f
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} {hM : MulOneClass.{u2} M} {hN : MulOneClass.{u1} N} (f : MonoidHom.{u2, u1} M N hM hN) (f' : M -> N) (h : Eq.{max (succ u2) (succ u1)} (M -> N) f' (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M N hM hN) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N hM hN) M N (MulOneClass.toMul.{u2} M hM) (MulOneClass.toMul.{u1} N hN) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N hM hN) M N hM hN (MonoidHom.monoidHomClass.{u2, u1} M N hM hN))) f)), Eq.{max (succ u2) (succ u1)} (MonoidHom.{u2, u1} M N hM hN) (MonoidHom.copy.{u2, u1} M N hM hN f f' h) f
+  forall {M : Type.{u2}} {N : Type.{u1}} {hM : MulOneClass.{u2} M} {hN : MulOneClass.{u1} N} (f : MonoidHom.{u2, u1} M N hM hN) (f' : M -> N) (h : Eq.{max (succ u2) (succ u1)} (M -> N) f' (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M N hM hN) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N hM hN) M N (MulOneClass.toMul.{u2} M hM) (MulOneClass.toMul.{u1} N hN) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N hM hN) M N hM hN (MonoidHom.monoidHomClass.{u2, u1} M N hM hN))) f)), Eq.{max (succ u2) (succ u1)} (MonoidHom.{u2, u1} M N hM hN) (MonoidHom.copy.{u2, u1} M N hM hN f f' h) f
 Case conversion may be inaccurate. Consider using '#align monoid_hom.copy_eq MonoidHom.copy_eqₓ'. -/
 @[to_additive]
 theorem MonoidHom.copy_eq {hM : MulOneClass M} {hN : MulOneClass N} (f : M →* N) (f' : M → N)
@@ -1364,7 +1364,7 @@ theorem MonoidHom.copy_eq {hM : MulOneClass M} {hN : MulOneClass N} (f : M →*
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} {hM : MulZeroOneClass.{u1} M} {hN : MulZeroOneClass.{u2} N} (f : MonoidWithZeroHom.{u1, u2} M N hM hN) (f' : M -> N), (Eq.{max (succ u1) (succ u2)} (M -> N) f' (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidWithZeroHom.{u1, u2} M N hM hN) (fun (_x : MonoidWithZeroHom.{u1, u2} M N hM hN) => M -> N) (MonoidWithZeroHom.hasCoeToFun.{u1, u2} M N hM hN) f)) -> (MonoidHom.{u1, u2} M N (MulZeroOneClass.toMulOneClass.{u1} M hM) (MulZeroOneClass.toMulOneClass.{u2} N hN))
 but is expected to have type
-  forall {M : Type.{u1}} {N : Type.{u2}} [hM : MulZeroOneClass.{u1} M] [hN : MulZeroOneClass.{u2} N] (f : MonoidWithZeroHom.{u1, u2} M N hM hN) (f' : M -> N), (Eq.{max (succ u1) (succ u2)} (M -> N) f' (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (MonoidWithZeroHom.{u1, u2} M N hM hN) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{max u1 u2, u1, u2} (MonoidWithZeroHom.{u1, u2} M N hM hN) M N (MulOneClass.toMul.{u1} M (MulZeroOneClass.toMulOneClass.{u1} M hM)) (MulOneClass.toMul.{u2} N (MulZeroOneClass.toMulOneClass.{u2} N hN)) (MonoidHomClass.toMulHomClass.{max u1 u2, u1, u2} (MonoidWithZeroHom.{u1, u2} M N hM hN) M N (MulZeroOneClass.toMulOneClass.{u1} M hM) (MulZeroOneClass.toMulOneClass.{u2} N hN) (MonoidWithZeroHomClass.toMonoidHomClass.{max u1 u2, u1, u2} (MonoidWithZeroHom.{u1, u2} M N hM hN) M N hM hN (MonoidWithZeroHom.monoidWithZeroHomClass.{u1, u2} M N hM hN)))) f)) -> (MonoidHom.{u1, u2} M N (MulZeroOneClass.toMulOneClass.{u1} M hM) (MulZeroOneClass.toMulOneClass.{u2} N hN))
+  forall {M : Type.{u1}} {N : Type.{u2}} [hM : MulZeroOneClass.{u1} M] [hN : MulZeroOneClass.{u2} N] (f : MonoidWithZeroHom.{u1, u2} M N hM hN) (f' : M -> N), (Eq.{max (succ u1) (succ u2)} (M -> N) f' (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (MonoidWithZeroHom.{u1, u2} M N hM hN) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{max u1 u2, u1, u2} (MonoidWithZeroHom.{u1, u2} M N hM hN) M N (MulOneClass.toMul.{u1} M (MulZeroOneClass.toMulOneClass.{u1} M hM)) (MulOneClass.toMul.{u2} N (MulZeroOneClass.toMulOneClass.{u2} N hN)) (MonoidHomClass.toMulHomClass.{max u1 u2, u1, u2} (MonoidWithZeroHom.{u1, u2} M N hM hN) M N (MulZeroOneClass.toMulOneClass.{u1} M hM) (MulZeroOneClass.toMulOneClass.{u2} N hN) (MonoidWithZeroHomClass.toMonoidHomClass.{max u1 u2, u1, u2} (MonoidWithZeroHom.{u1, u2} M N hM hN) M N hM hN (MonoidWithZeroHom.monoidWithZeroHomClass.{u1, u2} M N hM hN)))) f)) -> (MonoidHom.{u1, u2} M N (MulZeroOneClass.toMulOneClass.{u1} M hM) (MulZeroOneClass.toMulOneClass.{u2} N hN))
 Case conversion may be inaccurate. Consider using '#align monoid_with_zero_hom.copy MonoidWithZeroHom.copyₓ'. -/
 /-- Copy of a `monoid_hom` with a new `to_fun` equal to the old one. Useful to fix
 definitional equalities. -/
@@ -1377,7 +1377,7 @@ protected def MonoidWithZeroHom.copy {hM : MulZeroOneClass M} {hN : MulZeroOneCl
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} {hM : MulZeroOneClass.{u1} M} {hN : MulZeroOneClass.{u2} N} (f : MonoidWithZeroHom.{u1, u2} M N hM hN) (f' : M -> N) (h : Eq.{max (succ u1) (succ u2)} (M -> N) f' (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidWithZeroHom.{u1, u2} M N hM hN) (fun (_x : MonoidWithZeroHom.{u1, u2} M N hM hN) => M -> N) (MonoidWithZeroHom.hasCoeToFun.{u1, u2} M N hM hN) f)), Eq.{max (succ u1) (succ u2)} (M -> N) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} M N (MulZeroOneClass.toMulOneClass.{u1} M hM) (MulZeroOneClass.toMulOneClass.{u2} N hN)) (fun (_x : MonoidHom.{u1, u2} M N (MulZeroOneClass.toMulOneClass.{u1} M hM) (MulZeroOneClass.toMulOneClass.{u2} N hN)) => M -> N) (MonoidHom.hasCoeToFun.{u1, u2} M N (MulZeroOneClass.toMulOneClass.{u1} M hM) (MulZeroOneClass.toMulOneClass.{u2} N hN)) (MonoidWithZeroHom.copy.{u1, u2} M N hM hN f f' h)) f'
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} {hM : MulZeroOneClass.{u2} M} {hN : MulZeroOneClass.{u1} N} (f : MonoidWithZeroHom.{u2, u1} M N hM hN) (f' : M -> N) (h : Eq.{max (succ u2) (succ u1)} (M -> N) f' (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidWithZeroHom.{u2, u1} M N hM hN) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N hM hN) M N (MulOneClass.toMul.{u2} M (MulZeroOneClass.toMulOneClass.{u2} M hM)) (MulOneClass.toMul.{u1} N (MulZeroOneClass.toMulOneClass.{u1} N hN)) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N hM hN) M N (MulZeroOneClass.toMulOneClass.{u2} M hM) (MulZeroOneClass.toMulOneClass.{u1} N hN) (MonoidWithZeroHomClass.toMonoidHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N hM hN) M N hM hN (MonoidWithZeroHom.monoidWithZeroHomClass.{u2, u1} M N hM hN)))) f)), Eq.{max (succ u2) (succ u1)} (forall (ᾰ : M), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) ᾰ) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M N (MulZeroOneClass.toMulOneClass.{u2} M hM) (MulZeroOneClass.toMulOneClass.{u1} N hN)) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N (MulZeroOneClass.toMulOneClass.{u2} M hM) (MulZeroOneClass.toMulOneClass.{u1} N hN)) M N (MulOneClass.toMul.{u2} M (MulZeroOneClass.toMulOneClass.{u2} M hM)) (MulOneClass.toMul.{u1} N (MulZeroOneClass.toMulOneClass.{u1} N hN)) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N (MulZeroOneClass.toMulOneClass.{u2} M hM) (MulZeroOneClass.toMulOneClass.{u1} N hN)) M N (MulZeroOneClass.toMulOneClass.{u2} M hM) (MulZeroOneClass.toMulOneClass.{u1} N hN) (MonoidHom.monoidHomClass.{u2, u1} M N (MulZeroOneClass.toMulOneClass.{u2} M hM) (MulZeroOneClass.toMulOneClass.{u1} N hN)))) (MonoidWithZeroHom.copy.{u2, u1} M N hM hN f f' h)) f'
+  forall {M : Type.{u2}} {N : Type.{u1}} {hM : MulZeroOneClass.{u2} M} {hN : MulZeroOneClass.{u1} N} (f : MonoidWithZeroHom.{u2, u1} M N hM hN) (f' : M -> N) (h : Eq.{max (succ u2) (succ u1)} (M -> N) f' (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidWithZeroHom.{u2, u1} M N hM hN) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N hM hN) M N (MulOneClass.toMul.{u2} M (MulZeroOneClass.toMulOneClass.{u2} M hM)) (MulOneClass.toMul.{u1} N (MulZeroOneClass.toMulOneClass.{u1} N hN)) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N hM hN) M N (MulZeroOneClass.toMulOneClass.{u2} M hM) (MulZeroOneClass.toMulOneClass.{u1} N hN) (MonoidWithZeroHomClass.toMonoidHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N hM hN) M N hM hN (MonoidWithZeroHom.monoidWithZeroHomClass.{u2, u1} M N hM hN)))) f)), Eq.{max (succ u2) (succ u1)} (forall (ᾰ : M), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) ᾰ) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M N (MulZeroOneClass.toMulOneClass.{u2} M hM) (MulZeroOneClass.toMulOneClass.{u1} N hN)) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N (MulZeroOneClass.toMulOneClass.{u2} M hM) (MulZeroOneClass.toMulOneClass.{u1} N hN)) M N (MulOneClass.toMul.{u2} M (MulZeroOneClass.toMulOneClass.{u2} M hM)) (MulOneClass.toMul.{u1} N (MulZeroOneClass.toMulOneClass.{u1} N hN)) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N (MulZeroOneClass.toMulOneClass.{u2} M hM) (MulZeroOneClass.toMulOneClass.{u1} N hN)) M N (MulZeroOneClass.toMulOneClass.{u2} M hM) (MulZeroOneClass.toMulOneClass.{u1} N hN) (MonoidHom.monoidHomClass.{u2, u1} M N (MulZeroOneClass.toMulOneClass.{u2} M hM) (MulZeroOneClass.toMulOneClass.{u1} N hN)))) (MonoidWithZeroHom.copy.{u2, u1} M N hM hN f f' h)) f'
 Case conversion may be inaccurate. Consider using '#align monoid_with_zero_hom.coe_copy MonoidWithZeroHom.coe_copyₓ'. -/
 @[simp]
 theorem MonoidWithZeroHom.coe_copy {hM : MulZeroOneClass M} {hN : MulZeroOneClass N} (f : M →*₀ N)
@@ -1389,7 +1389,7 @@ theorem MonoidWithZeroHom.coe_copy {hM : MulZeroOneClass M} {hN : MulZeroOneClas
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} {hM : MulZeroOneClass.{u1} M} {hN : MulZeroOneClass.{u2} N} (f : MonoidWithZeroHom.{u1, u2} M N hM hN) (f' : M -> N) (h : Eq.{max (succ u1) (succ u2)} (M -> N) f' (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidWithZeroHom.{u1, u2} M N hM hN) (fun (_x : MonoidWithZeroHom.{u1, u2} M N hM hN) => M -> N) (MonoidWithZeroHom.hasCoeToFun.{u1, u2} M N hM hN) f)), Eq.{max (succ u2) (succ u1)} (MonoidHom.{u1, u2} M N (MulZeroOneClass.toMulOneClass.{u1} M hM) (MulZeroOneClass.toMulOneClass.{u2} N hN)) (MonoidWithZeroHom.copy.{u1, u2} M N hM hN f f' h) ((fun (a : Sort.{max (succ u2) (succ u1)}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{max (succ u2) (succ u1), max (succ u2) (succ u1)} a b] => self.0) (MonoidWithZeroHom.{u1, u2} M N hM hN) (MonoidHom.{u1, u2} M N (MulZeroOneClass.toMulOneClass.{u1} M hM) (MulZeroOneClass.toMulOneClass.{u2} N hN)) (HasLiftT.mk.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (MonoidWithZeroHom.{u1, u2} M N hM hN) (MonoidHom.{u1, u2} M N (MulZeroOneClass.toMulOneClass.{u1} M hM) (MulZeroOneClass.toMulOneClass.{u2} N hN)) (CoeTCₓ.coe.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (MonoidWithZeroHom.{u1, u2} M N hM hN) (MonoidHom.{u1, u2} M N (MulZeroOneClass.toMulOneClass.{u1} M hM) (MulZeroOneClass.toMulOneClass.{u2} N hN)) (MonoidHom.hasCoeT.{u1, u2, max u2 u1} M N (MonoidWithZeroHom.{u1, u2} M N hM hN) (MulZeroOneClass.toMulOneClass.{u1} M hM) (MulZeroOneClass.toMulOneClass.{u2} N hN) (MonoidWithZeroHomClass.toMonoidHomClass.{max u2 u1, u1, u2} (MonoidWithZeroHom.{u1, u2} M N hM hN) M N hM hN (MonoidWithZeroHom.monoidWithZeroHomClass.{u1, u2} M N hM hN))))) f)
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} {hM : MulZeroOneClass.{u2} M} {hN : MulZeroOneClass.{u1} N} (f : MonoidWithZeroHom.{u2, u1} M N hM hN) (f' : M -> N) (h : Eq.{max (succ u2) (succ u1)} (M -> N) f' (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidWithZeroHom.{u2, u1} M N hM hN) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N hM hN) M N (MulOneClass.toMul.{u2} M (MulZeroOneClass.toMulOneClass.{u2} M hM)) (MulOneClass.toMul.{u1} N (MulZeroOneClass.toMulOneClass.{u1} N hN)) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N hM hN) M N (MulZeroOneClass.toMulOneClass.{u2} M hM) (MulZeroOneClass.toMulOneClass.{u1} N hN) (MonoidWithZeroHomClass.toMonoidHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N hM hN) M N hM hN (MonoidWithZeroHom.monoidWithZeroHomClass.{u2, u1} M N hM hN)))) f)), Eq.{max (succ u2) (succ u1)} (MonoidHom.{u2, u1} M N (MulZeroOneClass.toMulOneClass.{u2} M hM) (MulZeroOneClass.toMulOneClass.{u1} N hN)) (MonoidWithZeroHom.copy.{u2, u1} M N hM hN f f' h) (MonoidHomClass.toMonoidHom.{u2, u1, max u2 u1} M N (MonoidWithZeroHom.{u2, u1} M N hM hN) (MulZeroOneClass.toMulOneClass.{u2} M hM) (MulZeroOneClass.toMulOneClass.{u1} N hN) (MonoidWithZeroHomClass.toMonoidHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N hM hN) M N hM hN (MonoidWithZeroHom.monoidWithZeroHomClass.{u2, u1} M N hM hN)) f)
+  forall {M : Type.{u2}} {N : Type.{u1}} {hM : MulZeroOneClass.{u2} M} {hN : MulZeroOneClass.{u1} N} (f : MonoidWithZeroHom.{u2, u1} M N hM hN) (f' : M -> N) (h : Eq.{max (succ u2) (succ u1)} (M -> N) f' (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidWithZeroHom.{u2, u1} M N hM hN) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N hM hN) M N (MulOneClass.toMul.{u2} M (MulZeroOneClass.toMulOneClass.{u2} M hM)) (MulOneClass.toMul.{u1} N (MulZeroOneClass.toMulOneClass.{u1} N hN)) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N hM hN) M N (MulZeroOneClass.toMulOneClass.{u2} M hM) (MulZeroOneClass.toMulOneClass.{u1} N hN) (MonoidWithZeroHomClass.toMonoidHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N hM hN) M N hM hN (MonoidWithZeroHom.monoidWithZeroHomClass.{u2, u1} M N hM hN)))) f)), Eq.{max (succ u2) (succ u1)} (MonoidHom.{u2, u1} M N (MulZeroOneClass.toMulOneClass.{u2} M hM) (MulZeroOneClass.toMulOneClass.{u1} N hN)) (MonoidWithZeroHom.copy.{u2, u1} M N hM hN f f' h) (MonoidHomClass.toMonoidHom.{u2, u1, max u2 u1} M N (MonoidWithZeroHom.{u2, u1} M N hM hN) (MulZeroOneClass.toMulOneClass.{u2} M hM) (MulZeroOneClass.toMulOneClass.{u1} N hN) (MonoidWithZeroHomClass.toMonoidHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N hM hN) M N hM hN (MonoidWithZeroHom.monoidWithZeroHomClass.{u2, u1} M N hM hN)) f)
 Case conversion may be inaccurate. Consider using '#align monoid_with_zero_hom.copy_eq MonoidWithZeroHom.copy_eqₓ'. -/
 theorem MonoidWithZeroHom.copy_eq {hM : MulZeroOneClass M} {hN : MulZeroOneClass N} (f : M →*₀ N)
     (f' : M → N) (h : f' = f) : f.copy f' h = f :=
@@ -1400,7 +1400,7 @@ theorem MonoidWithZeroHom.copy_eq {hM : MulZeroOneClass M} {hN : MulZeroOneClass
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : One.{u1} M] [_inst_2 : One.{u2} N] (f : OneHom.{u1, u2} M N _inst_1 _inst_2), Eq.{succ u2} N (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (OneHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : OneHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (OneHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f (OfNat.ofNat.{u1} M 1 (OfNat.mk.{u1} M 1 (One.one.{u1} M _inst_1)))) (OfNat.ofNat.{u2} N 1 (OfNat.mk.{u2} N 1 (One.one.{u2} N _inst_2)))
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : One.{u2} M] [_inst_2 : One.{u1} N] (f : OneHom.{u2, u1} M N _inst_1 _inst_2), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1262 : M) => N) (OfNat.ofNat.{u2} M 1 (One.toOfNat1.{u2} M _inst_1))) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (OneHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1262 : M) => N) _x) (OneHomClass.toFunLike.{max u2 u1, u2, u1} (OneHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (OneHom.oneHomClass.{u2, u1} M N _inst_1 _inst_2)) f (OfNat.ofNat.{u2} M 1 (One.toOfNat1.{u2} M _inst_1))) (OfNat.ofNat.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1262 : M) => N) (OfNat.ofNat.{u2} M 1 (One.toOfNat1.{u2} M _inst_1))) 1 (One.toOfNat1.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1262 : M) => N) (OfNat.ofNat.{u2} M 1 (One.toOfNat1.{u2} M _inst_1))) _inst_2))
+  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : One.{u2} M] [_inst_2 : One.{u1} N] (f : OneHom.{u2, u1} M N _inst_1 _inst_2), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1264 : M) => N) (OfNat.ofNat.{u2} M 1 (One.toOfNat1.{u2} M _inst_1))) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (OneHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1264 : M) => N) _x) (OneHomClass.toFunLike.{max u2 u1, u2, u1} (OneHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (OneHom.oneHomClass.{u2, u1} M N _inst_1 _inst_2)) f (OfNat.ofNat.{u2} M 1 (One.toOfNat1.{u2} M _inst_1))) (OfNat.ofNat.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1264 : M) => N) (OfNat.ofNat.{u2} M 1 (One.toOfNat1.{u2} M _inst_1))) 1 (One.toOfNat1.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1264 : M) => N) (OfNat.ofNat.{u2} M 1 (One.toOfNat1.{u2} M _inst_1))) _inst_2))
 Case conversion may be inaccurate. Consider using '#align one_hom.map_one OneHom.map_oneₓ'. -/
 @[to_additive]
 protected theorem OneHom.map_one [One M] [One N] (f : OneHom M N) : f 1 = 1 :=
@@ -1412,7 +1412,7 @@ protected theorem OneHom.map_one [One M] [One N] (f : OneHom M N) : f 1 = 1 :=
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N] (f : MonoidHom.{u1, u2} M N _inst_1 _inst_2), Eq.{succ u2} N (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MonoidHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MonoidHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f (OfNat.ofNat.{u1} M 1 (OfNat.mk.{u1} M 1 (One.one.{u1} M (MulOneClass.toHasOne.{u1} M _inst_1))))) (OfNat.ofNat.{u2} N 1 (OfNat.mk.{u2} N 1 (One.one.{u2} N (MulOneClass.toHasOne.{u2} N _inst_2))))
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u1} N] (f : MonoidHom.{u2, u1} M N _inst_1 _inst_2), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) (OfNat.ofNat.{u2} M 1 (One.toOfNat1.{u2} M (MulOneClass.toOne.{u2} M _inst_1)))) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2))) f (OfNat.ofNat.{u2} M 1 (One.toOfNat1.{u2} M (MulOneClass.toOne.{u2} M _inst_1)))) (OfNat.ofNat.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) (OfNat.ofNat.{u2} M 1 (One.toOfNat1.{u2} M (MulOneClass.toOne.{u2} M _inst_1)))) 1 (One.toOfNat1.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) (OfNat.ofNat.{u2} M 1 (One.toOfNat1.{u2} M (MulOneClass.toOne.{u2} M _inst_1)))) (MulOneClass.toOne.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) (OfNat.ofNat.{u2} M 1 (One.toOfNat1.{u2} M (MulOneClass.toOne.{u2} M _inst_1)))) _inst_2)))
+  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u1} N] (f : MonoidHom.{u2, u1} M N _inst_1 _inst_2), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) (OfNat.ofNat.{u2} M 1 (One.toOfNat1.{u2} M (MulOneClass.toOne.{u2} M _inst_1)))) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2))) f (OfNat.ofNat.{u2} M 1 (One.toOfNat1.{u2} M (MulOneClass.toOne.{u2} M _inst_1)))) (OfNat.ofNat.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) (OfNat.ofNat.{u2} M 1 (One.toOfNat1.{u2} M (MulOneClass.toOne.{u2} M _inst_1)))) 1 (One.toOfNat1.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) (OfNat.ofNat.{u2} M 1 (One.toOfNat1.{u2} M (MulOneClass.toOne.{u2} M _inst_1)))) (MulOneClass.toOne.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) (OfNat.ofNat.{u2} M 1 (One.toOfNat1.{u2} M (MulOneClass.toOne.{u2} M _inst_1)))) _inst_2)))
 Case conversion may be inaccurate. Consider using '#align monoid_hom.map_one MonoidHom.map_oneₓ'. -/
 /-- If `f` is a monoid homomorphism then `f 1 = 1`. -/
 @[to_additive]
@@ -1425,7 +1425,7 @@ protected theorem MonoidHom.map_one [MulOneClass M] [MulOneClass N] (f : M →*
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulZeroOneClass.{u1} M] [_inst_2 : MulZeroOneClass.{u2} N] (f : MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2), Eq.{succ u2} N (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MonoidWithZeroHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) 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} N 1 (OfNat.mk.{u2} N 1 (One.one.{u2} N (MulOneClass.toHasOne.{u2} N (MulZeroOneClass.toMulOneClass.{u2} N _inst_2)))))
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : MulZeroOneClass.{u2} M] [_inst_2 : MulZeroOneClass.{u1} N] (f : MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) (OfNat.ofNat.{u2} M 1 (One.toOfNat1.{u2} M (MulOneClass.toOne.{u2} M (MulZeroOneClass.toMulOneClass.{u2} M _inst_1))))) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M (MulZeroOneClass.toMulOneClass.{u2} M _inst_1)) (MulOneClass.toMul.{u1} N (MulZeroOneClass.toMulOneClass.{u1} N _inst_2)) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulZeroOneClass.toMulOneClass.{u2} M _inst_1) (MulZeroOneClass.toMulOneClass.{u1} N _inst_2) (MonoidWithZeroHomClass.toMonoidHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidWithZeroHom.monoidWithZeroHomClass.{u2, u1} M N _inst_1 _inst_2)))) f (OfNat.ofNat.{u2} M 1 (One.toOfNat1.{u2} M (MulOneClass.toOne.{u2} M (MulZeroOneClass.toMulOneClass.{u2} M _inst_1))))) (OfNat.ofNat.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) (OfNat.ofNat.{u2} M 1 (One.toOfNat1.{u2} M (MulOneClass.toOne.{u2} M (MulZeroOneClass.toMulOneClass.{u2} M _inst_1))))) 1 (One.toOfNat1.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) (OfNat.ofNat.{u2} M 1 (One.toOfNat1.{u2} M (MulOneClass.toOne.{u2} M (MulZeroOneClass.toMulOneClass.{u2} M _inst_1))))) (MulOneClass.toOne.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) (OfNat.ofNat.{u2} M 1 (One.toOfNat1.{u2} M (MulOneClass.toOne.{u2} M (MulZeroOneClass.toMulOneClass.{u2} M _inst_1))))) (MulZeroOneClass.toMulOneClass.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) (OfNat.ofNat.{u2} M 1 (One.toOfNat1.{u2} M (MulOneClass.toOne.{u2} M (MulZeroOneClass.toMulOneClass.{u2} M _inst_1))))) _inst_2))))
+  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : MulZeroOneClass.{u2} M] [_inst_2 : MulZeroOneClass.{u1} N] (f : MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) (OfNat.ofNat.{u2} M 1 (One.toOfNat1.{u2} M (MulOneClass.toOne.{u2} M (MulZeroOneClass.toMulOneClass.{u2} M _inst_1))))) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M (MulZeroOneClass.toMulOneClass.{u2} M _inst_1)) (MulOneClass.toMul.{u1} N (MulZeroOneClass.toMulOneClass.{u1} N _inst_2)) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulZeroOneClass.toMulOneClass.{u2} M _inst_1) (MulZeroOneClass.toMulOneClass.{u1} N _inst_2) (MonoidWithZeroHomClass.toMonoidHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidWithZeroHom.monoidWithZeroHomClass.{u2, u1} M N _inst_1 _inst_2)))) f (OfNat.ofNat.{u2} M 1 (One.toOfNat1.{u2} M (MulOneClass.toOne.{u2} M (MulZeroOneClass.toMulOneClass.{u2} M _inst_1))))) (OfNat.ofNat.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) (OfNat.ofNat.{u2} M 1 (One.toOfNat1.{u2} M (MulOneClass.toOne.{u2} M (MulZeroOneClass.toMulOneClass.{u2} M _inst_1))))) 1 (One.toOfNat1.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) (OfNat.ofNat.{u2} M 1 (One.toOfNat1.{u2} M (MulOneClass.toOne.{u2} M (MulZeroOneClass.toMulOneClass.{u2} M _inst_1))))) (MulOneClass.toOne.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) (OfNat.ofNat.{u2} M 1 (One.toOfNat1.{u2} M (MulOneClass.toOne.{u2} M (MulZeroOneClass.toMulOneClass.{u2} M _inst_1))))) (MulZeroOneClass.toMulOneClass.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) (OfNat.ofNat.{u2} M 1 (One.toOfNat1.{u2} M (MulOneClass.toOne.{u2} M (MulZeroOneClass.toMulOneClass.{u2} M _inst_1))))) _inst_2))))
 Case conversion may be inaccurate. Consider using '#align monoid_with_zero_hom.map_one MonoidWithZeroHom.map_oneₓ'. -/
 protected theorem MonoidWithZeroHom.map_one [MulZeroOneClass M] [MulZeroOneClass N] (f : M →*₀ N) :
     f 1 = 1 :=
@@ -1439,7 +1439,7 @@ add_decl_doc AddMonoidHom.map_zero
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulZeroOneClass.{u1} M] [_inst_2 : MulZeroOneClass.{u2} N] (f : MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2), Eq.{succ u2} N (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MonoidWithZeroHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) 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} N 0 (OfNat.mk.{u2} N 0 (Zero.zero.{u2} N (MulZeroClass.toHasZero.{u2} N (MulZeroOneClass.toMulZeroClass.{u2} N _inst_2)))))
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : MulZeroOneClass.{u2} M] [_inst_2 : MulZeroOneClass.{u1} N] (f : MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) (OfNat.ofNat.{u2} M 0 (Zero.toOfNat0.{u2} M (MulZeroOneClass.toZero.{u2} M _inst_1)))) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M (MulZeroOneClass.toMulOneClass.{u2} M _inst_1)) (MulOneClass.toMul.{u1} N (MulZeroOneClass.toMulOneClass.{u1} N _inst_2)) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulZeroOneClass.toMulOneClass.{u2} M _inst_1) (MulZeroOneClass.toMulOneClass.{u1} N _inst_2) (MonoidWithZeroHomClass.toMonoidHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidWithZeroHom.monoidWithZeroHomClass.{u2, u1} M N _inst_1 _inst_2)))) f (OfNat.ofNat.{u2} M 0 (Zero.toOfNat0.{u2} M (MulZeroOneClass.toZero.{u2} M _inst_1)))) (OfNat.ofNat.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) (OfNat.ofNat.{u2} M 0 (Zero.toOfNat0.{u2} M (MulZeroOneClass.toZero.{u2} M _inst_1)))) 0 (Zero.toOfNat0.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) (OfNat.ofNat.{u2} M 0 (Zero.toOfNat0.{u2} M (MulZeroOneClass.toZero.{u2} M _inst_1)))) (MulZeroOneClass.toZero.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) (OfNat.ofNat.{u2} M 0 (Zero.toOfNat0.{u2} M (MulZeroOneClass.toZero.{u2} M _inst_1)))) _inst_2)))
+  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : MulZeroOneClass.{u2} M] [_inst_2 : MulZeroOneClass.{u1} N] (f : MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) (OfNat.ofNat.{u2} M 0 (Zero.toOfNat0.{u2} M (MulZeroOneClass.toZero.{u2} M _inst_1)))) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M (MulZeroOneClass.toMulOneClass.{u2} M _inst_1)) (MulOneClass.toMul.{u1} N (MulZeroOneClass.toMulOneClass.{u1} N _inst_2)) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulZeroOneClass.toMulOneClass.{u2} M _inst_1) (MulZeroOneClass.toMulOneClass.{u1} N _inst_2) (MonoidWithZeroHomClass.toMonoidHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidWithZeroHom.monoidWithZeroHomClass.{u2, u1} M N _inst_1 _inst_2)))) f (OfNat.ofNat.{u2} M 0 (Zero.toOfNat0.{u2} M (MulZeroOneClass.toZero.{u2} M _inst_1)))) (OfNat.ofNat.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) (OfNat.ofNat.{u2} M 0 (Zero.toOfNat0.{u2} M (MulZeroOneClass.toZero.{u2} M _inst_1)))) 0 (Zero.toOfNat0.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) (OfNat.ofNat.{u2} M 0 (Zero.toOfNat0.{u2} M (MulZeroOneClass.toZero.{u2} M _inst_1)))) (MulZeroOneClass.toZero.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) (OfNat.ofNat.{u2} M 0 (Zero.toOfNat0.{u2} M (MulZeroOneClass.toZero.{u2} M _inst_1)))) _inst_2)))
 Case conversion may be inaccurate. Consider using '#align monoid_with_zero_hom.map_zero MonoidWithZeroHom.map_zeroₓ'. -/
 protected theorem MonoidWithZeroHom.map_zero [MulZeroOneClass M] [MulZeroOneClass N] (f : M →*₀ N) :
     f 0 = 0 :=
@@ -1450,7 +1450,7 @@ protected theorem MonoidWithZeroHom.map_zero [MulZeroOneClass M] [MulZeroOneClas
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] (f : MulHom.{u1, u2} M N _inst_1 _inst_2) (a : M) (b : M), Eq.{succ u2} N (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MulHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MulHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MulHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f (HMul.hMul.{u1, u1, u1} M M M (instHMul.{u1} M _inst_1) a b)) (HMul.hMul.{u2, u2, u2} N N N (instHMul.{u2} N _inst_2) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MulHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MulHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MulHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f a) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MulHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MulHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MulHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f b))
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : Mul.{u2} M] [_inst_2 : Mul.{u1} N] (f : MulHom.{u2, u1} M N _inst_1 _inst_2) (a : M) (b : M), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) (HMul.hMul.{u2, u2, u2} M M M (instHMul.{u2} M _inst_1) a b)) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) f (HMul.hMul.{u2, u2, u2} M M M (instHMul.{u2} M _inst_1) a b)) (HMul.hMul.{u1, u1, u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) a) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) b) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) a) (instHMul.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) a) _inst_2) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) f a) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) f b))
+  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : Mul.{u2} M] [_inst_2 : Mul.{u1} N] (f : MulHom.{u2, u1} M N _inst_1 _inst_2) (a : M) (b : M), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) (HMul.hMul.{u2, u2, u2} M M M (instHMul.{u2} M _inst_1) a b)) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) f (HMul.hMul.{u2, u2, u2} M M M (instHMul.{u2} M _inst_1) a b)) (HMul.hMul.{u1, u1, u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) a) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) b) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) a) (instHMul.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) a) _inst_2) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) f a) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) f b))
 Case conversion may be inaccurate. Consider using '#align mul_hom.map_mul MulHom.map_mulₓ'. -/
 @[to_additive]
 protected theorem MulHom.map_mul [Mul M] [Mul N] (f : M →ₙ* N) (a b : M) : f (a * b) = f a * f b :=
@@ -1462,7 +1462,7 @@ protected theorem MulHom.map_mul [Mul M] [Mul N] (f : M →ₙ* N) (a b : M) : f
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N] (f : MonoidHom.{u1, u2} M N _inst_1 _inst_2) (a : M) (b : M), Eq.{succ u2} N (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MonoidHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MonoidHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f (HMul.hMul.{u1, u1, u1} M M M (instHMul.{u1} M (MulOneClass.toHasMul.{u1} M _inst_1)) a b)) (HMul.hMul.{u2, u2, u2} N N N (instHMul.{u2} N (MulOneClass.toHasMul.{u2} N _inst_2)) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MonoidHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MonoidHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f a) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MonoidHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MonoidHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f b))
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u1} N] (f : MonoidHom.{u2, u1} M N _inst_1 _inst_2) (a : M) (b : M), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) (HMul.hMul.{u2, u2, u2} M M M (instHMul.{u2} M (MulOneClass.toMul.{u2} M _inst_1)) a b)) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2))) f (HMul.hMul.{u2, u2, u2} M M M (instHMul.{u2} M (MulOneClass.toMul.{u2} M _inst_1)) a b)) (HMul.hMul.{u1, u1, u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) a) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) b) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) a) (instHMul.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) a) (MulOneClass.toMul.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) a) _inst_2)) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2))) f a) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2))) f b))
+  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u1} N] (f : MonoidHom.{u2, u1} M N _inst_1 _inst_2) (a : M) (b : M), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) (HMul.hMul.{u2, u2, u2} M M M (instHMul.{u2} M (MulOneClass.toMul.{u2} M _inst_1)) a b)) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2))) f (HMul.hMul.{u2, u2, u2} M M M (instHMul.{u2} M (MulOneClass.toMul.{u2} M _inst_1)) a b)) (HMul.hMul.{u1, u1, u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) a) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) b) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) a) (instHMul.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) a) (MulOneClass.toMul.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) a) _inst_2)) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2))) f a) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2))) f b))
 Case conversion may be inaccurate. Consider using '#align monoid_hom.map_mul MonoidHom.map_mulₓ'. -/
 /-- If `f` is a monoid homomorphism then `f (a * b) = f a * f b`. -/
 @[to_additive]
@@ -1476,7 +1476,7 @@ protected theorem MonoidHom.map_mul [MulOneClass M] [MulOneClass N] (f : M →*
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulZeroOneClass.{u1} M] [_inst_2 : MulZeroOneClass.{u2} N] (f : MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) (a : M) (b : M), Eq.{succ u2} N (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MonoidWithZeroHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) 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} N N N (instHMul.{u2} N (MulZeroClass.toHasMul.{u2} N (MulZeroOneClass.toMulZeroClass.{u2} N _inst_2))) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MonoidWithZeroHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f a) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MonoidWithZeroHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f b))
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : MulZeroOneClass.{u2} M] [_inst_2 : MulZeroOneClass.{u1} N] (f : MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) (a : M) (b : M), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) (HMul.hMul.{u2, u2, u2} M M M (instHMul.{u2} M (MulZeroClass.toMul.{u2} M (MulZeroOneClass.toMulZeroClass.{u2} M _inst_1))) a b)) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M (MulZeroOneClass.toMulOneClass.{u2} M _inst_1)) (MulOneClass.toMul.{u1} N (MulZeroOneClass.toMulOneClass.{u1} N _inst_2)) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulZeroOneClass.toMulOneClass.{u2} M _inst_1) (MulZeroOneClass.toMulOneClass.{u1} N _inst_2) (MonoidWithZeroHomClass.toMonoidHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidWithZeroHom.monoidWithZeroHomClass.{u2, u1} M N _inst_1 _inst_2)))) f (HMul.hMul.{u2, u2, u2} M M M (instHMul.{u2} M (MulZeroClass.toMul.{u2} M (MulZeroOneClass.toMulZeroClass.{u2} M _inst_1))) a b)) (HMul.hMul.{u1, u1, u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) a) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) b) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) a) (instHMul.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) a) (MulZeroClass.toMul.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) a) (MulZeroOneClass.toMulZeroClass.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) a) _inst_2))) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M (MulZeroOneClass.toMulOneClass.{u2} M _inst_1)) (MulOneClass.toMul.{u1} N (MulZeroOneClass.toMulOneClass.{u1} N _inst_2)) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulZeroOneClass.toMulOneClass.{u2} M _inst_1) (MulZeroOneClass.toMulOneClass.{u1} N _inst_2) (MonoidWithZeroHomClass.toMonoidHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidWithZeroHom.monoidWithZeroHomClass.{u2, u1} M N _inst_1 _inst_2)))) f a) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M (MulZeroOneClass.toMulOneClass.{u2} M _inst_1)) (MulOneClass.toMul.{u1} N (MulZeroOneClass.toMulOneClass.{u1} N _inst_2)) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulZeroOneClass.toMulOneClass.{u2} M _inst_1) (MulZeroOneClass.toMulOneClass.{u1} N _inst_2) (MonoidWithZeroHomClass.toMonoidHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidWithZeroHom.monoidWithZeroHomClass.{u2, u1} M N _inst_1 _inst_2)))) f b))
+  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : MulZeroOneClass.{u2} M] [_inst_2 : MulZeroOneClass.{u1} N] (f : MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) (a : M) (b : M), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) (HMul.hMul.{u2, u2, u2} M M M (instHMul.{u2} M (MulZeroClass.toMul.{u2} M (MulZeroOneClass.toMulZeroClass.{u2} M _inst_1))) a b)) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M (MulZeroOneClass.toMulOneClass.{u2} M _inst_1)) (MulOneClass.toMul.{u1} N (MulZeroOneClass.toMulOneClass.{u1} N _inst_2)) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulZeroOneClass.toMulOneClass.{u2} M _inst_1) (MulZeroOneClass.toMulOneClass.{u1} N _inst_2) (MonoidWithZeroHomClass.toMonoidHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidWithZeroHom.monoidWithZeroHomClass.{u2, u1} M N _inst_1 _inst_2)))) f (HMul.hMul.{u2, u2, u2} M M M (instHMul.{u2} M (MulZeroClass.toMul.{u2} M (MulZeroOneClass.toMulZeroClass.{u2} M _inst_1))) a b)) (HMul.hMul.{u1, u1, u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) a) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) b) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) a) (instHMul.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) a) (MulZeroClass.toMul.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) a) (MulZeroOneClass.toMulZeroClass.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) a) _inst_2))) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M (MulZeroOneClass.toMulOneClass.{u2} M _inst_1)) (MulOneClass.toMul.{u1} N (MulZeroOneClass.toMulOneClass.{u1} N _inst_2)) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulZeroOneClass.toMulOneClass.{u2} M _inst_1) (MulZeroOneClass.toMulOneClass.{u1} N _inst_2) (MonoidWithZeroHomClass.toMonoidHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidWithZeroHom.monoidWithZeroHomClass.{u2, u1} M N _inst_1 _inst_2)))) f a) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M (MulZeroOneClass.toMulOneClass.{u2} M _inst_1)) (MulOneClass.toMul.{u1} N (MulZeroOneClass.toMulOneClass.{u1} N _inst_2)) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulZeroOneClass.toMulOneClass.{u2} M _inst_1) (MulZeroOneClass.toMulOneClass.{u1} N _inst_2) (MonoidWithZeroHomClass.toMonoidHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidWithZeroHom.monoidWithZeroHomClass.{u2, u1} M N _inst_1 _inst_2)))) f b))
 Case conversion may be inaccurate. Consider using '#align monoid_with_zero_hom.map_mul MonoidWithZeroHom.map_mulₓ'. -/
 protected theorem MonoidWithZeroHom.map_mul [MulZeroOneClass M] [MulZeroOneClass N] (f : M →*₀ N)
     (a b : M) : f (a * b) = f a * f b :=
@@ -1496,7 +1496,7 @@ include mM mN
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} {F : Type.{u3}} {mM : MulOneClass.{u1} M} {mN : MulOneClass.{u2} N} [_inst_1 : MonoidHomClass.{u3, u1, u2} F M N mM mN] (f : F) {x : M}, (Exists.{succ u1} M (fun (y : M) => Eq.{succ u1} M (HMul.hMul.{u1, u1, u1} M M M (instHMul.{u1} M (MulOneClass.toHasMul.{u1} M mM)) x y) (OfNat.ofNat.{u1} M 1 (OfNat.mk.{u1} M 1 (One.one.{u1} M (MulOneClass.toHasOne.{u1} M mM)))))) -> (Exists.{succ u2} N (fun (y : N) => Eq.{succ u2} N (HMul.hMul.{u2, u2, u2} N N N (instHMul.{u2} N (MulOneClass.toHasMul.{u2} N mN)) (coeFn.{succ u3, max (succ u1) (succ u2)} F (fun (_x : F) => M -> N) (FunLike.hasCoeToFun.{succ u3, succ u1, succ u2} F M (fun (_x : M) => N) (MulHomClass.toFunLike.{u3, u1, u2} F M N (MulOneClass.toHasMul.{u1} M mM) (MulOneClass.toHasMul.{u2} N mN) (MonoidHomClass.toMulHomClass.{u3, u1, u2} F M N mM mN _inst_1))) f x) y) (OfNat.ofNat.{u2} N 1 (OfNat.mk.{u2} N 1 (One.one.{u2} N (MulOneClass.toHasOne.{u2} N mN))))))
 but is expected to have type
-  forall {M : Type.{u3}} {N : Type.{u2}} {F : Type.{u1}} [mM : MulOneClass.{u3} M] [mN : MulOneClass.{u2} N] [_inst_1 : MonoidHomClass.{u1, u3, u2} F M N mM mN] (f : F) {x : M}, (Exists.{succ u3} M (fun (y : M) => Eq.{succ u3} M (HMul.hMul.{u3, u3, u3} M M M (instHMul.{u3} M (MulOneClass.toMul.{u3} M mM)) x y) (OfNat.ofNat.{u3} M 1 (One.toOfNat1.{u3} M (MulOneClass.toOne.{u3} M mM))))) -> (Exists.{succ u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) x) (fun (y : (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) x) => Eq.{succ u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) x) (HMul.hMul.{u2, u2, u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) x) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) x) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) x) (instHMul.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) x) (MulOneClass.toMul.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) x) mN)) (FunLike.coe.{succ u1, succ u3, succ u2} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{u1, u3, u2} F M N (MulOneClass.toMul.{u3} M mM) (MulOneClass.toMul.{u2} N mN) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F M N mM mN _inst_1)) f x) y) (OfNat.ofNat.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) x) 1 (One.toOfNat1.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) x) (MulOneClass.toOne.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) x) mN)))))
+  forall {M : Type.{u3}} {N : Type.{u2}} {F : Type.{u1}} [mM : MulOneClass.{u3} M] [mN : MulOneClass.{u2} N] [_inst_1 : MonoidHomClass.{u1, u3, u2} F M N mM mN] (f : F) {x : M}, (Exists.{succ u3} M (fun (y : M) => Eq.{succ u3} M (HMul.hMul.{u3, u3, u3} M M M (instHMul.{u3} M (MulOneClass.toMul.{u3} M mM)) x y) (OfNat.ofNat.{u3} M 1 (One.toOfNat1.{u3} M (MulOneClass.toOne.{u3} M mM))))) -> (Exists.{succ u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) x) (fun (y : (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) x) => Eq.{succ u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) x) (HMul.hMul.{u2, u2, u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) x) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) x) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) x) (instHMul.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) x) (MulOneClass.toMul.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) x) mN)) (FunLike.coe.{succ u1, succ u3, succ u2} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{u1, u3, u2} F M N (MulOneClass.toMul.{u3} M mM) (MulOneClass.toMul.{u2} N mN) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F M N mM mN _inst_1)) f x) y) (OfNat.ofNat.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) x) 1 (One.toOfNat1.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) x) (MulOneClass.toOne.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) x) mN)))))
 Case conversion may be inaccurate. Consider using '#align monoid_hom.map_exists_right_inv MonoidHom.map_exists_right_invₓ'. -/
 /-- Given a monoid homomorphism `f : M →* N` and an element `x : M`, if `x` has a right inverse,
 then `f x` has a right inverse too. For elements invertible on both sides see `is_unit.map`. -/
@@ -1512,7 +1512,7 @@ theorem map_exists_right_inv (f : F) {x : M} (hx : ∃ y, x * y = 1) : ∃ y, f
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} {F : Type.{u3}} {mM : MulOneClass.{u1} M} {mN : MulOneClass.{u2} N} [_inst_1 : MonoidHomClass.{u3, u1, u2} F M N mM mN] (f : F) {x : M}, (Exists.{succ u1} M (fun (y : M) => Eq.{succ u1} M (HMul.hMul.{u1, u1, u1} M M M (instHMul.{u1} M (MulOneClass.toHasMul.{u1} M mM)) y x) (OfNat.ofNat.{u1} M 1 (OfNat.mk.{u1} M 1 (One.one.{u1} M (MulOneClass.toHasOne.{u1} M mM)))))) -> (Exists.{succ u2} N (fun (y : N) => Eq.{succ u2} N (HMul.hMul.{u2, u2, u2} N N N (instHMul.{u2} N (MulOneClass.toHasMul.{u2} N mN)) y (coeFn.{succ u3, max (succ u1) (succ u2)} F (fun (_x : F) => M -> N) (FunLike.hasCoeToFun.{succ u3, succ u1, succ u2} F M (fun (_x : M) => N) (MulHomClass.toFunLike.{u3, u1, u2} F M N (MulOneClass.toHasMul.{u1} M mM) (MulOneClass.toHasMul.{u2} N mN) (MonoidHomClass.toMulHomClass.{u3, u1, u2} F M N mM mN _inst_1))) f x)) (OfNat.ofNat.{u2} N 1 (OfNat.mk.{u2} N 1 (One.one.{u2} N (MulOneClass.toHasOne.{u2} N mN))))))
 but is expected to have type
-  forall {M : Type.{u3}} {N : Type.{u2}} {F : Type.{u1}} [mM : MulOneClass.{u3} M] [mN : MulOneClass.{u2} N] [_inst_1 : MonoidHomClass.{u1, u3, u2} F M N mM mN] (f : F) {x : M}, (Exists.{succ u3} M (fun (y : M) => Eq.{succ u3} M (HMul.hMul.{u3, u3, u3} M M M (instHMul.{u3} M (MulOneClass.toMul.{u3} M mM)) y x) (OfNat.ofNat.{u3} M 1 (One.toOfNat1.{u3} M (MulOneClass.toOne.{u3} M mM))))) -> (Exists.{succ u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) x) (fun (y : (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) x) => Eq.{succ u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) x) (HMul.hMul.{u2, u2, u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) x) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) x) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) x) (instHMul.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) x) (MulOneClass.toMul.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) x) mN)) y (FunLike.coe.{succ u1, succ u3, succ u2} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{u1, u3, u2} F M N (MulOneClass.toMul.{u3} M mM) (MulOneClass.toMul.{u2} N mN) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F M N mM mN _inst_1)) f x)) (OfNat.ofNat.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) x) 1 (One.toOfNat1.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) x) (MulOneClass.toOne.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) x) mN)))))
+  forall {M : Type.{u3}} {N : Type.{u2}} {F : Type.{u1}} [mM : MulOneClass.{u3} M] [mN : MulOneClass.{u2} N] [_inst_1 : MonoidHomClass.{u1, u3, u2} F M N mM mN] (f : F) {x : M}, (Exists.{succ u3} M (fun (y : M) => Eq.{succ u3} M (HMul.hMul.{u3, u3, u3} M M M (instHMul.{u3} M (MulOneClass.toMul.{u3} M mM)) y x) (OfNat.ofNat.{u3} M 1 (One.toOfNat1.{u3} M (MulOneClass.toOne.{u3} M mM))))) -> (Exists.{succ u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) x) (fun (y : (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) x) => Eq.{succ u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) x) (HMul.hMul.{u2, u2, u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) x) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) x) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) x) (instHMul.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) x) (MulOneClass.toMul.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) x) mN)) y (FunLike.coe.{succ u1, succ u3, succ u2} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{u1, u3, u2} F M N (MulOneClass.toMul.{u3} M mM) (MulOneClass.toMul.{u2} N mN) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F M N mM mN _inst_1)) f x)) (OfNat.ofNat.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) x) 1 (One.toOfNat1.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) x) (MulOneClass.toOne.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) x) mN)))))
 Case conversion may be inaccurate. Consider using '#align monoid_hom.map_exists_left_inv MonoidHom.map_exists_left_invₓ'. -/
 /-- Given a monoid homomorphism `f : M →* N` and an element `x : M`, if `x` has a left inverse,
 then `f x` has a left inverse too. For elements invertible on both sides see `is_unit.map`. -/
@@ -1546,7 +1546,7 @@ def invMonoidHom : α →* α where
 lean 3 declaration is
   forall {α : Type.{u1}} [_inst_1 : DivisionCommMonoid.{u1} α], Eq.{succ u1} ((fun (_x : MonoidHom.{u1, u1} α α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (DivisionMonoid.toDivInvMonoid.{u1} α (DivisionCommMonoid.toDivisionMonoid.{u1} α _inst_1)))) (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (DivisionMonoid.toDivInvMonoid.{u1} α (DivisionCommMonoid.toDivisionMonoid.{u1} α _inst_1))))) => α -> α) (invMonoidHom.{u1} α _inst_1)) (coeFn.{succ u1, succ u1} (MonoidHom.{u1, u1} α α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (DivisionMonoid.toDivInvMonoid.{u1} α (DivisionCommMonoid.toDivisionMonoid.{u1} α _inst_1)))) (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (DivisionMonoid.toDivInvMonoid.{u1} α (DivisionCommMonoid.toDivisionMonoid.{u1} α _inst_1))))) (fun (_x : MonoidHom.{u1, u1} α α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (DivisionMonoid.toDivInvMonoid.{u1} α (DivisionCommMonoid.toDivisionMonoid.{u1} α _inst_1)))) (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (DivisionMonoid.toDivInvMonoid.{u1} α (DivisionCommMonoid.toDivisionMonoid.{u1} α _inst_1))))) => α -> α) (MonoidHom.hasCoeToFun.{u1, u1} α α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (DivisionMonoid.toDivInvMonoid.{u1} α (DivisionCommMonoid.toDivisionMonoid.{u1} α _inst_1)))) (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (DivisionMonoid.toDivInvMonoid.{u1} α (DivisionCommMonoid.toDivisionMonoid.{u1} α _inst_1))))) (invMonoidHom.{u1} α _inst_1)) (Inv.inv.{u1} α (DivInvMonoid.toHasInv.{u1} α (DivisionMonoid.toDivInvMonoid.{u1} α (DivisionCommMonoid.toDivisionMonoid.{u1} α _inst_1))))
 but is expected to have type
-  forall {α : Type.{u1}} [_inst_1 : DivisionCommMonoid.{u1} α], Eq.{succ u1} (forall (a : α), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : α) => α) a) (FunLike.coe.{succ u1, succ u1, succ u1} (MonoidHom.{u1, u1} α α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (DivisionMonoid.toDivInvMonoid.{u1} α (DivisionCommMonoid.toDivisionMonoid.{u1} α _inst_1)))) (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (DivisionMonoid.toDivInvMonoid.{u1} α (DivisionCommMonoid.toDivisionMonoid.{u1} α _inst_1))))) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : α) => α) _x) (MulHomClass.toFunLike.{u1, u1, u1} (MonoidHom.{u1, u1} α α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (DivisionMonoid.toDivInvMonoid.{u1} α (DivisionCommMonoid.toDivisionMonoid.{u1} α _inst_1)))) (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (DivisionMonoid.toDivInvMonoid.{u1} α (DivisionCommMonoid.toDivisionMonoid.{u1} α _inst_1))))) α α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (DivisionMonoid.toDivInvMonoid.{u1} α (DivisionCommMonoid.toDivisionMonoid.{u1} α _inst_1))))) (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (DivisionMonoid.toDivInvMonoid.{u1} α (DivisionCommMonoid.toDivisionMonoid.{u1} α _inst_1))))) (MonoidHomClass.toMulHomClass.{u1, u1, u1} (MonoidHom.{u1, u1} α α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (DivisionMonoid.toDivInvMonoid.{u1} α (DivisionCommMonoid.toDivisionMonoid.{u1} α _inst_1)))) (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (DivisionMonoid.toDivInvMonoid.{u1} α (DivisionCommMonoid.toDivisionMonoid.{u1} α _inst_1))))) α α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (DivisionMonoid.toDivInvMonoid.{u1} α (DivisionCommMonoid.toDivisionMonoid.{u1} α _inst_1)))) (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (DivisionMonoid.toDivInvMonoid.{u1} α (DivisionCommMonoid.toDivisionMonoid.{u1} α _inst_1)))) (MonoidHom.monoidHomClass.{u1, u1} α α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (DivisionMonoid.toDivInvMonoid.{u1} α (DivisionCommMonoid.toDivisionMonoid.{u1} α _inst_1)))) (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (DivisionMonoid.toDivInvMonoid.{u1} α (DivisionCommMonoid.toDivisionMonoid.{u1} α _inst_1))))))) (invMonoidHom.{u1} α _inst_1)) (Inv.inv.{u1} α (InvOneClass.toInv.{u1} α (DivInvOneMonoid.toInvOneClass.{u1} α (DivisionMonoid.toDivInvOneMonoid.{u1} α (DivisionCommMonoid.toDivisionMonoid.{u1} α _inst_1)))))
+  forall {α : Type.{u1}} [_inst_1 : DivisionCommMonoid.{u1} α], Eq.{succ u1} (forall (a : α), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : α) => α) a) (FunLike.coe.{succ u1, succ u1, succ u1} (MonoidHom.{u1, u1} α α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (DivisionMonoid.toDivInvMonoid.{u1} α (DivisionCommMonoid.toDivisionMonoid.{u1} α _inst_1)))) (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (DivisionMonoid.toDivInvMonoid.{u1} α (DivisionCommMonoid.toDivisionMonoid.{u1} α _inst_1))))) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : α) => α) _x) (MulHomClass.toFunLike.{u1, u1, u1} (MonoidHom.{u1, u1} α α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (DivisionMonoid.toDivInvMonoid.{u1} α (DivisionCommMonoid.toDivisionMonoid.{u1} α _inst_1)))) (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (DivisionMonoid.toDivInvMonoid.{u1} α (DivisionCommMonoid.toDivisionMonoid.{u1} α _inst_1))))) α α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (DivisionMonoid.toDivInvMonoid.{u1} α (DivisionCommMonoid.toDivisionMonoid.{u1} α _inst_1))))) (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (DivisionMonoid.toDivInvMonoid.{u1} α (DivisionCommMonoid.toDivisionMonoid.{u1} α _inst_1))))) (MonoidHomClass.toMulHomClass.{u1, u1, u1} (MonoidHom.{u1, u1} α α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (DivisionMonoid.toDivInvMonoid.{u1} α (DivisionCommMonoid.toDivisionMonoid.{u1} α _inst_1)))) (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (DivisionMonoid.toDivInvMonoid.{u1} α (DivisionCommMonoid.toDivisionMonoid.{u1} α _inst_1))))) α α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (DivisionMonoid.toDivInvMonoid.{u1} α (DivisionCommMonoid.toDivisionMonoid.{u1} α _inst_1)))) (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (DivisionMonoid.toDivInvMonoid.{u1} α (DivisionCommMonoid.toDivisionMonoid.{u1} α _inst_1)))) (MonoidHom.monoidHomClass.{u1, u1} α α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (DivisionMonoid.toDivInvMonoid.{u1} α (DivisionCommMonoid.toDivisionMonoid.{u1} α _inst_1)))) (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (DivisionMonoid.toDivInvMonoid.{u1} α (DivisionCommMonoid.toDivisionMonoid.{u1} α _inst_1))))))) (invMonoidHom.{u1} α _inst_1)) (Inv.inv.{u1} α (InvOneClass.toInv.{u1} α (DivInvOneMonoid.toInvOneClass.{u1} α (DivisionMonoid.toDivInvOneMonoid.{u1} α (DivisionCommMonoid.toDivisionMonoid.{u1} α _inst_1)))))
 Case conversion may be inaccurate. Consider using '#align coe_inv_monoid_hom coe_invMonoidHomₓ'. -/
 @[simp]
 theorem coe_invMonoidHom : (invMonoidHom : α → α) = Inv.inv :=
@@ -1557,7 +1557,7 @@ theorem coe_invMonoidHom : (invMonoidHom : α → α) = Inv.inv :=
 lean 3 declaration is
   forall {α : Type.{u1}} [_inst_1 : DivisionCommMonoid.{u1} α] (a : α), Eq.{succ u1} α (coeFn.{succ u1, succ u1} (MonoidHom.{u1, u1} α α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (DivisionMonoid.toDivInvMonoid.{u1} α (DivisionCommMonoid.toDivisionMonoid.{u1} α _inst_1)))) (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (DivisionMonoid.toDivInvMonoid.{u1} α (DivisionCommMonoid.toDivisionMonoid.{u1} α _inst_1))))) (fun (_x : MonoidHom.{u1, u1} α α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (DivisionMonoid.toDivInvMonoid.{u1} α (DivisionCommMonoid.toDivisionMonoid.{u1} α _inst_1)))) (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (DivisionMonoid.toDivInvMonoid.{u1} α (DivisionCommMonoid.toDivisionMonoid.{u1} α _inst_1))))) => α -> α) (MonoidHom.hasCoeToFun.{u1, u1} α α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (DivisionMonoid.toDivInvMonoid.{u1} α (DivisionCommMonoid.toDivisionMonoid.{u1} α _inst_1)))) (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (DivisionMonoid.toDivInvMonoid.{u1} α (DivisionCommMonoid.toDivisionMonoid.{u1} α _inst_1))))) (invMonoidHom.{u1} α _inst_1) a) (Inv.inv.{u1} α (DivInvMonoid.toHasInv.{u1} α (DivisionMonoid.toDivInvMonoid.{u1} α (DivisionCommMonoid.toDivisionMonoid.{u1} α _inst_1))) a)
 but is expected to have type
-  forall {α : Type.{u1}} [_inst_1 : DivisionCommMonoid.{u1} α] (a : α), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : α) => α) a) (FunLike.coe.{succ u1, succ u1, succ u1} (MonoidHom.{u1, u1} α α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (DivisionMonoid.toDivInvMonoid.{u1} α (DivisionCommMonoid.toDivisionMonoid.{u1} α _inst_1)))) (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (DivisionMonoid.toDivInvMonoid.{u1} α (DivisionCommMonoid.toDivisionMonoid.{u1} α _inst_1))))) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : α) => α) _x) (MulHomClass.toFunLike.{u1, u1, u1} (MonoidHom.{u1, u1} α α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (DivisionMonoid.toDivInvMonoid.{u1} α (DivisionCommMonoid.toDivisionMonoid.{u1} α _inst_1)))) (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (DivisionMonoid.toDivInvMonoid.{u1} α (DivisionCommMonoid.toDivisionMonoid.{u1} α _inst_1))))) α α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (DivisionMonoid.toDivInvMonoid.{u1} α (DivisionCommMonoid.toDivisionMonoid.{u1} α _inst_1))))) (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (DivisionMonoid.toDivInvMonoid.{u1} α (DivisionCommMonoid.toDivisionMonoid.{u1} α _inst_1))))) (MonoidHomClass.toMulHomClass.{u1, u1, u1} (MonoidHom.{u1, u1} α α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (DivisionMonoid.toDivInvMonoid.{u1} α (DivisionCommMonoid.toDivisionMonoid.{u1} α _inst_1)))) (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (DivisionMonoid.toDivInvMonoid.{u1} α (DivisionCommMonoid.toDivisionMonoid.{u1} α _inst_1))))) α α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (DivisionMonoid.toDivInvMonoid.{u1} α (DivisionCommMonoid.toDivisionMonoid.{u1} α _inst_1)))) (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (DivisionMonoid.toDivInvMonoid.{u1} α (DivisionCommMonoid.toDivisionMonoid.{u1} α _inst_1)))) (MonoidHom.monoidHomClass.{u1, u1} α α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (DivisionMonoid.toDivInvMonoid.{u1} α (DivisionCommMonoid.toDivisionMonoid.{u1} α _inst_1)))) (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (DivisionMonoid.toDivInvMonoid.{u1} α (DivisionCommMonoid.toDivisionMonoid.{u1} α _inst_1))))))) (invMonoidHom.{u1} α _inst_1) a) (Inv.inv.{u1} α (InvOneClass.toInv.{u1} α (DivInvOneMonoid.toInvOneClass.{u1} α (DivisionMonoid.toDivInvOneMonoid.{u1} α (DivisionCommMonoid.toDivisionMonoid.{u1} α _inst_1)))) a)
+  forall {α : Type.{u1}} [_inst_1 : DivisionCommMonoid.{u1} α] (a : α), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : α) => α) a) (FunLike.coe.{succ u1, succ u1, succ u1} (MonoidHom.{u1, u1} α α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (DivisionMonoid.toDivInvMonoid.{u1} α (DivisionCommMonoid.toDivisionMonoid.{u1} α _inst_1)))) (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (DivisionMonoid.toDivInvMonoid.{u1} α (DivisionCommMonoid.toDivisionMonoid.{u1} α _inst_1))))) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : α) => α) _x) (MulHomClass.toFunLike.{u1, u1, u1} (MonoidHom.{u1, u1} α α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (DivisionMonoid.toDivInvMonoid.{u1} α (DivisionCommMonoid.toDivisionMonoid.{u1} α _inst_1)))) (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (DivisionMonoid.toDivInvMonoid.{u1} α (DivisionCommMonoid.toDivisionMonoid.{u1} α _inst_1))))) α α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (DivisionMonoid.toDivInvMonoid.{u1} α (DivisionCommMonoid.toDivisionMonoid.{u1} α _inst_1))))) (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (DivisionMonoid.toDivInvMonoid.{u1} α (DivisionCommMonoid.toDivisionMonoid.{u1} α _inst_1))))) (MonoidHomClass.toMulHomClass.{u1, u1, u1} (MonoidHom.{u1, u1} α α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (DivisionMonoid.toDivInvMonoid.{u1} α (DivisionCommMonoid.toDivisionMonoid.{u1} α _inst_1)))) (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (DivisionMonoid.toDivInvMonoid.{u1} α (DivisionCommMonoid.toDivisionMonoid.{u1} α _inst_1))))) α α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (DivisionMonoid.toDivInvMonoid.{u1} α (DivisionCommMonoid.toDivisionMonoid.{u1} α _inst_1)))) (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (DivisionMonoid.toDivInvMonoid.{u1} α (DivisionCommMonoid.toDivisionMonoid.{u1} α _inst_1)))) (MonoidHom.monoidHomClass.{u1, u1} α α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (DivisionMonoid.toDivInvMonoid.{u1} α (DivisionCommMonoid.toDivisionMonoid.{u1} α _inst_1)))) (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (DivisionMonoid.toDivInvMonoid.{u1} α (DivisionCommMonoid.toDivisionMonoid.{u1} α _inst_1))))))) (invMonoidHom.{u1} α _inst_1) a) (Inv.inv.{u1} α (InvOneClass.toInv.{u1} α (DivInvOneMonoid.toInvOneClass.{u1} α (DivisionMonoid.toDivInvOneMonoid.{u1} α (DivisionCommMonoid.toDivisionMonoid.{u1} α _inst_1)))) a)
 Case conversion may be inaccurate. Consider using '#align inv_monoid_hom_apply invMonoidHom_applyₓ'. -/
 @[simp]
 theorem invMonoidHom_apply (a : α) : invMonoidHom a = a⁻¹ :=
@@ -1680,7 +1680,7 @@ add_decl_doc AddMonoidHom.comp
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} {P : Type.{u3}} [_inst_1 : One.{u1} M] [_inst_2 : One.{u2} N] [_inst_3 : One.{u3} P] (g : OneHom.{u2, u3} N P _inst_2 _inst_3) (f : OneHom.{u1, u2} M N _inst_1 _inst_2), Eq.{max (succ u1) (succ u3)} (M -> P) (coeFn.{max (succ u3) (succ u1), max (succ u1) (succ u3)} (OneHom.{u1, u3} M P _inst_1 _inst_3) (fun (_x : OneHom.{u1, u3} M P _inst_1 _inst_3) => M -> P) (OneHom.hasCoeToFun.{u1, u3} M P _inst_1 _inst_3) (OneHom.comp.{u1, u2, u3} M N P _inst_1 _inst_2 _inst_3 g f)) (Function.comp.{succ u1, succ u2, succ u3} M N P (coeFn.{max (succ u3) (succ u2), max (succ u2) (succ u3)} (OneHom.{u2, u3} N P _inst_2 _inst_3) (fun (_x : OneHom.{u2, u3} N P _inst_2 _inst_3) => N -> P) (OneHom.hasCoeToFun.{u2, u3} N P _inst_2 _inst_3) g) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (OneHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : OneHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (OneHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f))
 but is expected to have type
-  forall {M : Type.{u3}} {N : Type.{u2}} {P : Type.{u1}} [_inst_1 : One.{u3} M] [_inst_2 : One.{u2} N] [_inst_3 : One.{u1} P] (g : OneHom.{u2, u1} N P _inst_2 _inst_3) (f : OneHom.{u3, u2} M N _inst_1 _inst_2), Eq.{max (succ u3) (succ u1)} (M -> P) (FunLike.coe.{max (succ u3) (succ u1), succ u3, succ u1} (OneHom.{u3, u1} M P _inst_1 _inst_3) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1262 : M) => P) _x) (OneHomClass.toFunLike.{max u3 u1, u3, u1} (OneHom.{u3, u1} M P _inst_1 _inst_3) M P _inst_1 _inst_3 (OneHom.oneHomClass.{u3, u1} M P _inst_1 _inst_3)) (OneHom.comp.{u3, u2, u1} M N P _inst_1 _inst_2 _inst_3 g f)) (Function.comp.{succ u3, succ u2, succ u1} M N P (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (OneHom.{u2, u1} N P _inst_2 _inst_3) N (fun (_x : N) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1262 : N) => P) _x) (OneHomClass.toFunLike.{max u2 u1, u2, u1} (OneHom.{u2, u1} N P _inst_2 _inst_3) N P _inst_2 _inst_3 (OneHom.oneHomClass.{u2, u1} N P _inst_2 _inst_3)) g) (FunLike.coe.{max (succ u3) (succ u2), succ u3, succ u2} (OneHom.{u3, u2} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1262 : M) => N) _x) (OneHomClass.toFunLike.{max u3 u2, u3, u2} (OneHom.{u3, u2} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (OneHom.oneHomClass.{u3, u2} M N _inst_1 _inst_2)) f))
+  forall {M : Type.{u3}} {N : Type.{u2}} {P : Type.{u1}} [_inst_1 : One.{u3} M] [_inst_2 : One.{u2} N] [_inst_3 : One.{u1} P] (g : OneHom.{u2, u1} N P _inst_2 _inst_3) (f : OneHom.{u3, u2} M N _inst_1 _inst_2), Eq.{max (succ u3) (succ u1)} (M -> P) (FunLike.coe.{max (succ u3) (succ u1), succ u3, succ u1} (OneHom.{u3, u1} M P _inst_1 _inst_3) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1264 : M) => P) _x) (OneHomClass.toFunLike.{max u3 u1, u3, u1} (OneHom.{u3, u1} M P _inst_1 _inst_3) M P _inst_1 _inst_3 (OneHom.oneHomClass.{u3, u1} M P _inst_1 _inst_3)) (OneHom.comp.{u3, u2, u1} M N P _inst_1 _inst_2 _inst_3 g f)) (Function.comp.{succ u3, succ u2, succ u1} M N P (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (OneHom.{u2, u1} N P _inst_2 _inst_3) N (fun (_x : N) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1264 : N) => P) _x) (OneHomClass.toFunLike.{max u2 u1, u2, u1} (OneHom.{u2, u1} N P _inst_2 _inst_3) N P _inst_2 _inst_3 (OneHom.oneHomClass.{u2, u1} N P _inst_2 _inst_3)) g) (FunLike.coe.{max (succ u3) (succ u2), succ u3, succ u2} (OneHom.{u3, u2} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1264 : M) => N) _x) (OneHomClass.toFunLike.{max u3 u2, u3, u2} (OneHom.{u3, u2} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (OneHom.oneHomClass.{u3, u2} M N _inst_1 _inst_2)) f))
 Case conversion may be inaccurate. Consider using '#align one_hom.coe_comp OneHom.coe_compₓ'. -/
 @[simp, to_additive]
 theorem OneHom.coe_comp [One M] [One N] [One P] (g : OneHom N P) (f : OneHom M N) :
@@ -1693,7 +1693,7 @@ theorem OneHom.coe_comp [One M] [One N] [One P] (g : OneHom N P) (f : OneHom M N
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} {P : Type.{u3}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] [_inst_3 : Mul.{u3} P] (g : MulHom.{u2, u3} N P _inst_2 _inst_3) (f : MulHom.{u1, u2} M N _inst_1 _inst_2), Eq.{max (succ u1) (succ u3)} (M -> P) (coeFn.{max (succ u3) (succ u1), max (succ u1) (succ u3)} (MulHom.{u1, u3} M P _inst_1 _inst_3) (fun (_x : MulHom.{u1, u3} M P _inst_1 _inst_3) => M -> P) (MulHom.hasCoeToFun.{u1, u3} M P _inst_1 _inst_3) (MulHom.comp.{u1, u2, u3} M N P _inst_1 _inst_2 _inst_3 g f)) (Function.comp.{succ u1, succ u2, succ u3} M N P (coeFn.{max (succ u3) (succ u2), max (succ u2) (succ u3)} (MulHom.{u2, u3} N P _inst_2 _inst_3) (fun (_x : MulHom.{u2, u3} N P _inst_2 _inst_3) => N -> P) (MulHom.hasCoeToFun.{u2, u3} N P _inst_2 _inst_3) g) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MulHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MulHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MulHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f))
 but is expected to have type
-  forall {M : Type.{u3}} {N : Type.{u2}} {P : Type.{u1}} [_inst_1 : Mul.{u3} M] [_inst_2 : Mul.{u2} N] [_inst_3 : Mul.{u1} P] (g : MulHom.{u2, u1} N P _inst_2 _inst_3) (f : MulHom.{u3, u2} M N _inst_1 _inst_2), Eq.{max (succ u3) (succ u1)} (M -> P) (FunLike.coe.{max (succ u3) (succ u1), succ u3, succ u1} (MulHom.{u3, u1} M P _inst_1 _inst_3) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => P) _x) (MulHomClass.toFunLike.{max u3 u1, u3, u1} (MulHom.{u3, u1} M P _inst_1 _inst_3) M P _inst_1 _inst_3 (MulHom.mulHomClass.{u3, u1} M P _inst_1 _inst_3)) (MulHom.comp.{u3, u2, u1} M N P _inst_1 _inst_2 _inst_3 g f)) (Function.comp.{succ u3, succ u2, succ u1} M N P (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} N P _inst_2 _inst_3) N (fun (_x : N) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : N) => P) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} N P _inst_2 _inst_3) N P _inst_2 _inst_3 (MulHom.mulHomClass.{u2, u1} N P _inst_2 _inst_3)) g) (FunLike.coe.{max (succ u3) (succ u2), succ u3, succ u2} (MulHom.{u3, u2} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{max u3 u2, u3, u2} (MulHom.{u3, u2} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u3, u2} M N _inst_1 _inst_2)) f))
+  forall {M : Type.{u3}} {N : Type.{u2}} {P : Type.{u1}} [_inst_1 : Mul.{u3} M] [_inst_2 : Mul.{u2} N] [_inst_3 : Mul.{u1} P] (g : MulHom.{u2, u1} N P _inst_2 _inst_3) (f : MulHom.{u3, u2} M N _inst_1 _inst_2), Eq.{max (succ u3) (succ u1)} (M -> P) (FunLike.coe.{max (succ u3) (succ u1), succ u3, succ u1} (MulHom.{u3, u1} M P _inst_1 _inst_3) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => P) _x) (MulHomClass.toFunLike.{max u3 u1, u3, u1} (MulHom.{u3, u1} M P _inst_1 _inst_3) M P _inst_1 _inst_3 (MulHom.mulHomClass.{u3, u1} M P _inst_1 _inst_3)) (MulHom.comp.{u3, u2, u1} M N P _inst_1 _inst_2 _inst_3 g f)) (Function.comp.{succ u3, succ u2, succ u1} M N P (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} N P _inst_2 _inst_3) N (fun (_x : N) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : N) => P) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} N P _inst_2 _inst_3) N P _inst_2 _inst_3 (MulHom.mulHomClass.{u2, u1} N P _inst_2 _inst_3)) g) (FunLike.coe.{max (succ u3) (succ u2), succ u3, succ u2} (MulHom.{u3, u2} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{max u3 u2, u3, u2} (MulHom.{u3, u2} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u3, u2} M N _inst_1 _inst_2)) f))
 Case conversion may be inaccurate. Consider using '#align mul_hom.coe_comp MulHom.coe_compₓ'. -/
 @[simp, to_additive]
 theorem MulHom.coe_comp [Mul M] [Mul N] [Mul P] (g : N →ₙ* P) (f : M →ₙ* N) : ⇑(g.comp f) = g ∘ f :=
@@ -1705,7 +1705,7 @@ theorem MulHom.coe_comp [Mul M] [Mul N] [Mul P] (g : N →ₙ* P) (f : M →ₙ*
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} {P : Type.{u3}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N] [_inst_3 : MulOneClass.{u3} P] (g : MonoidHom.{u2, u3} N P _inst_2 _inst_3) (f : MonoidHom.{u1, u2} M N _inst_1 _inst_2), Eq.{max (succ u1) (succ u3)} (M -> P) (coeFn.{max (succ u3) (succ u1), max (succ u1) (succ u3)} (MonoidHom.{u1, u3} M P _inst_1 _inst_3) (fun (_x : MonoidHom.{u1, u3} M P _inst_1 _inst_3) => M -> P) (MonoidHom.hasCoeToFun.{u1, u3} M P _inst_1 _inst_3) (MonoidHom.comp.{u1, u2, u3} M N P _inst_1 _inst_2 _inst_3 g f)) (Function.comp.{succ u1, succ u2, succ u3} M N P (coeFn.{max (succ u3) (succ u2), max (succ u2) (succ u3)} (MonoidHom.{u2, u3} N P _inst_2 _inst_3) (fun (_x : MonoidHom.{u2, u3} N P _inst_2 _inst_3) => N -> P) (MonoidHom.hasCoeToFun.{u2, u3} N P _inst_2 _inst_3) g) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MonoidHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MonoidHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f))
 but is expected to have type
-  forall {M : Type.{u3}} {N : Type.{u2}} {P : Type.{u1}} [_inst_1 : MulOneClass.{u3} M] [_inst_2 : MulOneClass.{u2} N] [_inst_3 : MulOneClass.{u1} P] (g : MonoidHom.{u2, u1} N P _inst_2 _inst_3) (f : MonoidHom.{u3, u2} M N _inst_1 _inst_2), Eq.{max (succ u3) (succ u1)} (M -> P) (FunLike.coe.{max (succ u3) (succ u1), succ u3, succ u1} (MonoidHom.{u3, u1} M P _inst_1 _inst_3) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => P) _x) (MulHomClass.toFunLike.{max u3 u1, u3, u1} (MonoidHom.{u3, u1} M P _inst_1 _inst_3) M P (MulOneClass.toMul.{u3} M _inst_1) (MulOneClass.toMul.{u1} P _inst_3) (MonoidHomClass.toMulHomClass.{max u3 u1, u3, u1} (MonoidHom.{u3, u1} M P _inst_1 _inst_3) M P _inst_1 _inst_3 (MonoidHom.monoidHomClass.{u3, u1} M P _inst_1 _inst_3))) (MonoidHom.comp.{u3, u2, u1} M N P _inst_1 _inst_2 _inst_3 g f)) (Function.comp.{succ u3, succ u2, succ u1} M N P (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} N P _inst_2 _inst_3) N (fun (_x : N) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : N) => P) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} N P _inst_2 _inst_3) N P (MulOneClass.toMul.{u2} N _inst_2) (MulOneClass.toMul.{u1} P _inst_3) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} N P _inst_2 _inst_3) N P _inst_2 _inst_3 (MonoidHom.monoidHomClass.{u2, u1} N P _inst_2 _inst_3))) g) (FunLike.coe.{max (succ u3) (succ u2), succ u3, succ u2} (MonoidHom.{u3, u2} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{max u3 u2, u3, u2} (MonoidHom.{u3, u2} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u3} M _inst_1) (MulOneClass.toMul.{u2} N _inst_2) (MonoidHomClass.toMulHomClass.{max u3 u2, u3, u2} (MonoidHom.{u3, u2} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidHom.monoidHomClass.{u3, u2} M N _inst_1 _inst_2))) f))
+  forall {M : Type.{u3}} {N : Type.{u2}} {P : Type.{u1}} [_inst_1 : MulOneClass.{u3} M] [_inst_2 : MulOneClass.{u2} N] [_inst_3 : MulOneClass.{u1} P] (g : MonoidHom.{u2, u1} N P _inst_2 _inst_3) (f : MonoidHom.{u3, u2} M N _inst_1 _inst_2), Eq.{max (succ u3) (succ u1)} (M -> P) (FunLike.coe.{max (succ u3) (succ u1), succ u3, succ u1} (MonoidHom.{u3, u1} M P _inst_1 _inst_3) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => P) _x) (MulHomClass.toFunLike.{max u3 u1, u3, u1} (MonoidHom.{u3, u1} M P _inst_1 _inst_3) M P (MulOneClass.toMul.{u3} M _inst_1) (MulOneClass.toMul.{u1} P _inst_3) (MonoidHomClass.toMulHomClass.{max u3 u1, u3, u1} (MonoidHom.{u3, u1} M P _inst_1 _inst_3) M P _inst_1 _inst_3 (MonoidHom.monoidHomClass.{u3, u1} M P _inst_1 _inst_3))) (MonoidHom.comp.{u3, u2, u1} M N P _inst_1 _inst_2 _inst_3 g f)) (Function.comp.{succ u3, succ u2, succ u1} M N P (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} N P _inst_2 _inst_3) N (fun (_x : N) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : N) => P) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} N P _inst_2 _inst_3) N P (MulOneClass.toMul.{u2} N _inst_2) (MulOneClass.toMul.{u1} P _inst_3) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} N P _inst_2 _inst_3) N P _inst_2 _inst_3 (MonoidHom.monoidHomClass.{u2, u1} N P _inst_2 _inst_3))) g) (FunLike.coe.{max (succ u3) (succ u2), succ u3, succ u2} (MonoidHom.{u3, u2} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{max u3 u2, u3, u2} (MonoidHom.{u3, u2} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u3} M _inst_1) (MulOneClass.toMul.{u2} N _inst_2) (MonoidHomClass.toMulHomClass.{max u3 u2, u3, u2} (MonoidHom.{u3, u2} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidHom.monoidHomClass.{u3, u2} M N _inst_1 _inst_2))) f))
 Case conversion may be inaccurate. Consider using '#align monoid_hom.coe_comp MonoidHom.coe_compₓ'. -/
 @[simp, to_additive]
 theorem MonoidHom.coe_comp [MulOneClass M] [MulOneClass N] [MulOneClass P] (g : N →* P)
@@ -1718,7 +1718,7 @@ theorem MonoidHom.coe_comp [MulOneClass M] [MulOneClass N] [MulOneClass P] (g :
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} {P : Type.{u3}} [_inst_1 : MulZeroOneClass.{u1} M] [_inst_2 : MulZeroOneClass.{u2} N] [_inst_3 : MulZeroOneClass.{u3} P] (g : MonoidWithZeroHom.{u2, u3} N P _inst_2 _inst_3) (f : MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2), Eq.{max (succ u1) (succ u3)} (M -> P) (coeFn.{max (succ u3) (succ u1), max (succ u1) (succ u3)} (MonoidWithZeroHom.{u1, u3} M P _inst_1 _inst_3) (fun (_x : MonoidWithZeroHom.{u1, u3} M P _inst_1 _inst_3) => M -> P) (MonoidWithZeroHom.hasCoeToFun.{u1, u3} M P _inst_1 _inst_3) (MonoidWithZeroHom.comp.{u1, u2, u3} M N P _inst_1 _inst_2 _inst_3 g f)) (Function.comp.{succ u1, succ u2, succ u3} M N P (coeFn.{max (succ u3) (succ u2), max (succ u2) (succ u3)} (MonoidWithZeroHom.{u2, u3} N P _inst_2 _inst_3) (fun (_x : MonoidWithZeroHom.{u2, u3} N P _inst_2 _inst_3) => N -> P) (MonoidWithZeroHom.hasCoeToFun.{u2, u3} N P _inst_2 _inst_3) g) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MonoidWithZeroHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f))
 but is expected to have type
-  forall {M : Type.{u3}} {N : Type.{u2}} {P : Type.{u1}} [_inst_1 : MulZeroOneClass.{u3} M] [_inst_2 : MulZeroOneClass.{u2} N] [_inst_3 : MulZeroOneClass.{u1} P] (g : MonoidWithZeroHom.{u2, u1} N P _inst_2 _inst_3) (f : MonoidWithZeroHom.{u3, u2} M N _inst_1 _inst_2), Eq.{max (succ u3) (succ u1)} (M -> P) (FunLike.coe.{max (succ u3) (succ u1), succ u3, succ u1} (MonoidWithZeroHom.{u3, u1} M P _inst_1 _inst_3) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => P) _x) (MulHomClass.toFunLike.{max u3 u1, u3, u1} (MonoidWithZeroHom.{u3, u1} M P _inst_1 _inst_3) M P (MulOneClass.toMul.{u3} M (MulZeroOneClass.toMulOneClass.{u3} M _inst_1)) (MulOneClass.toMul.{u1} P (MulZeroOneClass.toMulOneClass.{u1} P _inst_3)) (MonoidHomClass.toMulHomClass.{max u3 u1, u3, u1} (MonoidWithZeroHom.{u3, u1} M P _inst_1 _inst_3) M P (MulZeroOneClass.toMulOneClass.{u3} M _inst_1) (MulZeroOneClass.toMulOneClass.{u1} P _inst_3) (MonoidWithZeroHomClass.toMonoidHomClass.{max u3 u1, u3, u1} (MonoidWithZeroHom.{u3, u1} M P _inst_1 _inst_3) M P _inst_1 _inst_3 (MonoidWithZeroHom.monoidWithZeroHomClass.{u3, u1} M P _inst_1 _inst_3)))) (MonoidWithZeroHom.comp.{u3, u2, u1} M N P _inst_1 _inst_2 _inst_3 g f)) (Function.comp.{succ u3, succ u2, succ u1} M N P (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidWithZeroHom.{u2, u1} N P _inst_2 _inst_3) N (fun (_x : N) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : N) => P) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} N P _inst_2 _inst_3) N P (MulOneClass.toMul.{u2} N (MulZeroOneClass.toMulOneClass.{u2} N _inst_2)) (MulOneClass.toMul.{u1} P (MulZeroOneClass.toMulOneClass.{u1} P _inst_3)) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} N P _inst_2 _inst_3) N P (MulZeroOneClass.toMulOneClass.{u2} N _inst_2) (MulZeroOneClass.toMulOneClass.{u1} P _inst_3) (MonoidWithZeroHomClass.toMonoidHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} N P _inst_2 _inst_3) N P _inst_2 _inst_3 (MonoidWithZeroHom.monoidWithZeroHomClass.{u2, u1} N P _inst_2 _inst_3)))) g) (FunLike.coe.{max (succ u3) (succ u2), succ u3, succ u2} (MonoidWithZeroHom.{u3, u2} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{max u3 u2, u3, u2} (MonoidWithZeroHom.{u3, u2} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u3} M (MulZeroOneClass.toMulOneClass.{u3} M _inst_1)) (MulOneClass.toMul.{u2} N (MulZeroOneClass.toMulOneClass.{u2} N _inst_2)) (MonoidHomClass.toMulHomClass.{max u3 u2, u3, u2} (MonoidWithZeroHom.{u3, u2} M N _inst_1 _inst_2) M N (MulZeroOneClass.toMulOneClass.{u3} M _inst_1) (MulZeroOneClass.toMulOneClass.{u2} N _inst_2) (MonoidWithZeroHomClass.toMonoidHomClass.{max u3 u2, u3, u2} (MonoidWithZeroHom.{u3, u2} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidWithZeroHom.monoidWithZeroHomClass.{u3, u2} M N _inst_1 _inst_2)))) f))
+  forall {M : Type.{u3}} {N : Type.{u2}} {P : Type.{u1}} [_inst_1 : MulZeroOneClass.{u3} M] [_inst_2 : MulZeroOneClass.{u2} N] [_inst_3 : MulZeroOneClass.{u1} P] (g : MonoidWithZeroHom.{u2, u1} N P _inst_2 _inst_3) (f : MonoidWithZeroHom.{u3, u2} M N _inst_1 _inst_2), Eq.{max (succ u3) (succ u1)} (M -> P) (FunLike.coe.{max (succ u3) (succ u1), succ u3, succ u1} (MonoidWithZeroHom.{u3, u1} M P _inst_1 _inst_3) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => P) _x) (MulHomClass.toFunLike.{max u3 u1, u3, u1} (MonoidWithZeroHom.{u3, u1} M P _inst_1 _inst_3) M P (MulOneClass.toMul.{u3} M (MulZeroOneClass.toMulOneClass.{u3} M _inst_1)) (MulOneClass.toMul.{u1} P (MulZeroOneClass.toMulOneClass.{u1} P _inst_3)) (MonoidHomClass.toMulHomClass.{max u3 u1, u3, u1} (MonoidWithZeroHom.{u3, u1} M P _inst_1 _inst_3) M P (MulZeroOneClass.toMulOneClass.{u3} M _inst_1) (MulZeroOneClass.toMulOneClass.{u1} P _inst_3) (MonoidWithZeroHomClass.toMonoidHomClass.{max u3 u1, u3, u1} (MonoidWithZeroHom.{u3, u1} M P _inst_1 _inst_3) M P _inst_1 _inst_3 (MonoidWithZeroHom.monoidWithZeroHomClass.{u3, u1} M P _inst_1 _inst_3)))) (MonoidWithZeroHom.comp.{u3, u2, u1} M N P _inst_1 _inst_2 _inst_3 g f)) (Function.comp.{succ u3, succ u2, succ u1} M N P (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidWithZeroHom.{u2, u1} N P _inst_2 _inst_3) N (fun (_x : N) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : N) => P) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} N P _inst_2 _inst_3) N P (MulOneClass.toMul.{u2} N (MulZeroOneClass.toMulOneClass.{u2} N _inst_2)) (MulOneClass.toMul.{u1} P (MulZeroOneClass.toMulOneClass.{u1} P _inst_3)) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} N P _inst_2 _inst_3) N P (MulZeroOneClass.toMulOneClass.{u2} N _inst_2) (MulZeroOneClass.toMulOneClass.{u1} P _inst_3) (MonoidWithZeroHomClass.toMonoidHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} N P _inst_2 _inst_3) N P _inst_2 _inst_3 (MonoidWithZeroHom.monoidWithZeroHomClass.{u2, u1} N P _inst_2 _inst_3)))) g) (FunLike.coe.{max (succ u3) (succ u2), succ u3, succ u2} (MonoidWithZeroHom.{u3, u2} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{max u3 u2, u3, u2} (MonoidWithZeroHom.{u3, u2} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u3} M (MulZeroOneClass.toMulOneClass.{u3} M _inst_1)) (MulOneClass.toMul.{u2} N (MulZeroOneClass.toMulOneClass.{u2} N _inst_2)) (MonoidHomClass.toMulHomClass.{max u3 u2, u3, u2} (MonoidWithZeroHom.{u3, u2} M N _inst_1 _inst_2) M N (MulZeroOneClass.toMulOneClass.{u3} M _inst_1) (MulZeroOneClass.toMulOneClass.{u2} N _inst_2) (MonoidWithZeroHomClass.toMonoidHomClass.{max u3 u2, u3, u2} (MonoidWithZeroHom.{u3, u2} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidWithZeroHom.monoidWithZeroHomClass.{u3, u2} M N _inst_1 _inst_2)))) f))
 Case conversion may be inaccurate. Consider using '#align monoid_with_zero_hom.coe_comp MonoidWithZeroHom.coe_compₓ'. -/
 @[simp]
 theorem MonoidWithZeroHom.coe_comp [MulZeroOneClass M] [MulZeroOneClass N] [MulZeroOneClass P]
@@ -1730,7 +1730,7 @@ theorem MonoidWithZeroHom.coe_comp [MulZeroOneClass M] [MulZeroOneClass N] [MulZ
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} {P : Type.{u3}} [_inst_1 : One.{u1} M] [_inst_2 : One.{u2} N] [_inst_3 : One.{u3} P] (g : OneHom.{u2, u3} N P _inst_2 _inst_3) (f : OneHom.{u1, u2} M N _inst_1 _inst_2) (x : M), Eq.{succ u3} P (coeFn.{max (succ u3) (succ u1), max (succ u1) (succ u3)} (OneHom.{u1, u3} M P _inst_1 _inst_3) (fun (_x : OneHom.{u1, u3} M P _inst_1 _inst_3) => M -> P) (OneHom.hasCoeToFun.{u1, u3} M P _inst_1 _inst_3) (OneHom.comp.{u1, u2, u3} M N P _inst_1 _inst_2 _inst_3 g f) x) (coeFn.{max (succ u3) (succ u2), max (succ u2) (succ u3)} (OneHom.{u2, u3} N P _inst_2 _inst_3) (fun (_x : OneHom.{u2, u3} N P _inst_2 _inst_3) => N -> P) (OneHom.hasCoeToFun.{u2, u3} N P _inst_2 _inst_3) g (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (OneHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : OneHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (OneHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f x))
 but is expected to have type
-  forall {M : Type.{u3}} {N : Type.{u2}} {P : Type.{u1}} [_inst_1 : One.{u3} M] [_inst_2 : One.{u2} N] [_inst_3 : One.{u1} P] (g : OneHom.{u2, u1} N P _inst_2 _inst_3) (f : OneHom.{u3, u2} M N _inst_1 _inst_2) (x : M), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1262 : M) => P) x) (FunLike.coe.{max (succ u3) (succ u1), succ u3, succ u1} (OneHom.{u3, u1} M P _inst_1 _inst_3) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1262 : M) => P) _x) (OneHomClass.toFunLike.{max u3 u1, u3, u1} (OneHom.{u3, u1} M P _inst_1 _inst_3) M P _inst_1 _inst_3 (OneHom.oneHomClass.{u3, u1} M P _inst_1 _inst_3)) (OneHom.comp.{u3, u2, u1} M N P _inst_1 _inst_2 _inst_3 g f) x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (OneHom.{u2, u1} N P _inst_2 _inst_3) N (fun (_x : N) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1262 : N) => P) _x) (OneHomClass.toFunLike.{max u2 u1, u2, u1} (OneHom.{u2, u1} N P _inst_2 _inst_3) N P _inst_2 _inst_3 (OneHom.oneHomClass.{u2, u1} N P _inst_2 _inst_3)) g (FunLike.coe.{max (succ u3) (succ u2), succ u3, succ u2} (OneHom.{u3, u2} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1262 : M) => N) _x) (OneHomClass.toFunLike.{max u3 u2, u3, u2} (OneHom.{u3, u2} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (OneHom.oneHomClass.{u3, u2} M N _inst_1 _inst_2)) f x))
+  forall {M : Type.{u3}} {N : Type.{u2}} {P : Type.{u1}} [_inst_1 : One.{u3} M] [_inst_2 : One.{u2} N] [_inst_3 : One.{u1} P] (g : OneHom.{u2, u1} N P _inst_2 _inst_3) (f : OneHom.{u3, u2} M N _inst_1 _inst_2) (x : M), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1264 : M) => P) x) (FunLike.coe.{max (succ u3) (succ u1), succ u3, succ u1} (OneHom.{u3, u1} M P _inst_1 _inst_3) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1264 : M) => P) _x) (OneHomClass.toFunLike.{max u3 u1, u3, u1} (OneHom.{u3, u1} M P _inst_1 _inst_3) M P _inst_1 _inst_3 (OneHom.oneHomClass.{u3, u1} M P _inst_1 _inst_3)) (OneHom.comp.{u3, u2, u1} M N P _inst_1 _inst_2 _inst_3 g f) x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (OneHom.{u2, u1} N P _inst_2 _inst_3) N (fun (_x : N) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1264 : N) => P) _x) (OneHomClass.toFunLike.{max u2 u1, u2, u1} (OneHom.{u2, u1} N P _inst_2 _inst_3) N P _inst_2 _inst_3 (OneHom.oneHomClass.{u2, u1} N P _inst_2 _inst_3)) g (FunLike.coe.{max (succ u3) (succ u2), succ u3, succ u2} (OneHom.{u3, u2} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1264 : M) => N) _x) (OneHomClass.toFunLike.{max u3 u2, u3, u2} (OneHom.{u3, u2} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (OneHom.oneHomClass.{u3, u2} M N _inst_1 _inst_2)) f x))
 Case conversion may be inaccurate. Consider using '#align one_hom.comp_apply OneHom.comp_applyₓ'. -/
 @[to_additive]
 theorem OneHom.comp_apply [One M] [One N] [One P] (g : OneHom N P) (f : OneHom M N) (x : M) :
@@ -1743,7 +1743,7 @@ theorem OneHom.comp_apply [One M] [One N] [One P] (g : OneHom N P) (f : OneHom M
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} {P : Type.{u3}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] [_inst_3 : Mul.{u3} P] (g : MulHom.{u2, u3} N P _inst_2 _inst_3) (f : MulHom.{u1, u2} M N _inst_1 _inst_2) (x : M), Eq.{succ u3} P (coeFn.{max (succ u3) (succ u1), max (succ u1) (succ u3)} (MulHom.{u1, u3} M P _inst_1 _inst_3) (fun (_x : MulHom.{u1, u3} M P _inst_1 _inst_3) => M -> P) (MulHom.hasCoeToFun.{u1, u3} M P _inst_1 _inst_3) (MulHom.comp.{u1, u2, u3} M N P _inst_1 _inst_2 _inst_3 g f) x) (coeFn.{max (succ u3) (succ u2), max (succ u2) (succ u3)} (MulHom.{u2, u3} N P _inst_2 _inst_3) (fun (_x : MulHom.{u2, u3} N P _inst_2 _inst_3) => N -> P) (MulHom.hasCoeToFun.{u2, u3} N P _inst_2 _inst_3) g (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MulHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MulHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MulHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f x))
 but is expected to have type
-  forall {M : Type.{u3}} {N : Type.{u2}} {P : Type.{u1}} [_inst_1 : Mul.{u3} M] [_inst_2 : Mul.{u2} N] [_inst_3 : Mul.{u1} P] (g : MulHom.{u2, u1} N P _inst_2 _inst_3) (f : MulHom.{u3, u2} M N _inst_1 _inst_2) (x : M), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => P) x) (FunLike.coe.{max (succ u3) (succ u1), succ u3, succ u1} (MulHom.{u3, u1} M P _inst_1 _inst_3) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => P) _x) (MulHomClass.toFunLike.{max u3 u1, u3, u1} (MulHom.{u3, u1} M P _inst_1 _inst_3) M P _inst_1 _inst_3 (MulHom.mulHomClass.{u3, u1} M P _inst_1 _inst_3)) (MulHom.comp.{u3, u2, u1} M N P _inst_1 _inst_2 _inst_3 g f) x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} N P _inst_2 _inst_3) N (fun (_x : N) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : N) => P) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} N P _inst_2 _inst_3) N P _inst_2 _inst_3 (MulHom.mulHomClass.{u2, u1} N P _inst_2 _inst_3)) g (FunLike.coe.{max (succ u3) (succ u2), succ u3, succ u2} (MulHom.{u3, u2} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{max u3 u2, u3, u2} (MulHom.{u3, u2} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u3, u2} M N _inst_1 _inst_2)) f x))
+  forall {M : Type.{u3}} {N : Type.{u2}} {P : Type.{u1}} [_inst_1 : Mul.{u3} M] [_inst_2 : Mul.{u2} N] [_inst_3 : Mul.{u1} P] (g : MulHom.{u2, u1} N P _inst_2 _inst_3) (f : MulHom.{u3, u2} M N _inst_1 _inst_2) (x : M), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => P) x) (FunLike.coe.{max (succ u3) (succ u1), succ u3, succ u1} (MulHom.{u3, u1} M P _inst_1 _inst_3) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => P) _x) (MulHomClass.toFunLike.{max u3 u1, u3, u1} (MulHom.{u3, u1} M P _inst_1 _inst_3) M P _inst_1 _inst_3 (MulHom.mulHomClass.{u3, u1} M P _inst_1 _inst_3)) (MulHom.comp.{u3, u2, u1} M N P _inst_1 _inst_2 _inst_3 g f) x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} N P _inst_2 _inst_3) N (fun (_x : N) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : N) => P) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} N P _inst_2 _inst_3) N P _inst_2 _inst_3 (MulHom.mulHomClass.{u2, u1} N P _inst_2 _inst_3)) g (FunLike.coe.{max (succ u3) (succ u2), succ u3, succ u2} (MulHom.{u3, u2} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{max u3 u2, u3, u2} (MulHom.{u3, u2} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u3, u2} M N _inst_1 _inst_2)) f x))
 Case conversion may be inaccurate. Consider using '#align mul_hom.comp_apply MulHom.comp_applyₓ'. -/
 @[to_additive]
 theorem MulHom.comp_apply [Mul M] [Mul N] [Mul P] (g : N →ₙ* P) (f : M →ₙ* N) (x : M) :
@@ -1756,7 +1756,7 @@ theorem MulHom.comp_apply [Mul M] [Mul N] [Mul P] (g : N →ₙ* P) (f : M →
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} {P : Type.{u3}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N] [_inst_3 : MulOneClass.{u3} P] (g : MonoidHom.{u2, u3} N P _inst_2 _inst_3) (f : MonoidHom.{u1, u2} M N _inst_1 _inst_2) (x : M), Eq.{succ u3} P (coeFn.{max (succ u3) (succ u1), max (succ u1) (succ u3)} (MonoidHom.{u1, u3} M P _inst_1 _inst_3) (fun (_x : MonoidHom.{u1, u3} M P _inst_1 _inst_3) => M -> P) (MonoidHom.hasCoeToFun.{u1, u3} M P _inst_1 _inst_3) (MonoidHom.comp.{u1, u2, u3} M N P _inst_1 _inst_2 _inst_3 g f) x) (coeFn.{max (succ u3) (succ u2), max (succ u2) (succ u3)} (MonoidHom.{u2, u3} N P _inst_2 _inst_3) (fun (_x : MonoidHom.{u2, u3} N P _inst_2 _inst_3) => N -> P) (MonoidHom.hasCoeToFun.{u2, u3} N P _inst_2 _inst_3) g (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MonoidHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MonoidHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f x))
 but is expected to have type
-  forall {M : Type.{u3}} {N : Type.{u2}} {P : Type.{u1}} [_inst_1 : MulOneClass.{u3} M] [_inst_2 : MulOneClass.{u2} N] [_inst_3 : MulOneClass.{u1} P] (g : MonoidHom.{u2, u1} N P _inst_2 _inst_3) (f : MonoidHom.{u3, u2} M N _inst_1 _inst_2) (x : M), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => P) x) (FunLike.coe.{max (succ u3) (succ u1), succ u3, succ u1} (MonoidHom.{u3, u1} M P _inst_1 _inst_3) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => P) _x) (MulHomClass.toFunLike.{max u3 u1, u3, u1} (MonoidHom.{u3, u1} M P _inst_1 _inst_3) M P (MulOneClass.toMul.{u3} M _inst_1) (MulOneClass.toMul.{u1} P _inst_3) (MonoidHomClass.toMulHomClass.{max u3 u1, u3, u1} (MonoidHom.{u3, u1} M P _inst_1 _inst_3) M P _inst_1 _inst_3 (MonoidHom.monoidHomClass.{u3, u1} M P _inst_1 _inst_3))) (MonoidHom.comp.{u3, u2, u1} M N P _inst_1 _inst_2 _inst_3 g f) x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} N P _inst_2 _inst_3) N (fun (_x : N) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : N) => P) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} N P _inst_2 _inst_3) N P (MulOneClass.toMul.{u2} N _inst_2) (MulOneClass.toMul.{u1} P _inst_3) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} N P _inst_2 _inst_3) N P _inst_2 _inst_3 (MonoidHom.monoidHomClass.{u2, u1} N P _inst_2 _inst_3))) g (FunLike.coe.{max (succ u3) (succ u2), succ u3, succ u2} (MonoidHom.{u3, u2} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{max u3 u2, u3, u2} (MonoidHom.{u3, u2} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u3} M _inst_1) (MulOneClass.toMul.{u2} N _inst_2) (MonoidHomClass.toMulHomClass.{max u3 u2, u3, u2} (MonoidHom.{u3, u2} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidHom.monoidHomClass.{u3, u2} M N _inst_1 _inst_2))) f x))
+  forall {M : Type.{u3}} {N : Type.{u2}} {P : Type.{u1}} [_inst_1 : MulOneClass.{u3} M] [_inst_2 : MulOneClass.{u2} N] [_inst_3 : MulOneClass.{u1} P] (g : MonoidHom.{u2, u1} N P _inst_2 _inst_3) (f : MonoidHom.{u3, u2} M N _inst_1 _inst_2) (x : M), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => P) x) (FunLike.coe.{max (succ u3) (succ u1), succ u3, succ u1} (MonoidHom.{u3, u1} M P _inst_1 _inst_3) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => P) _x) (MulHomClass.toFunLike.{max u3 u1, u3, u1} (MonoidHom.{u3, u1} M P _inst_1 _inst_3) M P (MulOneClass.toMul.{u3} M _inst_1) (MulOneClass.toMul.{u1} P _inst_3) (MonoidHomClass.toMulHomClass.{max u3 u1, u3, u1} (MonoidHom.{u3, u1} M P _inst_1 _inst_3) M P _inst_1 _inst_3 (MonoidHom.monoidHomClass.{u3, u1} M P _inst_1 _inst_3))) (MonoidHom.comp.{u3, u2, u1} M N P _inst_1 _inst_2 _inst_3 g f) x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} N P _inst_2 _inst_3) N (fun (_x : N) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : N) => P) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} N P _inst_2 _inst_3) N P (MulOneClass.toMul.{u2} N _inst_2) (MulOneClass.toMul.{u1} P _inst_3) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} N P _inst_2 _inst_3) N P _inst_2 _inst_3 (MonoidHom.monoidHomClass.{u2, u1} N P _inst_2 _inst_3))) g (FunLike.coe.{max (succ u3) (succ u2), succ u3, succ u2} (MonoidHom.{u3, u2} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{max u3 u2, u3, u2} (MonoidHom.{u3, u2} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u3} M _inst_1) (MulOneClass.toMul.{u2} N _inst_2) (MonoidHomClass.toMulHomClass.{max u3 u2, u3, u2} (MonoidHom.{u3, u2} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidHom.monoidHomClass.{u3, u2} M N _inst_1 _inst_2))) f x))
 Case conversion may be inaccurate. Consider using '#align monoid_hom.comp_apply MonoidHom.comp_applyₓ'. -/
 @[to_additive]
 theorem MonoidHom.comp_apply [MulOneClass M] [MulOneClass N] [MulOneClass P] (g : N →* P)
@@ -1769,7 +1769,7 @@ theorem MonoidHom.comp_apply [MulOneClass M] [MulOneClass N] [MulOneClass P] (g
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} {P : Type.{u3}} [_inst_1 : MulZeroOneClass.{u1} M] [_inst_2 : MulZeroOneClass.{u2} N] [_inst_3 : MulZeroOneClass.{u3} P] (g : MonoidWithZeroHom.{u2, u3} N P _inst_2 _inst_3) (f : MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) (x : M), Eq.{succ u3} P (coeFn.{max (succ u3) (succ u1), max (succ u1) (succ u3)} (MonoidWithZeroHom.{u1, u3} M P _inst_1 _inst_3) (fun (_x : MonoidWithZeroHom.{u1, u3} M P _inst_1 _inst_3) => M -> P) (MonoidWithZeroHom.hasCoeToFun.{u1, u3} M P _inst_1 _inst_3) (MonoidWithZeroHom.comp.{u1, u2, u3} M N P _inst_1 _inst_2 _inst_3 g f) x) (coeFn.{max (succ u3) (succ u2), max (succ u2) (succ u3)} (MonoidWithZeroHom.{u2, u3} N P _inst_2 _inst_3) (fun (_x : MonoidWithZeroHom.{u2, u3} N P _inst_2 _inst_3) => N -> P) (MonoidWithZeroHom.hasCoeToFun.{u2, u3} N P _inst_2 _inst_3) g (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MonoidWithZeroHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f x))
 but is expected to have type
-  forall {M : Type.{u3}} {N : Type.{u2}} {P : Type.{u1}} [_inst_1 : MulZeroOneClass.{u3} M] [_inst_2 : MulZeroOneClass.{u2} N] [_inst_3 : MulZeroOneClass.{u1} P] (g : MonoidWithZeroHom.{u2, u1} N P _inst_2 _inst_3) (f : MonoidWithZeroHom.{u3, u2} M N _inst_1 _inst_2) (x : M), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => P) x) (FunLike.coe.{max (succ u3) (succ u1), succ u3, succ u1} (MonoidWithZeroHom.{u3, u1} M P _inst_1 _inst_3) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => P) _x) (MulHomClass.toFunLike.{max u3 u1, u3, u1} (MonoidWithZeroHom.{u3, u1} M P _inst_1 _inst_3) M P (MulOneClass.toMul.{u3} M (MulZeroOneClass.toMulOneClass.{u3} M _inst_1)) (MulOneClass.toMul.{u1} P (MulZeroOneClass.toMulOneClass.{u1} P _inst_3)) (MonoidHomClass.toMulHomClass.{max u3 u1, u3, u1} (MonoidWithZeroHom.{u3, u1} M P _inst_1 _inst_3) M P (MulZeroOneClass.toMulOneClass.{u3} M _inst_1) (MulZeroOneClass.toMulOneClass.{u1} P _inst_3) (MonoidWithZeroHomClass.toMonoidHomClass.{max u3 u1, u3, u1} (MonoidWithZeroHom.{u3, u1} M P _inst_1 _inst_3) M P _inst_1 _inst_3 (MonoidWithZeroHom.monoidWithZeroHomClass.{u3, u1} M P _inst_1 _inst_3)))) (MonoidWithZeroHom.comp.{u3, u2, u1} M N P _inst_1 _inst_2 _inst_3 g f) x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidWithZeroHom.{u2, u1} N P _inst_2 _inst_3) N (fun (_x : N) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : N) => P) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} N P _inst_2 _inst_3) N P (MulOneClass.toMul.{u2} N (MulZeroOneClass.toMulOneClass.{u2} N _inst_2)) (MulOneClass.toMul.{u1} P (MulZeroOneClass.toMulOneClass.{u1} P _inst_3)) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} N P _inst_2 _inst_3) N P (MulZeroOneClass.toMulOneClass.{u2} N _inst_2) (MulZeroOneClass.toMulOneClass.{u1} P _inst_3) (MonoidWithZeroHomClass.toMonoidHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} N P _inst_2 _inst_3) N P _inst_2 _inst_3 (MonoidWithZeroHom.monoidWithZeroHomClass.{u2, u1} N P _inst_2 _inst_3)))) g (FunLike.coe.{max (succ u3) (succ u2), succ u3, succ u2} (MonoidWithZeroHom.{u3, u2} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{max u3 u2, u3, u2} (MonoidWithZeroHom.{u3, u2} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u3} M (MulZeroOneClass.toMulOneClass.{u3} M _inst_1)) (MulOneClass.toMul.{u2} N (MulZeroOneClass.toMulOneClass.{u2} N _inst_2)) (MonoidHomClass.toMulHomClass.{max u3 u2, u3, u2} (MonoidWithZeroHom.{u3, u2} M N _inst_1 _inst_2) M N (MulZeroOneClass.toMulOneClass.{u3} M _inst_1) (MulZeroOneClass.toMulOneClass.{u2} N _inst_2) (MonoidWithZeroHomClass.toMonoidHomClass.{max u3 u2, u3, u2} (MonoidWithZeroHom.{u3, u2} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidWithZeroHom.monoidWithZeroHomClass.{u3, u2} M N _inst_1 _inst_2)))) f x))
+  forall {M : Type.{u3}} {N : Type.{u2}} {P : Type.{u1}} [_inst_1 : MulZeroOneClass.{u3} M] [_inst_2 : MulZeroOneClass.{u2} N] [_inst_3 : MulZeroOneClass.{u1} P] (g : MonoidWithZeroHom.{u2, u1} N P _inst_2 _inst_3) (f : MonoidWithZeroHom.{u3, u2} M N _inst_1 _inst_2) (x : M), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => P) x) (FunLike.coe.{max (succ u3) (succ u1), succ u3, succ u1} (MonoidWithZeroHom.{u3, u1} M P _inst_1 _inst_3) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => P) _x) (MulHomClass.toFunLike.{max u3 u1, u3, u1} (MonoidWithZeroHom.{u3, u1} M P _inst_1 _inst_3) M P (MulOneClass.toMul.{u3} M (MulZeroOneClass.toMulOneClass.{u3} M _inst_1)) (MulOneClass.toMul.{u1} P (MulZeroOneClass.toMulOneClass.{u1} P _inst_3)) (MonoidHomClass.toMulHomClass.{max u3 u1, u3, u1} (MonoidWithZeroHom.{u3, u1} M P _inst_1 _inst_3) M P (MulZeroOneClass.toMulOneClass.{u3} M _inst_1) (MulZeroOneClass.toMulOneClass.{u1} P _inst_3) (MonoidWithZeroHomClass.toMonoidHomClass.{max u3 u1, u3, u1} (MonoidWithZeroHom.{u3, u1} M P _inst_1 _inst_3) M P _inst_1 _inst_3 (MonoidWithZeroHom.monoidWithZeroHomClass.{u3, u1} M P _inst_1 _inst_3)))) (MonoidWithZeroHom.comp.{u3, u2, u1} M N P _inst_1 _inst_2 _inst_3 g f) x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidWithZeroHom.{u2, u1} N P _inst_2 _inst_3) N (fun (_x : N) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : N) => P) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} N P _inst_2 _inst_3) N P (MulOneClass.toMul.{u2} N (MulZeroOneClass.toMulOneClass.{u2} N _inst_2)) (MulOneClass.toMul.{u1} P (MulZeroOneClass.toMulOneClass.{u1} P _inst_3)) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} N P _inst_2 _inst_3) N P (MulZeroOneClass.toMulOneClass.{u2} N _inst_2) (MulZeroOneClass.toMulOneClass.{u1} P _inst_3) (MonoidWithZeroHomClass.toMonoidHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} N P _inst_2 _inst_3) N P _inst_2 _inst_3 (MonoidWithZeroHom.monoidWithZeroHomClass.{u2, u1} N P _inst_2 _inst_3)))) g (FunLike.coe.{max (succ u3) (succ u2), succ u3, succ u2} (MonoidWithZeroHom.{u3, u2} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{max u3 u2, u3, u2} (MonoidWithZeroHom.{u3, u2} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u3} M (MulZeroOneClass.toMulOneClass.{u3} M _inst_1)) (MulOneClass.toMul.{u2} N (MulZeroOneClass.toMulOneClass.{u2} N _inst_2)) (MonoidHomClass.toMulHomClass.{max u3 u2, u3, u2} (MonoidWithZeroHom.{u3, u2} M N _inst_1 _inst_2) M N (MulZeroOneClass.toMulOneClass.{u3} M _inst_1) (MulZeroOneClass.toMulOneClass.{u2} N _inst_2) (MonoidWithZeroHomClass.toMonoidHomClass.{max u3 u2, u3, u2} (MonoidWithZeroHom.{u3, u2} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidWithZeroHom.monoidWithZeroHomClass.{u3, u2} M N _inst_1 _inst_2)))) f x))
 Case conversion may be inaccurate. Consider using '#align monoid_with_zero_hom.comp_apply MonoidWithZeroHom.comp_applyₓ'. -/
 theorem MonoidWithZeroHom.comp_apply [MulZeroOneClass M] [MulZeroOneClass N] [MulZeroOneClass P]
     (g : N →*₀ P) (f : M →*₀ N) (x : M) : g.comp f x = g (f x) :=
@@ -1833,7 +1833,7 @@ theorem MonoidWithZeroHom.comp_assoc {Q : Type _} [MulZeroOneClass M] [MulZeroOn
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} {P : Type.{u3}} [_inst_1 : One.{u1} M] [_inst_2 : One.{u2} N] [_inst_3 : One.{u3} P] {g₁ : OneHom.{u2, u3} N P _inst_2 _inst_3} {g₂ : OneHom.{u2, u3} N P _inst_2 _inst_3} {f : OneHom.{u1, u2} M N _inst_1 _inst_2}, (Function.Surjective.{succ u1, succ u2} M N (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (OneHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : OneHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (OneHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f)) -> (Iff (Eq.{max (succ u3) (succ u1)} (OneHom.{u1, u3} M P _inst_1 _inst_3) (OneHom.comp.{u1, u2, u3} M N P _inst_1 _inst_2 _inst_3 g₁ f) (OneHom.comp.{u1, u2, u3} M N P _inst_1 _inst_2 _inst_3 g₂ f)) (Eq.{max (succ u3) (succ u2)} (OneHom.{u2, u3} N P _inst_2 _inst_3) g₁ g₂))
 but is expected to have type
-  forall {M : Type.{u3}} {N : Type.{u2}} {P : Type.{u1}} [_inst_1 : One.{u3} M] [_inst_2 : One.{u2} N] [_inst_3 : One.{u1} P] {g₁ : OneHom.{u2, u1} N P _inst_2 _inst_3} {g₂ : OneHom.{u2, u1} N P _inst_2 _inst_3} {f : OneHom.{u3, u2} M N _inst_1 _inst_2}, (Function.Surjective.{succ u3, succ u2} M N (FunLike.coe.{max (succ u3) (succ u2), succ u3, succ u2} (OneHom.{u3, u2} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1262 : M) => N) _x) (OneHomClass.toFunLike.{max u3 u2, u3, u2} (OneHom.{u3, u2} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (OneHom.oneHomClass.{u3, u2} M N _inst_1 _inst_2)) f)) -> (Iff (Eq.{max (succ u3) (succ u1)} (OneHom.{u3, u1} M P _inst_1 _inst_3) (OneHom.comp.{u3, u2, u1} M N P _inst_1 _inst_2 _inst_3 g₁ f) (OneHom.comp.{u3, u2, u1} M N P _inst_1 _inst_2 _inst_3 g₂ f)) (Eq.{max (succ u2) (succ u1)} (OneHom.{u2, u1} N P _inst_2 _inst_3) g₁ g₂))
+  forall {M : Type.{u3}} {N : Type.{u2}} {P : Type.{u1}} [_inst_1 : One.{u3} M] [_inst_2 : One.{u2} N] [_inst_3 : One.{u1} P] {g₁ : OneHom.{u2, u1} N P _inst_2 _inst_3} {g₂ : OneHom.{u2, u1} N P _inst_2 _inst_3} {f : OneHom.{u3, u2} M N _inst_1 _inst_2}, (Function.Surjective.{succ u3, succ u2} M N (FunLike.coe.{max (succ u3) (succ u2), succ u3, succ u2} (OneHom.{u3, u2} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1264 : M) => N) _x) (OneHomClass.toFunLike.{max u3 u2, u3, u2} (OneHom.{u3, u2} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (OneHom.oneHomClass.{u3, u2} M N _inst_1 _inst_2)) f)) -> (Iff (Eq.{max (succ u3) (succ u1)} (OneHom.{u3, u1} M P _inst_1 _inst_3) (OneHom.comp.{u3, u2, u1} M N P _inst_1 _inst_2 _inst_3 g₁ f) (OneHom.comp.{u3, u2, u1} M N P _inst_1 _inst_2 _inst_3 g₂ f)) (Eq.{max (succ u2) (succ u1)} (OneHom.{u2, u1} N P _inst_2 _inst_3) g₁ g₂))
 Case conversion may be inaccurate. Consider using '#align one_hom.cancel_right OneHom.cancel_rightₓ'. -/
 @[to_additive]
 theorem OneHom.cancel_right [One M] [One N] [One P] {g₁ g₂ : OneHom N P} {f : OneHom M N}
@@ -1846,7 +1846,7 @@ theorem OneHom.cancel_right [One M] [One N] [One P] {g₁ g₂ : OneHom N P} {f
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} {P : Type.{u3}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] [_inst_3 : Mul.{u3} P] {g₁ : MulHom.{u2, u3} N P _inst_2 _inst_3} {g₂ : MulHom.{u2, u3} N P _inst_2 _inst_3} {f : MulHom.{u1, u2} M N _inst_1 _inst_2}, (Function.Surjective.{succ u1, succ u2} M N (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MulHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MulHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MulHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f)) -> (Iff (Eq.{max (succ u3) (succ u1)} (MulHom.{u1, u3} M P _inst_1 _inst_3) (MulHom.comp.{u1, u2, u3} M N P _inst_1 _inst_2 _inst_3 g₁ f) (MulHom.comp.{u1, u2, u3} M N P _inst_1 _inst_2 _inst_3 g₂ f)) (Eq.{max (succ u3) (succ u2)} (MulHom.{u2, u3} N P _inst_2 _inst_3) g₁ g₂))
 but is expected to have type
-  forall {M : Type.{u3}} {N : Type.{u2}} {P : Type.{u1}} [_inst_1 : Mul.{u3} M] [_inst_2 : Mul.{u2} N] [_inst_3 : Mul.{u1} P] {g₁ : MulHom.{u2, u1} N P _inst_2 _inst_3} {g₂ : MulHom.{u2, u1} N P _inst_2 _inst_3} {f : MulHom.{u3, u2} M N _inst_1 _inst_2}, (Function.Surjective.{succ u3, succ u2} M N (FunLike.coe.{max (succ u3) (succ u2), succ u3, succ u2} (MulHom.{u3, u2} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{max u3 u2, u3, u2} (MulHom.{u3, u2} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u3, u2} M N _inst_1 _inst_2)) f)) -> (Iff (Eq.{max (succ u3) (succ u1)} (MulHom.{u3, u1} M P _inst_1 _inst_3) (MulHom.comp.{u3, u2, u1} M N P _inst_1 _inst_2 _inst_3 g₁ f) (MulHom.comp.{u3, u2, u1} M N P _inst_1 _inst_2 _inst_3 g₂ f)) (Eq.{max (succ u2) (succ u1)} (MulHom.{u2, u1} N P _inst_2 _inst_3) g₁ g₂))
+  forall {M : Type.{u3}} {N : Type.{u2}} {P : Type.{u1}} [_inst_1 : Mul.{u3} M] [_inst_2 : Mul.{u2} N] [_inst_3 : Mul.{u1} P] {g₁ : MulHom.{u2, u1} N P _inst_2 _inst_3} {g₂ : MulHom.{u2, u1} N P _inst_2 _inst_3} {f : MulHom.{u3, u2} M N _inst_1 _inst_2}, (Function.Surjective.{succ u3, succ u2} M N (FunLike.coe.{max (succ u3) (succ u2), succ u3, succ u2} (MulHom.{u3, u2} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{max u3 u2, u3, u2} (MulHom.{u3, u2} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u3, u2} M N _inst_1 _inst_2)) f)) -> (Iff (Eq.{max (succ u3) (succ u1)} (MulHom.{u3, u1} M P _inst_1 _inst_3) (MulHom.comp.{u3, u2, u1} M N P _inst_1 _inst_2 _inst_3 g₁ f) (MulHom.comp.{u3, u2, u1} M N P _inst_1 _inst_2 _inst_3 g₂ f)) (Eq.{max (succ u2) (succ u1)} (MulHom.{u2, u1} N P _inst_2 _inst_3) g₁ g₂))
 Case conversion may be inaccurate. Consider using '#align mul_hom.cancel_right MulHom.cancel_rightₓ'. -/
 @[to_additive]
 theorem MulHom.cancel_right [Mul M] [Mul N] [Mul P] {g₁ g₂ : N →ₙ* P} {f : M →ₙ* N}
@@ -1859,7 +1859,7 @@ theorem MulHom.cancel_right [Mul M] [Mul N] [Mul P] {g₁ g₂ : N →ₙ* P} {f
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} {P : Type.{u3}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N] [_inst_3 : MulOneClass.{u3} P] {g₁ : MonoidHom.{u2, u3} N P _inst_2 _inst_3} {g₂ : MonoidHom.{u2, u3} N P _inst_2 _inst_3} {f : MonoidHom.{u1, u2} M N _inst_1 _inst_2}, (Function.Surjective.{succ u1, succ u2} M N (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MonoidHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MonoidHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f)) -> (Iff (Eq.{max (succ u3) (succ u1)} (MonoidHom.{u1, u3} M P _inst_1 _inst_3) (MonoidHom.comp.{u1, u2, u3} M N P _inst_1 _inst_2 _inst_3 g₁ f) (MonoidHom.comp.{u1, u2, u3} M N P _inst_1 _inst_2 _inst_3 g₂ f)) (Eq.{max (succ u3) (succ u2)} (MonoidHom.{u2, u3} N P _inst_2 _inst_3) g₁ g₂))
 but is expected to have type
-  forall {M : Type.{u3}} {N : Type.{u2}} {P : Type.{u1}} [_inst_1 : MulOneClass.{u3} M] [_inst_2 : MulOneClass.{u2} N] [_inst_3 : MulOneClass.{u1} P] {g₁ : MonoidHom.{u2, u1} N P _inst_2 _inst_3} {g₂ : MonoidHom.{u2, u1} N P _inst_2 _inst_3} {f : MonoidHom.{u3, u2} M N _inst_1 _inst_2}, (Function.Surjective.{succ u3, succ u2} M N (FunLike.coe.{max (succ u3) (succ u2), succ u3, succ u2} (MonoidHom.{u3, u2} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{max u3 u2, u3, u2} (MonoidHom.{u3, u2} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u3} M _inst_1) (MulOneClass.toMul.{u2} N _inst_2) (MonoidHomClass.toMulHomClass.{max u3 u2, u3, u2} (MonoidHom.{u3, u2} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidHom.monoidHomClass.{u3, u2} M N _inst_1 _inst_2))) f)) -> (Iff (Eq.{max (succ u3) (succ u1)} (MonoidHom.{u3, u1} M P _inst_1 _inst_3) (MonoidHom.comp.{u3, u2, u1} M N P _inst_1 _inst_2 _inst_3 g₁ f) (MonoidHom.comp.{u3, u2, u1} M N P _inst_1 _inst_2 _inst_3 g₂ f)) (Eq.{max (succ u2) (succ u1)} (MonoidHom.{u2, u1} N P _inst_2 _inst_3) g₁ g₂))
+  forall {M : Type.{u3}} {N : Type.{u2}} {P : Type.{u1}} [_inst_1 : MulOneClass.{u3} M] [_inst_2 : MulOneClass.{u2} N] [_inst_3 : MulOneClass.{u1} P] {g₁ : MonoidHom.{u2, u1} N P _inst_2 _inst_3} {g₂ : MonoidHom.{u2, u1} N P _inst_2 _inst_3} {f : MonoidHom.{u3, u2} M N _inst_1 _inst_2}, (Function.Surjective.{succ u3, succ u2} M N (FunLike.coe.{max (succ u3) (succ u2), succ u3, succ u2} (MonoidHom.{u3, u2} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{max u3 u2, u3, u2} (MonoidHom.{u3, u2} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u3} M _inst_1) (MulOneClass.toMul.{u2} N _inst_2) (MonoidHomClass.toMulHomClass.{max u3 u2, u3, u2} (MonoidHom.{u3, u2} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidHom.monoidHomClass.{u3, u2} M N _inst_1 _inst_2))) f)) -> (Iff (Eq.{max (succ u3) (succ u1)} (MonoidHom.{u3, u1} M P _inst_1 _inst_3) (MonoidHom.comp.{u3, u2, u1} M N P _inst_1 _inst_2 _inst_3 g₁ f) (MonoidHom.comp.{u3, u2, u1} M N P _inst_1 _inst_2 _inst_3 g₂ f)) (Eq.{max (succ u2) (succ u1)} (MonoidHom.{u2, u1} N P _inst_2 _inst_3) g₁ g₂))
 Case conversion may be inaccurate. Consider using '#align monoid_hom.cancel_right MonoidHom.cancel_rightₓ'. -/
 @[to_additive]
 theorem MonoidHom.cancel_right [MulOneClass M] [MulOneClass N] [MulOneClass P] {g₁ g₂ : N →* P}
@@ -1872,7 +1872,7 @@ theorem MonoidHom.cancel_right [MulOneClass M] [MulOneClass N] [MulOneClass P] {
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} {P : Type.{u3}} [_inst_1 : MulZeroOneClass.{u1} M] [_inst_2 : MulZeroOneClass.{u2} N] [_inst_3 : MulZeroOneClass.{u3} P] {g₁ : MonoidWithZeroHom.{u2, u3} N P _inst_2 _inst_3} {g₂ : MonoidWithZeroHom.{u2, u3} N P _inst_2 _inst_3} {f : MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2}, (Function.Surjective.{succ u1, succ u2} M N (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MonoidWithZeroHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f)) -> (Iff (Eq.{max (succ u3) (succ u1)} (MonoidWithZeroHom.{u1, u3} M P _inst_1 _inst_3) (MonoidWithZeroHom.comp.{u1, u2, u3} M N P _inst_1 _inst_2 _inst_3 g₁ f) (MonoidWithZeroHom.comp.{u1, u2, u3} M N P _inst_1 _inst_2 _inst_3 g₂ f)) (Eq.{max (succ u3) (succ u2)} (MonoidWithZeroHom.{u2, u3} N P _inst_2 _inst_3) g₁ g₂))
 but is expected to have type
-  forall {M : Type.{u3}} {N : Type.{u2}} {P : Type.{u1}} [_inst_1 : MulZeroOneClass.{u3} M] [_inst_2 : MulZeroOneClass.{u2} N] [_inst_3 : MulZeroOneClass.{u1} P] {g₁ : MonoidWithZeroHom.{u2, u1} N P _inst_2 _inst_3} {g₂ : MonoidWithZeroHom.{u2, u1} N P _inst_2 _inst_3} {f : MonoidWithZeroHom.{u3, u2} M N _inst_1 _inst_2}, (Function.Surjective.{succ u3, succ u2} M N (FunLike.coe.{max (succ u3) (succ u2), succ u3, succ u2} (MonoidWithZeroHom.{u3, u2} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{max u3 u2, u3, u2} (MonoidWithZeroHom.{u3, u2} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u3} M (MulZeroOneClass.toMulOneClass.{u3} M _inst_1)) (MulOneClass.toMul.{u2} N (MulZeroOneClass.toMulOneClass.{u2} N _inst_2)) (MonoidHomClass.toMulHomClass.{max u3 u2, u3, u2} (MonoidWithZeroHom.{u3, u2} M N _inst_1 _inst_2) M N (MulZeroOneClass.toMulOneClass.{u3} M _inst_1) (MulZeroOneClass.toMulOneClass.{u2} N _inst_2) (MonoidWithZeroHomClass.toMonoidHomClass.{max u3 u2, u3, u2} (MonoidWithZeroHom.{u3, u2} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidWithZeroHom.monoidWithZeroHomClass.{u3, u2} M N _inst_1 _inst_2)))) f)) -> (Iff (Eq.{max (succ u3) (succ u1)} (MonoidWithZeroHom.{u3, u1} M P _inst_1 _inst_3) (MonoidWithZeroHom.comp.{u3, u2, u1} M N P _inst_1 _inst_2 _inst_3 g₁ f) (MonoidWithZeroHom.comp.{u3, u2, u1} M N P _inst_1 _inst_2 _inst_3 g₂ f)) (Eq.{max (succ u2) (succ u1)} (MonoidWithZeroHom.{u2, u1} N P _inst_2 _inst_3) g₁ g₂))
+  forall {M : Type.{u3}} {N : Type.{u2}} {P : Type.{u1}} [_inst_1 : MulZeroOneClass.{u3} M] [_inst_2 : MulZeroOneClass.{u2} N] [_inst_3 : MulZeroOneClass.{u1} P] {g₁ : MonoidWithZeroHom.{u2, u1} N P _inst_2 _inst_3} {g₂ : MonoidWithZeroHom.{u2, u1} N P _inst_2 _inst_3} {f : MonoidWithZeroHom.{u3, u2} M N _inst_1 _inst_2}, (Function.Surjective.{succ u3, succ u2} M N (FunLike.coe.{max (succ u3) (succ u2), succ u3, succ u2} (MonoidWithZeroHom.{u3, u2} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{max u3 u2, u3, u2} (MonoidWithZeroHom.{u3, u2} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u3} M (MulZeroOneClass.toMulOneClass.{u3} M _inst_1)) (MulOneClass.toMul.{u2} N (MulZeroOneClass.toMulOneClass.{u2} N _inst_2)) (MonoidHomClass.toMulHomClass.{max u3 u2, u3, u2} (MonoidWithZeroHom.{u3, u2} M N _inst_1 _inst_2) M N (MulZeroOneClass.toMulOneClass.{u3} M _inst_1) (MulZeroOneClass.toMulOneClass.{u2} N _inst_2) (MonoidWithZeroHomClass.toMonoidHomClass.{max u3 u2, u3, u2} (MonoidWithZeroHom.{u3, u2} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidWithZeroHom.monoidWithZeroHomClass.{u3, u2} M N _inst_1 _inst_2)))) f)) -> (Iff (Eq.{max (succ u3) (succ u1)} (MonoidWithZeroHom.{u3, u1} M P _inst_1 _inst_3) (MonoidWithZeroHom.comp.{u3, u2, u1} M N P _inst_1 _inst_2 _inst_3 g₁ f) (MonoidWithZeroHom.comp.{u3, u2, u1} M N P _inst_1 _inst_2 _inst_3 g₂ f)) (Eq.{max (succ u2) (succ u1)} (MonoidWithZeroHom.{u2, u1} N P _inst_2 _inst_3) g₁ g₂))
 Case conversion may be inaccurate. Consider using '#align monoid_with_zero_hom.cancel_right MonoidWithZeroHom.cancel_rightₓ'. -/
 theorem MonoidWithZeroHom.cancel_right [MulZeroOneClass M] [MulZeroOneClass N] [MulZeroOneClass P]
     {g₁ g₂ : N →*₀ P} {f : M →*₀ N} (hf : Function.Surjective f) :
@@ -1884,7 +1884,7 @@ theorem MonoidWithZeroHom.cancel_right [MulZeroOneClass M] [MulZeroOneClass N] [
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} {P : Type.{u3}} [_inst_1 : One.{u1} M] [_inst_2 : One.{u2} N] [_inst_3 : One.{u3} P] {g : OneHom.{u2, u3} N P _inst_2 _inst_3} {f₁ : OneHom.{u1, u2} M N _inst_1 _inst_2} {f₂ : OneHom.{u1, u2} M N _inst_1 _inst_2}, (Function.Injective.{succ u2, succ u3} N P (coeFn.{max (succ u3) (succ u2), max (succ u2) (succ u3)} (OneHom.{u2, u3} N P _inst_2 _inst_3) (fun (_x : OneHom.{u2, u3} N P _inst_2 _inst_3) => N -> P) (OneHom.hasCoeToFun.{u2, u3} N P _inst_2 _inst_3) g)) -> (Iff (Eq.{max (succ u3) (succ u1)} (OneHom.{u1, u3} M P _inst_1 _inst_3) (OneHom.comp.{u1, u2, u3} M N P _inst_1 _inst_2 _inst_3 g f₁) (OneHom.comp.{u1, u2, u3} M N P _inst_1 _inst_2 _inst_3 g f₂)) (Eq.{max (succ u2) (succ u1)} (OneHom.{u1, u2} M N _inst_1 _inst_2) f₁ f₂))
 but is expected to have type
-  forall {M : Type.{u3}} {N : Type.{u2}} {P : Type.{u1}} [_inst_1 : One.{u3} M] [_inst_2 : One.{u2} N] [_inst_3 : One.{u1} P] {g : OneHom.{u2, u1} N P _inst_2 _inst_3} {f₁ : OneHom.{u3, u2} M N _inst_1 _inst_2} {f₂ : OneHom.{u3, u2} M N _inst_1 _inst_2}, (Function.Injective.{succ u2, succ u1} N P (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (OneHom.{u2, u1} N P _inst_2 _inst_3) N (fun (_x : N) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1262 : N) => P) _x) (OneHomClass.toFunLike.{max u2 u1, u2, u1} (OneHom.{u2, u1} N P _inst_2 _inst_3) N P _inst_2 _inst_3 (OneHom.oneHomClass.{u2, u1} N P _inst_2 _inst_3)) g)) -> (Iff (Eq.{max (succ u3) (succ u1)} (OneHom.{u3, u1} M P _inst_1 _inst_3) (OneHom.comp.{u3, u2, u1} M N P _inst_1 _inst_2 _inst_3 g f₁) (OneHom.comp.{u3, u2, u1} M N P _inst_1 _inst_2 _inst_3 g f₂)) (Eq.{max (succ u3) (succ u2)} (OneHom.{u3, u2} M N _inst_1 _inst_2) f₁ f₂))
+  forall {M : Type.{u3}} {N : Type.{u2}} {P : Type.{u1}} [_inst_1 : One.{u3} M] [_inst_2 : One.{u2} N] [_inst_3 : One.{u1} P] {g : OneHom.{u2, u1} N P _inst_2 _inst_3} {f₁ : OneHom.{u3, u2} M N _inst_1 _inst_2} {f₂ : OneHom.{u3, u2} M N _inst_1 _inst_2}, (Function.Injective.{succ u2, succ u1} N P (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (OneHom.{u2, u1} N P _inst_2 _inst_3) N (fun (_x : N) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1264 : N) => P) _x) (OneHomClass.toFunLike.{max u2 u1, u2, u1} (OneHom.{u2, u1} N P _inst_2 _inst_3) N P _inst_2 _inst_3 (OneHom.oneHomClass.{u2, u1} N P _inst_2 _inst_3)) g)) -> (Iff (Eq.{max (succ u3) (succ u1)} (OneHom.{u3, u1} M P _inst_1 _inst_3) (OneHom.comp.{u3, u2, u1} M N P _inst_1 _inst_2 _inst_3 g f₁) (OneHom.comp.{u3, u2, u1} M N P _inst_1 _inst_2 _inst_3 g f₂)) (Eq.{max (succ u3) (succ u2)} (OneHom.{u3, u2} M N _inst_1 _inst_2) f₁ f₂))
 Case conversion may be inaccurate. Consider using '#align one_hom.cancel_left OneHom.cancel_leftₓ'. -/
 @[to_additive]
 theorem OneHom.cancel_left [One M] [One N] [One P] {g : OneHom N P} {f₁ f₂ : OneHom M N}
@@ -1898,7 +1898,7 @@ theorem OneHom.cancel_left [One M] [One N] [One P] {g : OneHom N P} {f₁ f₂ :
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} {P : Type.{u3}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] [_inst_3 : Mul.{u3} P] {g : MulHom.{u2, u3} N P _inst_2 _inst_3} {f₁ : MulHom.{u1, u2} M N _inst_1 _inst_2} {f₂ : MulHom.{u1, u2} M N _inst_1 _inst_2}, (Function.Injective.{succ u2, succ u3} N P (coeFn.{max (succ u3) (succ u2), max (succ u2) (succ u3)} (MulHom.{u2, u3} N P _inst_2 _inst_3) (fun (_x : MulHom.{u2, u3} N P _inst_2 _inst_3) => N -> P) (MulHom.hasCoeToFun.{u2, u3} N P _inst_2 _inst_3) g)) -> (Iff (Eq.{max (succ u3) (succ u1)} (MulHom.{u1, u3} M P _inst_1 _inst_3) (MulHom.comp.{u1, u2, u3} M N P _inst_1 _inst_2 _inst_3 g f₁) (MulHom.comp.{u1, u2, u3} M N P _inst_1 _inst_2 _inst_3 g f₂)) (Eq.{max (succ u2) (succ u1)} (MulHom.{u1, u2} M N _inst_1 _inst_2) f₁ f₂))
 but is expected to have type
-  forall {M : Type.{u3}} {N : Type.{u2}} {P : Type.{u1}} [_inst_1 : Mul.{u3} M] [_inst_2 : Mul.{u2} N] [_inst_3 : Mul.{u1} P] {g : MulHom.{u2, u1} N P _inst_2 _inst_3} {f₁ : MulHom.{u3, u2} M N _inst_1 _inst_2} {f₂ : MulHom.{u3, u2} M N _inst_1 _inst_2}, (Function.Injective.{succ u2, succ u1} N P (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} N P _inst_2 _inst_3) N (fun (_x : N) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : N) => P) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} N P _inst_2 _inst_3) N P _inst_2 _inst_3 (MulHom.mulHomClass.{u2, u1} N P _inst_2 _inst_3)) g)) -> (Iff (Eq.{max (succ u3) (succ u1)} (MulHom.{u3, u1} M P _inst_1 _inst_3) (MulHom.comp.{u3, u2, u1} M N P _inst_1 _inst_2 _inst_3 g f₁) (MulHom.comp.{u3, u2, u1} M N P _inst_1 _inst_2 _inst_3 g f₂)) (Eq.{max (succ u3) (succ u2)} (MulHom.{u3, u2} M N _inst_1 _inst_2) f₁ f₂))
+  forall {M : Type.{u3}} {N : Type.{u2}} {P : Type.{u1}} [_inst_1 : Mul.{u3} M] [_inst_2 : Mul.{u2} N] [_inst_3 : Mul.{u1} P] {g : MulHom.{u2, u1} N P _inst_2 _inst_3} {f₁ : MulHom.{u3, u2} M N _inst_1 _inst_2} {f₂ : MulHom.{u3, u2} M N _inst_1 _inst_2}, (Function.Injective.{succ u2, succ u1} N P (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} N P _inst_2 _inst_3) N (fun (_x : N) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : N) => P) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} N P _inst_2 _inst_3) N P _inst_2 _inst_3 (MulHom.mulHomClass.{u2, u1} N P _inst_2 _inst_3)) g)) -> (Iff (Eq.{max (succ u3) (succ u1)} (MulHom.{u3, u1} M P _inst_1 _inst_3) (MulHom.comp.{u3, u2, u1} M N P _inst_1 _inst_2 _inst_3 g f₁) (MulHom.comp.{u3, u2, u1} M N P _inst_1 _inst_2 _inst_3 g f₂)) (Eq.{max (succ u3) (succ u2)} (MulHom.{u3, u2} M N _inst_1 _inst_2) f₁ f₂))
 Case conversion may be inaccurate. Consider using '#align mul_hom.cancel_left MulHom.cancel_leftₓ'. -/
 @[to_additive]
 theorem MulHom.cancel_left [Mul M] [Mul N] [Mul P] {g : N →ₙ* P} {f₁ f₂ : M →ₙ* N}
@@ -1912,7 +1912,7 @@ theorem MulHom.cancel_left [Mul M] [Mul N] [Mul P] {g : N →ₙ* P} {f₁ f₂
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} {P : Type.{u3}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N] [_inst_3 : MulOneClass.{u3} P] {g : MonoidHom.{u2, u3} N P _inst_2 _inst_3} {f₁ : MonoidHom.{u1, u2} M N _inst_1 _inst_2} {f₂ : MonoidHom.{u1, u2} M N _inst_1 _inst_2}, (Function.Injective.{succ u2, succ u3} N P (coeFn.{max (succ u3) (succ u2), max (succ u2) (succ u3)} (MonoidHom.{u2, u3} N P _inst_2 _inst_3) (fun (_x : MonoidHom.{u2, u3} N P _inst_2 _inst_3) => N -> P) (MonoidHom.hasCoeToFun.{u2, u3} N P _inst_2 _inst_3) g)) -> (Iff (Eq.{max (succ u3) (succ u1)} (MonoidHom.{u1, u3} M P _inst_1 _inst_3) (MonoidHom.comp.{u1, u2, u3} M N P _inst_1 _inst_2 _inst_3 g f₁) (MonoidHom.comp.{u1, u2, u3} M N P _inst_1 _inst_2 _inst_3 g f₂)) (Eq.{max (succ u2) (succ u1)} (MonoidHom.{u1, u2} M N _inst_1 _inst_2) f₁ f₂))
 but is expected to have type
-  forall {M : Type.{u3}} {N : Type.{u2}} {P : Type.{u1}} [_inst_1 : MulOneClass.{u3} M] [_inst_2 : MulOneClass.{u2} N] [_inst_3 : MulOneClass.{u1} P] {g : MonoidHom.{u2, u1} N P _inst_2 _inst_3} {f₁ : MonoidHom.{u3, u2} M N _inst_1 _inst_2} {f₂ : MonoidHom.{u3, u2} M N _inst_1 _inst_2}, (Function.Injective.{succ u2, succ u1} N P (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} N P _inst_2 _inst_3) N (fun (_x : N) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : N) => P) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} N P _inst_2 _inst_3) N P (MulOneClass.toMul.{u2} N _inst_2) (MulOneClass.toMul.{u1} P _inst_3) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} N P _inst_2 _inst_3) N P _inst_2 _inst_3 (MonoidHom.monoidHomClass.{u2, u1} N P _inst_2 _inst_3))) g)) -> (Iff (Eq.{max (succ u3) (succ u1)} (MonoidHom.{u3, u1} M P _inst_1 _inst_3) (MonoidHom.comp.{u3, u2, u1} M N P _inst_1 _inst_2 _inst_3 g f₁) (MonoidHom.comp.{u3, u2, u1} M N P _inst_1 _inst_2 _inst_3 g f₂)) (Eq.{max (succ u3) (succ u2)} (MonoidHom.{u3, u2} M N _inst_1 _inst_2) f₁ f₂))
+  forall {M : Type.{u3}} {N : Type.{u2}} {P : Type.{u1}} [_inst_1 : MulOneClass.{u3} M] [_inst_2 : MulOneClass.{u2} N] [_inst_3 : MulOneClass.{u1} P] {g : MonoidHom.{u2, u1} N P _inst_2 _inst_3} {f₁ : MonoidHom.{u3, u2} M N _inst_1 _inst_2} {f₂ : MonoidHom.{u3, u2} M N _inst_1 _inst_2}, (Function.Injective.{succ u2, succ u1} N P (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} N P _inst_2 _inst_3) N (fun (_x : N) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : N) => P) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} N P _inst_2 _inst_3) N P (MulOneClass.toMul.{u2} N _inst_2) (MulOneClass.toMul.{u1} P _inst_3) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} N P _inst_2 _inst_3) N P _inst_2 _inst_3 (MonoidHom.monoidHomClass.{u2, u1} N P _inst_2 _inst_3))) g)) -> (Iff (Eq.{max (succ u3) (succ u1)} (MonoidHom.{u3, u1} M P _inst_1 _inst_3) (MonoidHom.comp.{u3, u2, u1} M N P _inst_1 _inst_2 _inst_3 g f₁) (MonoidHom.comp.{u3, u2, u1} M N P _inst_1 _inst_2 _inst_3 g f₂)) (Eq.{max (succ u3) (succ u2)} (MonoidHom.{u3, u2} M N _inst_1 _inst_2) f₁ f₂))
 Case conversion may be inaccurate. Consider using '#align monoid_hom.cancel_left MonoidHom.cancel_leftₓ'. -/
 @[to_additive]
 theorem MonoidHom.cancel_left [MulOneClass M] [MulOneClass N] [MulOneClass P] {g : N →* P}
@@ -1926,7 +1926,7 @@ theorem MonoidHom.cancel_left [MulOneClass M] [MulOneClass N] [MulOneClass P] {g
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} {P : Type.{u3}} [_inst_1 : MulZeroOneClass.{u1} M] [_inst_2 : MulZeroOneClass.{u2} N] [_inst_3 : MulZeroOneClass.{u3} P] {g : MonoidWithZeroHom.{u2, u3} N P _inst_2 _inst_3} {f₁ : MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2} {f₂ : MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2}, (Function.Injective.{succ u2, succ u3} N P (coeFn.{max (succ u3) (succ u2), max (succ u2) (succ u3)} (MonoidWithZeroHom.{u2, u3} N P _inst_2 _inst_3) (fun (_x : MonoidWithZeroHom.{u2, u3} N P _inst_2 _inst_3) => N -> P) (MonoidWithZeroHom.hasCoeToFun.{u2, u3} N P _inst_2 _inst_3) g)) -> (Iff (Eq.{max (succ u3) (succ u1)} (MonoidWithZeroHom.{u1, u3} M P _inst_1 _inst_3) (MonoidWithZeroHom.comp.{u1, u2, u3} M N P _inst_1 _inst_2 _inst_3 g f₁) (MonoidWithZeroHom.comp.{u1, u2, u3} M N P _inst_1 _inst_2 _inst_3 g f₂)) (Eq.{max (succ u2) (succ u1)} (MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) f₁ f₂))
 but is expected to have type
-  forall {M : Type.{u3}} {N : Type.{u2}} {P : Type.{u1}} [_inst_1 : MulZeroOneClass.{u3} M] [_inst_2 : MulZeroOneClass.{u2} N] [_inst_3 : MulZeroOneClass.{u1} P] {g : MonoidWithZeroHom.{u2, u1} N P _inst_2 _inst_3} {f₁ : MonoidWithZeroHom.{u3, u2} M N _inst_1 _inst_2} {f₂ : MonoidWithZeroHom.{u3, u2} M N _inst_1 _inst_2}, (Function.Injective.{succ u2, succ u1} N P (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidWithZeroHom.{u2, u1} N P _inst_2 _inst_3) N (fun (_x : N) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : N) => P) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} N P _inst_2 _inst_3) N P (MulOneClass.toMul.{u2} N (MulZeroOneClass.toMulOneClass.{u2} N _inst_2)) (MulOneClass.toMul.{u1} P (MulZeroOneClass.toMulOneClass.{u1} P _inst_3)) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} N P _inst_2 _inst_3) N P (MulZeroOneClass.toMulOneClass.{u2} N _inst_2) (MulZeroOneClass.toMulOneClass.{u1} P _inst_3) (MonoidWithZeroHomClass.toMonoidHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} N P _inst_2 _inst_3) N P _inst_2 _inst_3 (MonoidWithZeroHom.monoidWithZeroHomClass.{u2, u1} N P _inst_2 _inst_3)))) g)) -> (Iff (Eq.{max (succ u3) (succ u1)} (MonoidWithZeroHom.{u3, u1} M P _inst_1 _inst_3) (MonoidWithZeroHom.comp.{u3, u2, u1} M N P _inst_1 _inst_2 _inst_3 g f₁) (MonoidWithZeroHom.comp.{u3, u2, u1} M N P _inst_1 _inst_2 _inst_3 g f₂)) (Eq.{max (succ u3) (succ u2)} (MonoidWithZeroHom.{u3, u2} M N _inst_1 _inst_2) f₁ f₂))
+  forall {M : Type.{u3}} {N : Type.{u2}} {P : Type.{u1}} [_inst_1 : MulZeroOneClass.{u3} M] [_inst_2 : MulZeroOneClass.{u2} N] [_inst_3 : MulZeroOneClass.{u1} P] {g : MonoidWithZeroHom.{u2, u1} N P _inst_2 _inst_3} {f₁ : MonoidWithZeroHom.{u3, u2} M N _inst_1 _inst_2} {f₂ : MonoidWithZeroHom.{u3, u2} M N _inst_1 _inst_2}, (Function.Injective.{succ u2, succ u1} N P (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidWithZeroHom.{u2, u1} N P _inst_2 _inst_3) N (fun (_x : N) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : N) => P) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} N P _inst_2 _inst_3) N P (MulOneClass.toMul.{u2} N (MulZeroOneClass.toMulOneClass.{u2} N _inst_2)) (MulOneClass.toMul.{u1} P (MulZeroOneClass.toMulOneClass.{u1} P _inst_3)) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} N P _inst_2 _inst_3) N P (MulZeroOneClass.toMulOneClass.{u2} N _inst_2) (MulZeroOneClass.toMulOneClass.{u1} P _inst_3) (MonoidWithZeroHomClass.toMonoidHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} N P _inst_2 _inst_3) N P _inst_2 _inst_3 (MonoidWithZeroHom.monoidWithZeroHomClass.{u2, u1} N P _inst_2 _inst_3)))) g)) -> (Iff (Eq.{max (succ u3) (succ u1)} (MonoidWithZeroHom.{u3, u1} M P _inst_1 _inst_3) (MonoidWithZeroHom.comp.{u3, u2, u1} M N P _inst_1 _inst_2 _inst_3 g f₁) (MonoidWithZeroHom.comp.{u3, u2, u1} M N P _inst_1 _inst_2 _inst_3 g f₂)) (Eq.{max (succ u3) (succ u2)} (MonoidWithZeroHom.{u3, u2} M N _inst_1 _inst_2) f₁ f₂))
 Case conversion may be inaccurate. Consider using '#align monoid_with_zero_hom.cancel_left MonoidWithZeroHom.cancel_leftₓ'. -/
 theorem MonoidWithZeroHom.cancel_left [MulZeroOneClass M] [MulZeroOneClass N] [MulZeroOneClass P]
     {g : N →*₀ P} {f₁ f₂ : M →*₀ N} (hg : Function.Injective g) : g.comp f₁ = g.comp f₂ ↔ f₁ = f₂ :=
@@ -2086,7 +2086,7 @@ theorem MonoidWithZeroHom.id_comp [MulZeroOneClass M] [MulZeroOneClass N] (f : M
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Monoid.{u1} M] [_inst_2 : Monoid.{u2} N] (f : MonoidHom.{u1, u2} M N (Monoid.toMulOneClass.{u1} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2)) (a : M) (n : Nat), Eq.{succ u2} N (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} M N (Monoid.toMulOneClass.{u1} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2)) (fun (_x : MonoidHom.{u1, u2} M N (Monoid.toMulOneClass.{u1} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2)) => M -> N) (MonoidHom.hasCoeToFun.{u1, u2} M N (Monoid.toMulOneClass.{u1} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2)) f (HPow.hPow.{u1, 0, u1} M Nat M (instHPow.{u1, 0} M Nat (Monoid.Pow.{u1} M _inst_1)) a n)) (HPow.hPow.{u2, 0, u2} N Nat N (instHPow.{u2, 0} N Nat (Monoid.Pow.{u2} N _inst_2)) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} M N (Monoid.toMulOneClass.{u1} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2)) (fun (_x : MonoidHom.{u1, u2} M N (Monoid.toMulOneClass.{u1} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2)) => M -> N) (MonoidHom.hasCoeToFun.{u1, u2} M N (Monoid.toMulOneClass.{u1} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2)) f a) n)
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : Monoid.{u2} M] [_inst_2 : Monoid.{u1} N] (f : MonoidHom.{u2, u1} M N (Monoid.toMulOneClass.{u2} M _inst_1) (Monoid.toMulOneClass.{u1} N _inst_2)) (a : M) (n : Nat), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) (HPow.hPow.{u2, 0, u2} M Nat M (instHPow.{u2, 0} M Nat (Monoid.Pow.{u2} M _inst_1)) a n)) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M N (Monoid.toMulOneClass.{u2} M _inst_1) (Monoid.toMulOneClass.{u1} N _inst_2)) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N (Monoid.toMulOneClass.{u2} M _inst_1) (Monoid.toMulOneClass.{u1} N _inst_2)) M N (MulOneClass.toMul.{u2} M (Monoid.toMulOneClass.{u2} M _inst_1)) (MulOneClass.toMul.{u1} N (Monoid.toMulOneClass.{u1} N _inst_2)) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N (Monoid.toMulOneClass.{u2} M _inst_1) (Monoid.toMulOneClass.{u1} N _inst_2)) M N (Monoid.toMulOneClass.{u2} M _inst_1) (Monoid.toMulOneClass.{u1} N _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N (Monoid.toMulOneClass.{u2} M _inst_1) (Monoid.toMulOneClass.{u1} N _inst_2)))) f (HPow.hPow.{u2, 0, u2} M Nat M (instHPow.{u2, 0} M Nat (Monoid.Pow.{u2} M _inst_1)) a n)) (HPow.hPow.{u1, 0, u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) a) Nat ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) a) (instHPow.{u1, 0} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) a) Nat (Monoid.Pow.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) a) _inst_2)) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M N (Monoid.toMulOneClass.{u2} M _inst_1) (Monoid.toMulOneClass.{u1} N _inst_2)) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N (Monoid.toMulOneClass.{u2} M _inst_1) (Monoid.toMulOneClass.{u1} N _inst_2)) M N (MulOneClass.toMul.{u2} M (Monoid.toMulOneClass.{u2} M _inst_1)) (MulOneClass.toMul.{u1} N (Monoid.toMulOneClass.{u1} N _inst_2)) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N (Monoid.toMulOneClass.{u2} M _inst_1) (Monoid.toMulOneClass.{u1} N _inst_2)) M N (Monoid.toMulOneClass.{u2} M _inst_1) (Monoid.toMulOneClass.{u1} N _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N (Monoid.toMulOneClass.{u2} M _inst_1) (Monoid.toMulOneClass.{u1} N _inst_2)))) f a) n)
+  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : Monoid.{u2} M] [_inst_2 : Monoid.{u1} N] (f : MonoidHom.{u2, u1} M N (Monoid.toMulOneClass.{u2} M _inst_1) (Monoid.toMulOneClass.{u1} N _inst_2)) (a : M) (n : Nat), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) (HPow.hPow.{u2, 0, u2} M Nat M (instHPow.{u2, 0} M Nat (Monoid.Pow.{u2} M _inst_1)) a n)) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M N (Monoid.toMulOneClass.{u2} M _inst_1) (Monoid.toMulOneClass.{u1} N _inst_2)) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N (Monoid.toMulOneClass.{u2} M _inst_1) (Monoid.toMulOneClass.{u1} N _inst_2)) M N (MulOneClass.toMul.{u2} M (Monoid.toMulOneClass.{u2} M _inst_1)) (MulOneClass.toMul.{u1} N (Monoid.toMulOneClass.{u1} N _inst_2)) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N (Monoid.toMulOneClass.{u2} M _inst_1) (Monoid.toMulOneClass.{u1} N _inst_2)) M N (Monoid.toMulOneClass.{u2} M _inst_1) (Monoid.toMulOneClass.{u1} N _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N (Monoid.toMulOneClass.{u2} M _inst_1) (Monoid.toMulOneClass.{u1} N _inst_2)))) f (HPow.hPow.{u2, 0, u2} M Nat M (instHPow.{u2, 0} M Nat (Monoid.Pow.{u2} M _inst_1)) a n)) (HPow.hPow.{u1, 0, u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) a) Nat ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) a) (instHPow.{u1, 0} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) a) Nat (Monoid.Pow.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) a) _inst_2)) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M N (Monoid.toMulOneClass.{u2} M _inst_1) (Monoid.toMulOneClass.{u1} N _inst_2)) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N (Monoid.toMulOneClass.{u2} M _inst_1) (Monoid.toMulOneClass.{u1} N _inst_2)) M N (MulOneClass.toMul.{u2} M (Monoid.toMulOneClass.{u2} M _inst_1)) (MulOneClass.toMul.{u1} N (Monoid.toMulOneClass.{u1} N _inst_2)) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N (Monoid.toMulOneClass.{u2} M _inst_1) (Monoid.toMulOneClass.{u1} N _inst_2)) M N (Monoid.toMulOneClass.{u2} M _inst_1) (Monoid.toMulOneClass.{u1} N _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N (Monoid.toMulOneClass.{u2} M _inst_1) (Monoid.toMulOneClass.{u1} N _inst_2)))) f a) n)
 Case conversion may be inaccurate. Consider using '#align monoid_hom.map_pow MonoidHom.map_powₓ'. -/
 @[to_additive AddMonoidHom.map_nsmul]
 protected theorem MonoidHom.map_pow [Monoid M] [Monoid N] (f : M →* N) (a : M) (n : ℕ) :
@@ -2099,7 +2099,7 @@ protected theorem MonoidHom.map_pow [Monoid M] [Monoid N] (f : M →* N) (a : M)
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : DivInvMonoid.{u1} M] [_inst_2 : DivInvMonoid.{u2} N] (f : MonoidHom.{u1, u2} M N (Monoid.toMulOneClass.{u1} M (DivInvMonoid.toMonoid.{u1} M _inst_1)) (Monoid.toMulOneClass.{u2} N (DivInvMonoid.toMonoid.{u2} N _inst_2))), (forall (x : M), Eq.{succ u2} N (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} M N (Monoid.toMulOneClass.{u1} M (DivInvMonoid.toMonoid.{u1} M _inst_1)) (Monoid.toMulOneClass.{u2} N (DivInvMonoid.toMonoid.{u2} N _inst_2))) (fun (_x : MonoidHom.{u1, u2} M N (Monoid.toMulOneClass.{u1} M (DivInvMonoid.toMonoid.{u1} M _inst_1)) (Monoid.toMulOneClass.{u2} N (DivInvMonoid.toMonoid.{u2} N _inst_2))) => M -> N) (MonoidHom.hasCoeToFun.{u1, u2} M N (Monoid.toMulOneClass.{u1} M (DivInvMonoid.toMonoid.{u1} M _inst_1)) (Monoid.toMulOneClass.{u2} N (DivInvMonoid.toMonoid.{u2} N _inst_2))) f (Inv.inv.{u1} M (DivInvMonoid.toHasInv.{u1} M _inst_1) x)) (Inv.inv.{u2} N (DivInvMonoid.toHasInv.{u2} N _inst_2) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} M N (Monoid.toMulOneClass.{u1} M (DivInvMonoid.toMonoid.{u1} M _inst_1)) (Monoid.toMulOneClass.{u2} N (DivInvMonoid.toMonoid.{u2} N _inst_2))) (fun (_x : MonoidHom.{u1, u2} M N (Monoid.toMulOneClass.{u1} M (DivInvMonoid.toMonoid.{u1} M _inst_1)) (Monoid.toMulOneClass.{u2} N (DivInvMonoid.toMonoid.{u2} N _inst_2))) => M -> N) (MonoidHom.hasCoeToFun.{u1, u2} M N (Monoid.toMulOneClass.{u1} M (DivInvMonoid.toMonoid.{u1} M _inst_1)) (Monoid.toMulOneClass.{u2} N (DivInvMonoid.toMonoid.{u2} N _inst_2))) f x))) -> (forall (a : M) (n : Int), Eq.{succ u2} N (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} M N (Monoid.toMulOneClass.{u1} M (DivInvMonoid.toMonoid.{u1} M _inst_1)) (Monoid.toMulOneClass.{u2} N (DivInvMonoid.toMonoid.{u2} N _inst_2))) (fun (_x : MonoidHom.{u1, u2} M N (Monoid.toMulOneClass.{u1} M (DivInvMonoid.toMonoid.{u1} M _inst_1)) (Monoid.toMulOneClass.{u2} N (DivInvMonoid.toMonoid.{u2} N _inst_2))) => M -> N) (MonoidHom.hasCoeToFun.{u1, u2} M N (Monoid.toMulOneClass.{u1} M (DivInvMonoid.toMonoid.{u1} M _inst_1)) (Monoid.toMulOneClass.{u2} N (DivInvMonoid.toMonoid.{u2} N _inst_2))) f (HPow.hPow.{u1, 0, u1} M Int M (instHPow.{u1, 0} M Int (DivInvMonoid.Pow.{u1} M _inst_1)) a n)) (HPow.hPow.{u2, 0, u2} N Int N (instHPow.{u2, 0} N Int (DivInvMonoid.Pow.{u2} N _inst_2)) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} M N (Monoid.toMulOneClass.{u1} M (DivInvMonoid.toMonoid.{u1} M _inst_1)) (Monoid.toMulOneClass.{u2} N (DivInvMonoid.toMonoid.{u2} N _inst_2))) (fun (_x : MonoidHom.{u1, u2} M N (Monoid.toMulOneClass.{u1} M (DivInvMonoid.toMonoid.{u1} M _inst_1)) (Monoid.toMulOneClass.{u2} N (DivInvMonoid.toMonoid.{u2} N _inst_2))) => M -> N) (MonoidHom.hasCoeToFun.{u1, u2} M N (Monoid.toMulOneClass.{u1} M (DivInvMonoid.toMonoid.{u1} M _inst_1)) (Monoid.toMulOneClass.{u2} N (DivInvMonoid.toMonoid.{u2} N _inst_2))) f a) n))
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : DivInvMonoid.{u2} M] [_inst_2 : DivInvMonoid.{u1} N] (f : MonoidHom.{u2, u1} M N (Monoid.toMulOneClass.{u2} M (DivInvMonoid.toMonoid.{u2} M _inst_1)) (Monoid.toMulOneClass.{u1} N (DivInvMonoid.toMonoid.{u1} N _inst_2))), (forall (x : M), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) (Inv.inv.{u2} M (DivInvMonoid.toInv.{u2} M _inst_1) x)) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M N (Monoid.toMulOneClass.{u2} M (DivInvMonoid.toMonoid.{u2} M _inst_1)) (Monoid.toMulOneClass.{u1} N (DivInvMonoid.toMonoid.{u1} N _inst_2))) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N (Monoid.toMulOneClass.{u2} M (DivInvMonoid.toMonoid.{u2} M _inst_1)) (Monoid.toMulOneClass.{u1} N (DivInvMonoid.toMonoid.{u1} N _inst_2))) M N (MulOneClass.toMul.{u2} M (Monoid.toMulOneClass.{u2} M (DivInvMonoid.toMonoid.{u2} M _inst_1))) (MulOneClass.toMul.{u1} N (Monoid.toMulOneClass.{u1} N (DivInvMonoid.toMonoid.{u1} N _inst_2))) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N (Monoid.toMulOneClass.{u2} M (DivInvMonoid.toMonoid.{u2} M _inst_1)) (Monoid.toMulOneClass.{u1} N (DivInvMonoid.toMonoid.{u1} N _inst_2))) M N (Monoid.toMulOneClass.{u2} M (DivInvMonoid.toMonoid.{u2} M _inst_1)) (Monoid.toMulOneClass.{u1} N (DivInvMonoid.toMonoid.{u1} N _inst_2)) (MonoidHom.monoidHomClass.{u2, u1} M N (Monoid.toMulOneClass.{u2} M (DivInvMonoid.toMonoid.{u2} M _inst_1)) (Monoid.toMulOneClass.{u1} N (DivInvMonoid.toMonoid.{u1} N _inst_2))))) f (Inv.inv.{u2} M (DivInvMonoid.toInv.{u2} M _inst_1) x)) (Inv.inv.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) x) (DivInvMonoid.toInv.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) x) _inst_2) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M N (Monoid.toMulOneClass.{u2} M (DivInvMonoid.toMonoid.{u2} M _inst_1)) (Monoid.toMulOneClass.{u1} N (DivInvMonoid.toMonoid.{u1} N _inst_2))) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N (Monoid.toMulOneClass.{u2} M (DivInvMonoid.toMonoid.{u2} M _inst_1)) (Monoid.toMulOneClass.{u1} N (DivInvMonoid.toMonoid.{u1} N _inst_2))) M N (MulOneClass.toMul.{u2} M (Monoid.toMulOneClass.{u2} M (DivInvMonoid.toMonoid.{u2} M _inst_1))) (MulOneClass.toMul.{u1} N (Monoid.toMulOneClass.{u1} N (DivInvMonoid.toMonoid.{u1} N _inst_2))) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N (Monoid.toMulOneClass.{u2} M (DivInvMonoid.toMonoid.{u2} M _inst_1)) (Monoid.toMulOneClass.{u1} N (DivInvMonoid.toMonoid.{u1} N _inst_2))) M N (Monoid.toMulOneClass.{u2} M (DivInvMonoid.toMonoid.{u2} M _inst_1)) (Monoid.toMulOneClass.{u1} N (DivInvMonoid.toMonoid.{u1} N _inst_2)) (MonoidHom.monoidHomClass.{u2, u1} M N (Monoid.toMulOneClass.{u2} M (DivInvMonoid.toMonoid.{u2} M _inst_1)) (Monoid.toMulOneClass.{u1} N (DivInvMonoid.toMonoid.{u1} N _inst_2))))) f x))) -> (forall (a : M) (n : Int), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) (HPow.hPow.{u2, 0, u2} M Int M (instHPow.{u2, 0} M Int (DivInvMonoid.Pow.{u2} M _inst_1)) a n)) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M N (Monoid.toMulOneClass.{u2} M (DivInvMonoid.toMonoid.{u2} M _inst_1)) (Monoid.toMulOneClass.{u1} N (DivInvMonoid.toMonoid.{u1} N _inst_2))) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N (Monoid.toMulOneClass.{u2} M (DivInvMonoid.toMonoid.{u2} M _inst_1)) (Monoid.toMulOneClass.{u1} N (DivInvMonoid.toMonoid.{u1} N _inst_2))) M N (MulOneClass.toMul.{u2} M (Monoid.toMulOneClass.{u2} M (DivInvMonoid.toMonoid.{u2} M _inst_1))) (MulOneClass.toMul.{u1} N (Monoid.toMulOneClass.{u1} N (DivInvMonoid.toMonoid.{u1} N _inst_2))) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N (Monoid.toMulOneClass.{u2} M (DivInvMonoid.toMonoid.{u2} M _inst_1)) (Monoid.toMulOneClass.{u1} N (DivInvMonoid.toMonoid.{u1} N _inst_2))) M N (Monoid.toMulOneClass.{u2} M (DivInvMonoid.toMonoid.{u2} M _inst_1)) (Monoid.toMulOneClass.{u1} N (DivInvMonoid.toMonoid.{u1} N _inst_2)) (MonoidHom.monoidHomClass.{u2, u1} M N (Monoid.toMulOneClass.{u2} M (DivInvMonoid.toMonoid.{u2} M _inst_1)) (Monoid.toMulOneClass.{u1} N (DivInvMonoid.toMonoid.{u1} N _inst_2))))) f (HPow.hPow.{u2, 0, u2} M Int M (instHPow.{u2, 0} M Int (DivInvMonoid.Pow.{u2} M _inst_1)) a n)) (HPow.hPow.{u1, 0, u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) a) Int ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) a) (instHPow.{u1, 0} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) a) Int (DivInvMonoid.Pow.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) a) _inst_2)) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M N (Monoid.toMulOneClass.{u2} M (DivInvMonoid.toMonoid.{u2} M _inst_1)) (Monoid.toMulOneClass.{u1} N (DivInvMonoid.toMonoid.{u1} N _inst_2))) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N (Monoid.toMulOneClass.{u2} M (DivInvMonoid.toMonoid.{u2} M _inst_1)) (Monoid.toMulOneClass.{u1} N (DivInvMonoid.toMonoid.{u1} N _inst_2))) M N (MulOneClass.toMul.{u2} M (Monoid.toMulOneClass.{u2} M (DivInvMonoid.toMonoid.{u2} M _inst_1))) (MulOneClass.toMul.{u1} N (Monoid.toMulOneClass.{u1} N (DivInvMonoid.toMonoid.{u1} N _inst_2))) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N (Monoid.toMulOneClass.{u2} M (DivInvMonoid.toMonoid.{u2} M _inst_1)) (Monoid.toMulOneClass.{u1} N (DivInvMonoid.toMonoid.{u1} N _inst_2))) M N (Monoid.toMulOneClass.{u2} M (DivInvMonoid.toMonoid.{u2} M _inst_1)) (Monoid.toMulOneClass.{u1} N (DivInvMonoid.toMonoid.{u1} N _inst_2)) (MonoidHom.monoidHomClass.{u2, u1} M N (Monoid.toMulOneClass.{u2} M (DivInvMonoid.toMonoid.{u2} M _inst_1)) (Monoid.toMulOneClass.{u1} N (DivInvMonoid.toMonoid.{u1} N _inst_2))))) f a) n))
+  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : DivInvMonoid.{u2} M] [_inst_2 : DivInvMonoid.{u1} N] (f : MonoidHom.{u2, u1} M N (Monoid.toMulOneClass.{u2} M (DivInvMonoid.toMonoid.{u2} M _inst_1)) (Monoid.toMulOneClass.{u1} N (DivInvMonoid.toMonoid.{u1} N _inst_2))), (forall (x : M), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) (Inv.inv.{u2} M (DivInvMonoid.toInv.{u2} M _inst_1) x)) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M N (Monoid.toMulOneClass.{u2} M (DivInvMonoid.toMonoid.{u2} M _inst_1)) (Monoid.toMulOneClass.{u1} N (DivInvMonoid.toMonoid.{u1} N _inst_2))) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N (Monoid.toMulOneClass.{u2} M (DivInvMonoid.toMonoid.{u2} M _inst_1)) (Monoid.toMulOneClass.{u1} N (DivInvMonoid.toMonoid.{u1} N _inst_2))) M N (MulOneClass.toMul.{u2} M (Monoid.toMulOneClass.{u2} M (DivInvMonoid.toMonoid.{u2} M _inst_1))) (MulOneClass.toMul.{u1} N (Monoid.toMulOneClass.{u1} N (DivInvMonoid.toMonoid.{u1} N _inst_2))) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N (Monoid.toMulOneClass.{u2} M (DivInvMonoid.toMonoid.{u2} M _inst_1)) (Monoid.toMulOneClass.{u1} N (DivInvMonoid.toMonoid.{u1} N _inst_2))) M N (Monoid.toMulOneClass.{u2} M (DivInvMonoid.toMonoid.{u2} M _inst_1)) (Monoid.toMulOneClass.{u1} N (DivInvMonoid.toMonoid.{u1} N _inst_2)) (MonoidHom.monoidHomClass.{u2, u1} M N (Monoid.toMulOneClass.{u2} M (DivInvMonoid.toMonoid.{u2} M _inst_1)) (Monoid.toMulOneClass.{u1} N (DivInvMonoid.toMonoid.{u1} N _inst_2))))) f (Inv.inv.{u2} M (DivInvMonoid.toInv.{u2} M _inst_1) x)) (Inv.inv.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) x) (DivInvMonoid.toInv.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) x) _inst_2) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M N (Monoid.toMulOneClass.{u2} M (DivInvMonoid.toMonoid.{u2} M _inst_1)) (Monoid.toMulOneClass.{u1} N (DivInvMonoid.toMonoid.{u1} N _inst_2))) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N (Monoid.toMulOneClass.{u2} M (DivInvMonoid.toMonoid.{u2} M _inst_1)) (Monoid.toMulOneClass.{u1} N (DivInvMonoid.toMonoid.{u1} N _inst_2))) M N (MulOneClass.toMul.{u2} M (Monoid.toMulOneClass.{u2} M (DivInvMonoid.toMonoid.{u2} M _inst_1))) (MulOneClass.toMul.{u1} N (Monoid.toMulOneClass.{u1} N (DivInvMonoid.toMonoid.{u1} N _inst_2))) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N (Monoid.toMulOneClass.{u2} M (DivInvMonoid.toMonoid.{u2} M _inst_1)) (Monoid.toMulOneClass.{u1} N (DivInvMonoid.toMonoid.{u1} N _inst_2))) M N (Monoid.toMulOneClass.{u2} M (DivInvMonoid.toMonoid.{u2} M _inst_1)) (Monoid.toMulOneClass.{u1} N (DivInvMonoid.toMonoid.{u1} N _inst_2)) (MonoidHom.monoidHomClass.{u2, u1} M N (Monoid.toMulOneClass.{u2} M (DivInvMonoid.toMonoid.{u2} M _inst_1)) (Monoid.toMulOneClass.{u1} N (DivInvMonoid.toMonoid.{u1} N _inst_2))))) f x))) -> (forall (a : M) (n : Int), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) (HPow.hPow.{u2, 0, u2} M Int M (instHPow.{u2, 0} M Int (DivInvMonoid.Pow.{u2} M _inst_1)) a n)) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M N (Monoid.toMulOneClass.{u2} M (DivInvMonoid.toMonoid.{u2} M _inst_1)) (Monoid.toMulOneClass.{u1} N (DivInvMonoid.toMonoid.{u1} N _inst_2))) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N (Monoid.toMulOneClass.{u2} M (DivInvMonoid.toMonoid.{u2} M _inst_1)) (Monoid.toMulOneClass.{u1} N (DivInvMonoid.toMonoid.{u1} N _inst_2))) M N (MulOneClass.toMul.{u2} M (Monoid.toMulOneClass.{u2} M (DivInvMonoid.toMonoid.{u2} M _inst_1))) (MulOneClass.toMul.{u1} N (Monoid.toMulOneClass.{u1} N (DivInvMonoid.toMonoid.{u1} N _inst_2))) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N (Monoid.toMulOneClass.{u2} M (DivInvMonoid.toMonoid.{u2} M _inst_1)) (Monoid.toMulOneClass.{u1} N (DivInvMonoid.toMonoid.{u1} N _inst_2))) M N (Monoid.toMulOneClass.{u2} M (DivInvMonoid.toMonoid.{u2} M _inst_1)) (Monoid.toMulOneClass.{u1} N (DivInvMonoid.toMonoid.{u1} N _inst_2)) (MonoidHom.monoidHomClass.{u2, u1} M N (Monoid.toMulOneClass.{u2} M (DivInvMonoid.toMonoid.{u2} M _inst_1)) (Monoid.toMulOneClass.{u1} N (DivInvMonoid.toMonoid.{u1} N _inst_2))))) f (HPow.hPow.{u2, 0, u2} M Int M (instHPow.{u2, 0} M Int (DivInvMonoid.Pow.{u2} M _inst_1)) a n)) (HPow.hPow.{u1, 0, u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) a) Int ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) a) (instHPow.{u1, 0} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) a) Int (DivInvMonoid.Pow.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) a) _inst_2)) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M N (Monoid.toMulOneClass.{u2} M (DivInvMonoid.toMonoid.{u2} M _inst_1)) (Monoid.toMulOneClass.{u1} N (DivInvMonoid.toMonoid.{u1} N _inst_2))) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N (Monoid.toMulOneClass.{u2} M (DivInvMonoid.toMonoid.{u2} M _inst_1)) (Monoid.toMulOneClass.{u1} N (DivInvMonoid.toMonoid.{u1} N _inst_2))) M N (MulOneClass.toMul.{u2} M (Monoid.toMulOneClass.{u2} M (DivInvMonoid.toMonoid.{u2} M _inst_1))) (MulOneClass.toMul.{u1} N (Monoid.toMulOneClass.{u1} N (DivInvMonoid.toMonoid.{u1} N _inst_2))) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N (Monoid.toMulOneClass.{u2} M (DivInvMonoid.toMonoid.{u2} M _inst_1)) (Monoid.toMulOneClass.{u1} N (DivInvMonoid.toMonoid.{u1} N _inst_2))) M N (Monoid.toMulOneClass.{u2} M (DivInvMonoid.toMonoid.{u2} M _inst_1)) (Monoid.toMulOneClass.{u1} N (DivInvMonoid.toMonoid.{u1} N _inst_2)) (MonoidHom.monoidHomClass.{u2, u1} M N (Monoid.toMulOneClass.{u2} M (DivInvMonoid.toMonoid.{u2} M _inst_1)) (Monoid.toMulOneClass.{u1} N (DivInvMonoid.toMonoid.{u1} N _inst_2))))) f a) n))
 Case conversion may be inaccurate. Consider using '#align monoid_hom.map_zpow' MonoidHom.map_zpow'ₓ'. -/
 @[to_additive]
 protected theorem MonoidHom.map_zpow' [DivInvMonoid M] [DivInvMonoid N] (f : M →* N)
@@ -2142,7 +2142,7 @@ end End
 lean 3 declaration is
   forall (M : Type.{u1}) [_inst_1 : MulOneClass.{u1} M], Eq.{succ u1} ((fun (_x : Monoid.End.{u1} M _inst_1) => M -> M) (OfNat.ofNat.{u1} (Monoid.End.{u1} M _inst_1) 1 (OfNat.mk.{u1} (Monoid.End.{u1} M _inst_1) 1 (One.one.{u1} (Monoid.End.{u1} M _inst_1) (MulOneClass.toHasOne.{u1} (Monoid.End.{u1} M _inst_1) (Monoid.toMulOneClass.{u1} (Monoid.End.{u1} M _inst_1) (Monoid.End.monoid.{u1} M _inst_1))))))) (coeFn.{succ u1, succ u1} (Monoid.End.{u1} M _inst_1) (fun (_x : Monoid.End.{u1} M _inst_1) => M -> M) (FunLike.hasCoeToFun.{succ u1, succ u1, succ u1} (Monoid.End.{u1} M _inst_1) M (fun (_x : M) => M) (MulHomClass.toFunLike.{u1, u1, u1} (Monoid.End.{u1} M _inst_1) M M (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u1} M _inst_1) (MonoidHomClass.toMulHomClass.{u1, u1, u1} (Monoid.End.{u1} M _inst_1) M M _inst_1 _inst_1 (Monoid.End.monoidHomClass.{u1} M _inst_1)))) (OfNat.ofNat.{u1} (Monoid.End.{u1} M _inst_1) 1 (OfNat.mk.{u1} (Monoid.End.{u1} M _inst_1) 1 (One.one.{u1} (Monoid.End.{u1} M _inst_1) (MulOneClass.toHasOne.{u1} (Monoid.End.{u1} M _inst_1) (Monoid.toMulOneClass.{u1} (Monoid.End.{u1} M _inst_1) (Monoid.End.monoid.{u1} M _inst_1))))))) (id.{succ u1} M)
 but is expected to have type
-  forall (M : Type.{u1}) [_inst_1 : MulOneClass.{u1} M], Eq.{succ u1} (forall (a : M), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => M) a) (FunLike.coe.{succ u1, succ u1, succ u1} (Monoid.End.{u1} M _inst_1) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => M) _x) (MulHomClass.toFunLike.{u1, u1, u1} (Monoid.End.{u1} M _inst_1) M M (MulOneClass.toMul.{u1} M _inst_1) (MulOneClass.toMul.{u1} M _inst_1) (MonoidHomClass.toMulHomClass.{u1, u1, u1} (Monoid.End.{u1} M _inst_1) M M _inst_1 _inst_1 (Monoid.End.instMonoidHomClassEnd.{u1} M _inst_1))) (OfNat.ofNat.{u1} (Monoid.End.{u1} M _inst_1) 1 (One.toOfNat1.{u1} (Monoid.End.{u1} M _inst_1) (Monoid.toOne.{u1} (Monoid.End.{u1} M _inst_1) (Monoid.End.instMonoidEnd.{u1} M _inst_1))))) (id.{succ u1} M)
+  forall (M : Type.{u1}) [_inst_1 : MulOneClass.{u1} M], Eq.{succ u1} (forall (a : M), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => M) a) (FunLike.coe.{succ u1, succ u1, succ u1} (Monoid.End.{u1} M _inst_1) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => M) _x) (MulHomClass.toFunLike.{u1, u1, u1} (Monoid.End.{u1} M _inst_1) M M (MulOneClass.toMul.{u1} M _inst_1) (MulOneClass.toMul.{u1} M _inst_1) (MonoidHomClass.toMulHomClass.{u1, u1, u1} (Monoid.End.{u1} M _inst_1) M M _inst_1 _inst_1 (Monoid.End.instMonoidHomClassEnd.{u1} M _inst_1))) (OfNat.ofNat.{u1} (Monoid.End.{u1} M _inst_1) 1 (One.toOfNat1.{u1} (Monoid.End.{u1} M _inst_1) (Monoid.toOne.{u1} (Monoid.End.{u1} M _inst_1) (Monoid.End.instMonoidEnd.{u1} M _inst_1))))) (id.{succ u1} M)
 Case conversion may be inaccurate. Consider using '#align monoid.coe_one Monoid.coe_oneₓ'. -/
 @[simp]
 theorem coe_one : ((1 : Monoid.End M) : M → M) = id :=
@@ -2153,7 +2153,7 @@ theorem coe_one : ((1 : Monoid.End M) : M → M) = id :=
 lean 3 declaration is
   forall (M : Type.{u1}) [_inst_1 : MulOneClass.{u1} M] (f : Monoid.End.{u1} M _inst_1) (g : Monoid.End.{u1} M _inst_1), Eq.{succ u1} ((fun (_x : Monoid.End.{u1} M _inst_1) => M -> M) (HMul.hMul.{u1, u1, u1} (Monoid.End.{u1} M _inst_1) (Monoid.End.{u1} M _inst_1) (Monoid.End.{u1} M _inst_1) (instHMul.{u1} (Monoid.End.{u1} M _inst_1) (MulOneClass.toHasMul.{u1} (Monoid.End.{u1} M _inst_1) (Monoid.toMulOneClass.{u1} (Monoid.End.{u1} M _inst_1) (Monoid.End.monoid.{u1} M _inst_1)))) f g)) (coeFn.{succ u1, succ u1} (Monoid.End.{u1} M _inst_1) (fun (_x : Monoid.End.{u1} M _inst_1) => M -> M) (FunLike.hasCoeToFun.{succ u1, succ u1, succ u1} (Monoid.End.{u1} M _inst_1) M (fun (_x : M) => M) (MulHomClass.toFunLike.{u1, u1, u1} (Monoid.End.{u1} M _inst_1) M M (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u1} M _inst_1) (MonoidHomClass.toMulHomClass.{u1, u1, u1} (Monoid.End.{u1} M _inst_1) M M _inst_1 _inst_1 (Monoid.End.monoidHomClass.{u1} M _inst_1)))) (HMul.hMul.{u1, u1, u1} (Monoid.End.{u1} M _inst_1) (Monoid.End.{u1} M _inst_1) (Monoid.End.{u1} M _inst_1) (instHMul.{u1} (Monoid.End.{u1} M _inst_1) (MulOneClass.toHasMul.{u1} (Monoid.End.{u1} M _inst_1) (Monoid.toMulOneClass.{u1} (Monoid.End.{u1} M _inst_1) (Monoid.End.monoid.{u1} M _inst_1)))) f g)) (Function.comp.{succ u1, succ u1, succ u1} M M M (coeFn.{succ u1, succ u1} (Monoid.End.{u1} M _inst_1) (fun (_x : Monoid.End.{u1} M _inst_1) => M -> M) (FunLike.hasCoeToFun.{succ u1, succ u1, succ u1} (Monoid.End.{u1} M _inst_1) M (fun (_x : M) => M) (MulHomClass.toFunLike.{u1, u1, u1} (Monoid.End.{u1} M _inst_1) M M (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u1} M _inst_1) (MonoidHomClass.toMulHomClass.{u1, u1, u1} (Monoid.End.{u1} M _inst_1) M M _inst_1 _inst_1 (Monoid.End.monoidHomClass.{u1} M _inst_1)))) f) (coeFn.{succ u1, succ u1} (Monoid.End.{u1} M _inst_1) (fun (_x : Monoid.End.{u1} M _inst_1) => M -> M) (FunLike.hasCoeToFun.{succ u1, succ u1, succ u1} (Monoid.End.{u1} M _inst_1) M (fun (_x : M) => M) (MulHomClass.toFunLike.{u1, u1, u1} (Monoid.End.{u1} M _inst_1) M M (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u1} M _inst_1) (MonoidHomClass.toMulHomClass.{u1, u1, u1} (Monoid.End.{u1} M _inst_1) M M _inst_1 _inst_1 (Monoid.End.monoidHomClass.{u1} M _inst_1)))) g))
 but is expected to have type
-  forall (M : Type.{u1}) [_inst_1 : MulOneClass.{u1} M] (f : Monoid.End.{u1} M _inst_1) (g : Monoid.End.{u1} M _inst_1), Eq.{succ u1} (forall (a : M), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => M) a) (FunLike.coe.{succ u1, succ u1, succ u1} (Monoid.End.{u1} M _inst_1) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => M) _x) (MulHomClass.toFunLike.{u1, u1, u1} (Monoid.End.{u1} M _inst_1) M M (MulOneClass.toMul.{u1} M _inst_1) (MulOneClass.toMul.{u1} M _inst_1) (MonoidHomClass.toMulHomClass.{u1, u1, u1} (Monoid.End.{u1} M _inst_1) M M _inst_1 _inst_1 (Monoid.End.instMonoidHomClassEnd.{u1} M _inst_1))) (HMul.hMul.{u1, u1, u1} (Monoid.End.{u1} M _inst_1) (Monoid.End.{u1} M _inst_1) (Monoid.End.{u1} M _inst_1) (instHMul.{u1} (Monoid.End.{u1} M _inst_1) (MulOneClass.toMul.{u1} (Monoid.End.{u1} M _inst_1) (Monoid.toMulOneClass.{u1} (Monoid.End.{u1} M _inst_1) (Monoid.End.instMonoidEnd.{u1} M _inst_1)))) f g)) (Function.comp.{succ u1, succ u1, succ u1} M M M (FunLike.coe.{succ u1, succ u1, succ u1} (Monoid.End.{u1} M _inst_1) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => M) _x) (MulHomClass.toFunLike.{u1, u1, u1} (Monoid.End.{u1} M _inst_1) M M (MulOneClass.toMul.{u1} M _inst_1) (MulOneClass.toMul.{u1} M _inst_1) (MonoidHomClass.toMulHomClass.{u1, u1, u1} (Monoid.End.{u1} M _inst_1) M M _inst_1 _inst_1 (Monoid.End.instMonoidHomClassEnd.{u1} M _inst_1))) f) (FunLike.coe.{succ u1, succ u1, succ u1} (Monoid.End.{u1} M _inst_1) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => M) _x) (MulHomClass.toFunLike.{u1, u1, u1} (Monoid.End.{u1} M _inst_1) M M (MulOneClass.toMul.{u1} M _inst_1) (MulOneClass.toMul.{u1} M _inst_1) (MonoidHomClass.toMulHomClass.{u1, u1, u1} (Monoid.End.{u1} M _inst_1) M M _inst_1 _inst_1 (Monoid.End.instMonoidHomClassEnd.{u1} M _inst_1))) g))
+  forall (M : Type.{u1}) [_inst_1 : MulOneClass.{u1} M] (f : Monoid.End.{u1} M _inst_1) (g : Monoid.End.{u1} M _inst_1), Eq.{succ u1} (forall (a : M), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => M) a) (FunLike.coe.{succ u1, succ u1, succ u1} (Monoid.End.{u1} M _inst_1) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => M) _x) (MulHomClass.toFunLike.{u1, u1, u1} (Monoid.End.{u1} M _inst_1) M M (MulOneClass.toMul.{u1} M _inst_1) (MulOneClass.toMul.{u1} M _inst_1) (MonoidHomClass.toMulHomClass.{u1, u1, u1} (Monoid.End.{u1} M _inst_1) M M _inst_1 _inst_1 (Monoid.End.instMonoidHomClassEnd.{u1} M _inst_1))) (HMul.hMul.{u1, u1, u1} (Monoid.End.{u1} M _inst_1) (Monoid.End.{u1} M _inst_1) (Monoid.End.{u1} M _inst_1) (instHMul.{u1} (Monoid.End.{u1} M _inst_1) (MulOneClass.toMul.{u1} (Monoid.End.{u1} M _inst_1) (Monoid.toMulOneClass.{u1} (Monoid.End.{u1} M _inst_1) (Monoid.End.instMonoidEnd.{u1} M _inst_1)))) f g)) (Function.comp.{succ u1, succ u1, succ u1} M M M (FunLike.coe.{succ u1, succ u1, succ u1} (Monoid.End.{u1} M _inst_1) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => M) _x) (MulHomClass.toFunLike.{u1, u1, u1} (Monoid.End.{u1} M _inst_1) M M (MulOneClass.toMul.{u1} M _inst_1) (MulOneClass.toMul.{u1} M _inst_1) (MonoidHomClass.toMulHomClass.{u1, u1, u1} (Monoid.End.{u1} M _inst_1) M M _inst_1 _inst_1 (Monoid.End.instMonoidHomClassEnd.{u1} M _inst_1))) f) (FunLike.coe.{succ u1, succ u1, succ u1} (Monoid.End.{u1} M _inst_1) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => M) _x) (MulHomClass.toFunLike.{u1, u1, u1} (Monoid.End.{u1} M _inst_1) M M (MulOneClass.toMul.{u1} M _inst_1) (MulOneClass.toMul.{u1} M _inst_1) (MonoidHomClass.toMulHomClass.{u1, u1, u1} (Monoid.End.{u1} M _inst_1) M M _inst_1 _inst_1 (Monoid.End.instMonoidHomClassEnd.{u1} M _inst_1))) g))
 Case conversion may be inaccurate. Consider using '#align monoid.coe_mul Monoid.coe_mulₓ'. -/
 @[simp]
 theorem coe_mul (f g) : ((f * g : Monoid.End M) : M → M) = f ∘ g :=
@@ -2245,7 +2245,7 @@ add_decl_doc AddMonoidHom.hasZero
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : One.{u1} M] [_inst_2 : One.{u2} N] (x : M), Eq.{succ u2} N (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (OneHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : OneHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (OneHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) (OfNat.ofNat.{max u2 u1} (OneHom.{u1, u2} M N _inst_1 _inst_2) 1 (OfNat.mk.{max u2 u1} (OneHom.{u1, u2} M N _inst_1 _inst_2) 1 (One.one.{max u2 u1} (OneHom.{u1, u2} M N _inst_1 _inst_2) (OneHom.hasOne.{u1, u2} M N _inst_1 _inst_2)))) x) (OfNat.ofNat.{u2} N 1 (OfNat.mk.{u2} N 1 (One.one.{u2} N _inst_2)))
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : One.{u2} M] [_inst_2 : One.{u1} N] (x : M), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1262 : M) => N) x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (OneHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1262 : M) => N) _x) (OneHomClass.toFunLike.{max u2 u1, u2, u1} (OneHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (OneHom.oneHomClass.{u2, u1} M N _inst_1 _inst_2)) (OfNat.ofNat.{max u2 u1} (OneHom.{u2, u1} M N _inst_1 _inst_2) 1 (One.toOfNat1.{max u2 u1} (OneHom.{u2, u1} M N _inst_1 _inst_2) (instOneOneHom.{u2, u1} M N _inst_1 _inst_2))) x) (OfNat.ofNat.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1262 : M) => N) x) 1 (One.toOfNat1.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1262 : M) => N) x) _inst_2))
+  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : One.{u2} M] [_inst_2 : One.{u1} N] (x : M), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1264 : M) => N) x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (OneHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1264 : M) => N) _x) (OneHomClass.toFunLike.{max u2 u1, u2, u1} (OneHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (OneHom.oneHomClass.{u2, u1} M N _inst_1 _inst_2)) (OfNat.ofNat.{max u2 u1} (OneHom.{u2, u1} M N _inst_1 _inst_2) 1 (One.toOfNat1.{max u2 u1} (OneHom.{u2, u1} M N _inst_1 _inst_2) (instOneOneHom.{u2, u1} M N _inst_1 _inst_2))) x) (OfNat.ofNat.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1264 : M) => N) x) 1 (One.toOfNat1.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1264 : M) => N) x) _inst_2))
 Case conversion may be inaccurate. Consider using '#align one_hom.one_apply OneHom.one_applyₓ'. -/
 @[simp, to_additive]
 theorem OneHom.one_apply [One M] [One N] (x : M) : (1 : OneHom M N) x = 1 :=
@@ -2257,7 +2257,7 @@ theorem OneHom.one_apply [One M] [One N] (x : M) : (1 : OneHom M N) x = 1 :=
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N] (x : M), Eq.{succ u2} N (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MonoidHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MonoidHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) (OfNat.ofNat.{max u2 u1} (MonoidHom.{u1, u2} M N _inst_1 _inst_2) 1 (OfNat.mk.{max u2 u1} (MonoidHom.{u1, u2} M N _inst_1 _inst_2) 1 (One.one.{max u2 u1} (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.hasOne.{u1, u2} M N _inst_1 _inst_2)))) x) (OfNat.ofNat.{u2} N 1 (OfNat.mk.{u2} N 1 (One.one.{u2} N (MulOneClass.toHasOne.{u2} N _inst_2))))
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u1} N] (x : M), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2))) (OfNat.ofNat.{max u2 u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) 1 (One.toOfNat1.{max u2 u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (instOneMonoidHom.{u2, u1} M N _inst_1 _inst_2))) x) (OfNat.ofNat.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) x) 1 (One.toOfNat1.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) x) (MulOneClass.toOne.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) x) _inst_2)))
+  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u1} N] (x : M), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2))) (OfNat.ofNat.{max u2 u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) 1 (One.toOfNat1.{max u2 u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (instOneMonoidHom.{u2, u1} M N _inst_1 _inst_2))) x) (OfNat.ofNat.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) x) 1 (One.toOfNat1.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) x) (MulOneClass.toOne.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) x) _inst_2)))
 Case conversion may be inaccurate. Consider using '#align monoid_hom.one_apply MonoidHom.one_applyₓ'. -/
 @[simp, to_additive]
 theorem MonoidHom.one_apply [MulOneClass M] [MulOneClass N] (x : M) : (1 : M →* N) x = 1 :=
@@ -2327,7 +2327,7 @@ add_decl_doc AddHom.hasAdd
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} {mM : Mul.{u1} M} {mN : CommSemigroup.{u2} N} (f : MulHom.{u1, u2} M N mM (Semigroup.toHasMul.{u2} N (CommSemigroup.toSemigroup.{u2} N mN))) (g : MulHom.{u1, u2} M N mM (Semigroup.toHasMul.{u2} N (CommSemigroup.toSemigroup.{u2} N mN))) (x : M), Eq.{succ u2} N (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MulHom.{u1, u2} M N mM (Semigroup.toHasMul.{u2} N (CommSemigroup.toSemigroup.{u2} N mN))) (fun (_x : MulHom.{u1, u2} M N mM (Semigroup.toHasMul.{u2} N (CommSemigroup.toSemigroup.{u2} N mN))) => M -> N) (MulHom.hasCoeToFun.{u1, u2} M N mM (Semigroup.toHasMul.{u2} N (CommSemigroup.toSemigroup.{u2} N mN))) (HMul.hMul.{max u2 u1, max u2 u1, max u2 u1} (MulHom.{u1, u2} M N mM (Semigroup.toHasMul.{u2} N (CommSemigroup.toSemigroup.{u2} N mN))) (MulHom.{u1, u2} M N mM (Semigroup.toHasMul.{u2} N (CommSemigroup.toSemigroup.{u2} N mN))) (MulHom.{u1, u2} M N mM (Semigroup.toHasMul.{u2} N (CommSemigroup.toSemigroup.{u2} N mN))) (instHMul.{max u2 u1} (MulHom.{u1, u2} M N mM (Semigroup.toHasMul.{u2} N (CommSemigroup.toSemigroup.{u2} N mN))) (MulHom.hasMul.{u1, u2} M N mM mN)) f g) x) (HMul.hMul.{u2, u2, u2} N N N (instHMul.{u2} N (Semigroup.toHasMul.{u2} N (CommSemigroup.toSemigroup.{u2} N mN))) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MulHom.{u1, u2} M N mM (Semigroup.toHasMul.{u2} N (CommSemigroup.toSemigroup.{u2} N mN))) (fun (_x : MulHom.{u1, u2} M N mM (Semigroup.toHasMul.{u2} N (CommSemigroup.toSemigroup.{u2} N mN))) => M -> N) (MulHom.hasCoeToFun.{u1, u2} M N mM (Semigroup.toHasMul.{u2} N (CommSemigroup.toSemigroup.{u2} N mN))) f x) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MulHom.{u1, u2} M N mM (Semigroup.toHasMul.{u2} N (CommSemigroup.toSemigroup.{u2} N mN))) (fun (_x : MulHom.{u1, u2} M N mM (Semigroup.toHasMul.{u2} N (CommSemigroup.toSemigroup.{u2} N mN))) => M -> N) (MulHom.hasCoeToFun.{u1, u2} M N mM (Semigroup.toHasMul.{u2} N (CommSemigroup.toSemigroup.{u2} N mN))) g x))
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [mM : Mul.{u2} M] [mN : CommSemigroup.{u1} N] (f : MulHom.{u2, u1} M N mM (Semigroup.toMul.{u1} N (CommSemigroup.toSemigroup.{u1} N mN))) (g : MulHom.{u2, u1} M N mM (Semigroup.toMul.{u1} N (CommSemigroup.toSemigroup.{u1} N mN))) (x : M), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N mM (Semigroup.toMul.{u1} N (CommSemigroup.toSemigroup.{u1} N mN))) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N mM (Semigroup.toMul.{u1} N (CommSemigroup.toSemigroup.{u1} N mN))) M N mM (Semigroup.toMul.{u1} N (CommSemigroup.toSemigroup.{u1} N mN)) (MulHom.mulHomClass.{u2, u1} M N mM (Semigroup.toMul.{u1} N (CommSemigroup.toSemigroup.{u1} N mN)))) (HMul.hMul.{max u2 u1, max u2 u1, max u2 u1} (MulHom.{u2, u1} M N mM (Semigroup.toMul.{u1} N (CommSemigroup.toSemigroup.{u1} N mN))) (MulHom.{u2, u1} M N mM (Semigroup.toMul.{u1} N (CommSemigroup.toSemigroup.{u1} N mN))) (MulHom.{u2, u1} M N mM (Semigroup.toMul.{u1} N (CommSemigroup.toSemigroup.{u1} N mN))) (instHMul.{max u2 u1} (MulHom.{u2, u1} M N mM (Semigroup.toMul.{u1} N (CommSemigroup.toSemigroup.{u1} N mN))) (MulHom.instMulMulHomToMulToSemigroup.{u2, u1} M N mM mN)) f g) x) (HMul.hMul.{u1, u1, u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) x) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) x) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) x) (instHMul.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) x) (Semigroup.toMul.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) x) (CommSemigroup.toSemigroup.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) x) mN))) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N mM (Semigroup.toMul.{u1} N (CommSemigroup.toSemigroup.{u1} N mN))) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N mM (Semigroup.toMul.{u1} N (CommSemigroup.toSemigroup.{u1} N mN))) M N mM (Semigroup.toMul.{u1} N (CommSemigroup.toSemigroup.{u1} N mN)) (MulHom.mulHomClass.{u2, u1} M N mM (Semigroup.toMul.{u1} N (CommSemigroup.toSemigroup.{u1} N mN)))) f x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N mM (Semigroup.toMul.{u1} N (CommSemigroup.toSemigroup.{u1} N mN))) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N mM (Semigroup.toMul.{u1} N (CommSemigroup.toSemigroup.{u1} N mN))) M N mM (Semigroup.toMul.{u1} N (CommSemigroup.toSemigroup.{u1} N mN)) (MulHom.mulHomClass.{u2, u1} M N mM (Semigroup.toMul.{u1} N (CommSemigroup.toSemigroup.{u1} N mN)))) g x))
+  forall {M : Type.{u2}} {N : Type.{u1}} [mM : Mul.{u2} M] [mN : CommSemigroup.{u1} N] (f : MulHom.{u2, u1} M N mM (Semigroup.toMul.{u1} N (CommSemigroup.toSemigroup.{u1} N mN))) (g : MulHom.{u2, u1} M N mM (Semigroup.toMul.{u1} N (CommSemigroup.toSemigroup.{u1} N mN))) (x : M), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N mM (Semigroup.toMul.{u1} N (CommSemigroup.toSemigroup.{u1} N mN))) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N mM (Semigroup.toMul.{u1} N (CommSemigroup.toSemigroup.{u1} N mN))) M N mM (Semigroup.toMul.{u1} N (CommSemigroup.toSemigroup.{u1} N mN)) (MulHom.mulHomClass.{u2, u1} M N mM (Semigroup.toMul.{u1} N (CommSemigroup.toSemigroup.{u1} N mN)))) (HMul.hMul.{max u2 u1, max u2 u1, max u2 u1} (MulHom.{u2, u1} M N mM (Semigroup.toMul.{u1} N (CommSemigroup.toSemigroup.{u1} N mN))) (MulHom.{u2, u1} M N mM (Semigroup.toMul.{u1} N (CommSemigroup.toSemigroup.{u1} N mN))) (MulHom.{u2, u1} M N mM (Semigroup.toMul.{u1} N (CommSemigroup.toSemigroup.{u1} N mN))) (instHMul.{max u2 u1} (MulHom.{u2, u1} M N mM (Semigroup.toMul.{u1} N (CommSemigroup.toSemigroup.{u1} N mN))) (MulHom.instMulMulHomToMulToSemigroup.{u2, u1} M N mM mN)) f g) x) (HMul.hMul.{u1, u1, u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) x) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) x) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) x) (instHMul.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) x) (Semigroup.toMul.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) x) (CommSemigroup.toSemigroup.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) x) mN))) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N mM (Semigroup.toMul.{u1} N (CommSemigroup.toSemigroup.{u1} N mN))) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N mM (Semigroup.toMul.{u1} N (CommSemigroup.toSemigroup.{u1} N mN))) M N mM (Semigroup.toMul.{u1} N (CommSemigroup.toSemigroup.{u1} N mN)) (MulHom.mulHomClass.{u2, u1} M N mM (Semigroup.toMul.{u1} N (CommSemigroup.toSemigroup.{u1} N mN)))) f x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N mM (Semigroup.toMul.{u1} N (CommSemigroup.toSemigroup.{u1} N mN))) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N mM (Semigroup.toMul.{u1} N (CommSemigroup.toSemigroup.{u1} N mN))) M N mM (Semigroup.toMul.{u1} N (CommSemigroup.toSemigroup.{u1} N mN)) (MulHom.mulHomClass.{u2, u1} M N mM (Semigroup.toMul.{u1} N (CommSemigroup.toSemigroup.{u1} N mN)))) g x))
 Case conversion may be inaccurate. Consider using '#align mul_hom.mul_apply MulHom.mul_applyₓ'. -/
 @[simp, to_additive]
 theorem mul_apply {M N} {mM : Mul M} {mN : CommSemigroup N} (f g : M →ₙ* N) (x : M) :
@@ -2390,7 +2390,7 @@ add_decl_doc AddMonoidHom.hasAdd
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} {mM : MulOneClass.{u1} M} {mN : CommMonoid.{u2} N} (f : MonoidHom.{u1, u2} M N mM (Monoid.toMulOneClass.{u2} N (CommMonoid.toMonoid.{u2} N mN))) (g : MonoidHom.{u1, u2} M N mM (Monoid.toMulOneClass.{u2} N (CommMonoid.toMonoid.{u2} N mN))) (x : M), Eq.{succ u2} N (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} M N mM (Monoid.toMulOneClass.{u2} N (CommMonoid.toMonoid.{u2} N mN))) (fun (_x : MonoidHom.{u1, u2} M N mM (Monoid.toMulOneClass.{u2} N (CommMonoid.toMonoid.{u2} N mN))) => M -> N) (MonoidHom.hasCoeToFun.{u1, u2} M N mM (Monoid.toMulOneClass.{u2} N (CommMonoid.toMonoid.{u2} N mN))) (HMul.hMul.{max u2 u1, max u2 u1, max u2 u1} (MonoidHom.{u1, u2} M N mM (Monoid.toMulOneClass.{u2} N (CommMonoid.toMonoid.{u2} N mN))) (MonoidHom.{u1, u2} M N mM (Monoid.toMulOneClass.{u2} N (CommMonoid.toMonoid.{u2} N mN))) (MonoidHom.{u1, u2} M N mM (Monoid.toMulOneClass.{u2} N (CommMonoid.toMonoid.{u2} N mN))) (instHMul.{max u2 u1} (MonoidHom.{u1, u2} M N mM (Monoid.toMulOneClass.{u2} N (CommMonoid.toMonoid.{u2} N mN))) (MonoidHom.hasMul.{u1, u2} M N mM mN)) f g) x) (HMul.hMul.{u2, u2, u2} N N N (instHMul.{u2} N (MulOneClass.toHasMul.{u2} N (Monoid.toMulOneClass.{u2} N (CommMonoid.toMonoid.{u2} N mN)))) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} M N mM (Monoid.toMulOneClass.{u2} N (CommMonoid.toMonoid.{u2} N mN))) (fun (_x : MonoidHom.{u1, u2} M N mM (Monoid.toMulOneClass.{u2} N (CommMonoid.toMonoid.{u2} N mN))) => M -> N) (MonoidHom.hasCoeToFun.{u1, u2} M N mM (Monoid.toMulOneClass.{u2} N (CommMonoid.toMonoid.{u2} N mN))) f x) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} M N mM (Monoid.toMulOneClass.{u2} N (CommMonoid.toMonoid.{u2} N mN))) (fun (_x : MonoidHom.{u1, u2} M N mM (Monoid.toMulOneClass.{u2} N (CommMonoid.toMonoid.{u2} N mN))) => M -> N) (MonoidHom.hasCoeToFun.{u1, u2} M N mM (Monoid.toMulOneClass.{u2} N (CommMonoid.toMonoid.{u2} N mN))) g x))
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [mM : MulOneClass.{u2} M] [mN : CommMonoid.{u1} N] (f : MonoidHom.{u2, u1} M N mM (Monoid.toMulOneClass.{u1} N (CommMonoid.toMonoid.{u1} N mN))) (g : MonoidHom.{u2, u1} M N mM (Monoid.toMulOneClass.{u1} N (CommMonoid.toMonoid.{u1} N mN))) (x : M), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M N mM (Monoid.toMulOneClass.{u1} N (CommMonoid.toMonoid.{u1} N mN))) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N mM (Monoid.toMulOneClass.{u1} N (CommMonoid.toMonoid.{u1} N mN))) M N (MulOneClass.toMul.{u2} M mM) (MulOneClass.toMul.{u1} N (Monoid.toMulOneClass.{u1} N (CommMonoid.toMonoid.{u1} N mN))) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N mM (Monoid.toMulOneClass.{u1} N (CommMonoid.toMonoid.{u1} N mN))) M N mM (Monoid.toMulOneClass.{u1} N (CommMonoid.toMonoid.{u1} N mN)) (MonoidHom.monoidHomClass.{u2, u1} M N mM (Monoid.toMulOneClass.{u1} N (CommMonoid.toMonoid.{u1} N mN))))) (HMul.hMul.{max u2 u1, max u2 u1, max u2 u1} (MonoidHom.{u2, u1} M N mM (Monoid.toMulOneClass.{u1} N (CommMonoid.toMonoid.{u1} N mN))) (MonoidHom.{u2, u1} M N mM (Monoid.toMulOneClass.{u1} N (CommMonoid.toMonoid.{u1} N mN))) (MonoidHom.{u2, u1} M N mM (Monoid.toMulOneClass.{u1} N (CommMonoid.toMonoid.{u1} N mN))) (instHMul.{max u2 u1} (MonoidHom.{u2, u1} M N mM (Monoid.toMulOneClass.{u1} N (CommMonoid.toMonoid.{u1} N mN))) (MonoidHom.mul.{u2, u1} M N mM mN)) f g) x) (HMul.hMul.{u1, u1, u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) x) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) x) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) x) (instHMul.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) x) (MulOneClass.toMul.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) x) (Monoid.toMulOneClass.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) x) (CommMonoid.toMonoid.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) x) mN)))) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M N mM (Monoid.toMulOneClass.{u1} N (CommMonoid.toMonoid.{u1} N mN))) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N mM (Monoid.toMulOneClass.{u1} N (CommMonoid.toMonoid.{u1} N mN))) M N (MulOneClass.toMul.{u2} M mM) (MulOneClass.toMul.{u1} N (Monoid.toMulOneClass.{u1} N (CommMonoid.toMonoid.{u1} N mN))) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N mM (Monoid.toMulOneClass.{u1} N (CommMonoid.toMonoid.{u1} N mN))) M N mM (Monoid.toMulOneClass.{u1} N (CommMonoid.toMonoid.{u1} N mN)) (MonoidHom.monoidHomClass.{u2, u1} M N mM (Monoid.toMulOneClass.{u1} N (CommMonoid.toMonoid.{u1} N mN))))) f x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M N mM (Monoid.toMulOneClass.{u1} N (CommMonoid.toMonoid.{u1} N mN))) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N mM (Monoid.toMulOneClass.{u1} N (CommMonoid.toMonoid.{u1} N mN))) M N (MulOneClass.toMul.{u2} M mM) (MulOneClass.toMul.{u1} N (Monoid.toMulOneClass.{u1} N (CommMonoid.toMonoid.{u1} N mN))) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N mM (Monoid.toMulOneClass.{u1} N (CommMonoid.toMonoid.{u1} N mN))) M N mM (Monoid.toMulOneClass.{u1} N (CommMonoid.toMonoid.{u1} N mN)) (MonoidHom.monoidHomClass.{u2, u1} M N mM (Monoid.toMulOneClass.{u1} N (CommMonoid.toMonoid.{u1} N mN))))) g x))
+  forall {M : Type.{u2}} {N : Type.{u1}} [mM : MulOneClass.{u2} M] [mN : CommMonoid.{u1} N] (f : MonoidHom.{u2, u1} M N mM (Monoid.toMulOneClass.{u1} N (CommMonoid.toMonoid.{u1} N mN))) (g : MonoidHom.{u2, u1} M N mM (Monoid.toMulOneClass.{u1} N (CommMonoid.toMonoid.{u1} N mN))) (x : M), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M N mM (Monoid.toMulOneClass.{u1} N (CommMonoid.toMonoid.{u1} N mN))) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N mM (Monoid.toMulOneClass.{u1} N (CommMonoid.toMonoid.{u1} N mN))) M N (MulOneClass.toMul.{u2} M mM) (MulOneClass.toMul.{u1} N (Monoid.toMulOneClass.{u1} N (CommMonoid.toMonoid.{u1} N mN))) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N mM (Monoid.toMulOneClass.{u1} N (CommMonoid.toMonoid.{u1} N mN))) M N mM (Monoid.toMulOneClass.{u1} N (CommMonoid.toMonoid.{u1} N mN)) (MonoidHom.monoidHomClass.{u2, u1} M N mM (Monoid.toMulOneClass.{u1} N (CommMonoid.toMonoid.{u1} N mN))))) (HMul.hMul.{max u2 u1, max u2 u1, max u2 u1} (MonoidHom.{u2, u1} M N mM (Monoid.toMulOneClass.{u1} N (CommMonoid.toMonoid.{u1} N mN))) (MonoidHom.{u2, u1} M N mM (Monoid.toMulOneClass.{u1} N (CommMonoid.toMonoid.{u1} N mN))) (MonoidHom.{u2, u1} M N mM (Monoid.toMulOneClass.{u1} N (CommMonoid.toMonoid.{u1} N mN))) (instHMul.{max u2 u1} (MonoidHom.{u2, u1} M N mM (Monoid.toMulOneClass.{u1} N (CommMonoid.toMonoid.{u1} N mN))) (MonoidHom.mul.{u2, u1} M N mM mN)) f g) x) (HMul.hMul.{u1, u1, u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) x) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) x) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) x) (instHMul.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) x) (MulOneClass.toMul.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) x) (Monoid.toMulOneClass.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) x) (CommMonoid.toMonoid.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) x) mN)))) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M N mM (Monoid.toMulOneClass.{u1} N (CommMonoid.toMonoid.{u1} N mN))) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N mM (Monoid.toMulOneClass.{u1} N (CommMonoid.toMonoid.{u1} N mN))) M N (MulOneClass.toMul.{u2} M mM) (MulOneClass.toMul.{u1} N (Monoid.toMulOneClass.{u1} N (CommMonoid.toMonoid.{u1} N mN))) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N mM (Monoid.toMulOneClass.{u1} N (CommMonoid.toMonoid.{u1} N mN))) M N mM (Monoid.toMulOneClass.{u1} N (CommMonoid.toMonoid.{u1} N mN)) (MonoidHom.monoidHomClass.{u2, u1} M N mM (Monoid.toMulOneClass.{u1} N (CommMonoid.toMonoid.{u1} N mN))))) f x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M N mM (Monoid.toMulOneClass.{u1} N (CommMonoid.toMonoid.{u1} N mN))) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N mM (Monoid.toMulOneClass.{u1} N (CommMonoid.toMonoid.{u1} N mN))) M N (MulOneClass.toMul.{u2} M mM) (MulOneClass.toMul.{u1} N (Monoid.toMulOneClass.{u1} N (CommMonoid.toMonoid.{u1} N mN))) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N mM (Monoid.toMulOneClass.{u1} N (CommMonoid.toMonoid.{u1} N mN))) M N mM (Monoid.toMulOneClass.{u1} N (CommMonoid.toMonoid.{u1} N mN)) (MonoidHom.monoidHomClass.{u2, u1} M N mM (Monoid.toMulOneClass.{u1} N (CommMonoid.toMonoid.{u1} N mN))))) g x))
 Case conversion may be inaccurate. Consider using '#align monoid_hom.mul_apply MonoidHom.mul_applyₓ'. -/
 @[simp, to_additive]
 theorem mul_apply {M N} {mM : MulOneClass M} {mN : CommMonoid N} (f g : M →* N) (x : M) :
@@ -2457,7 +2457,7 @@ theorem comp_mul [MulOneClass M] [CommMonoid N] [CommMonoid P] (g : N →* P) (f
 lean 3 declaration is
   forall {α : Type.{u1}} {β : Type.{u2}} [_inst_3 : Group.{u1} α] [_inst_4 : DivisionMonoid.{u2} β] (f : MonoidHom.{u1, u2} α β (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3))) (Monoid.toMulOneClass.{u2} β (DivInvMonoid.toMonoid.{u2} β (DivisionMonoid.toDivInvMonoid.{u2} β _inst_4)))) (a : α), Eq.{succ u2} β (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} α β (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3))) (Monoid.toMulOneClass.{u2} β (DivInvMonoid.toMonoid.{u2} β (DivisionMonoid.toDivInvMonoid.{u2} β _inst_4)))) (fun (_x : MonoidHom.{u1, u2} α β (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3))) (Monoid.toMulOneClass.{u2} β (DivInvMonoid.toMonoid.{u2} β (DivisionMonoid.toDivInvMonoid.{u2} β _inst_4)))) => α -> β) (MonoidHom.hasCoeToFun.{u1, u2} α β (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3))) (Monoid.toMulOneClass.{u2} β (DivInvMonoid.toMonoid.{u2} β (DivisionMonoid.toDivInvMonoid.{u2} β _inst_4)))) f (Inv.inv.{u1} α (DivInvMonoid.toHasInv.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3)) a)) (Inv.inv.{u2} β (DivInvMonoid.toHasInv.{u2} β (DivisionMonoid.toDivInvMonoid.{u2} β _inst_4)) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} α β (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3))) (Monoid.toMulOneClass.{u2} β (DivInvMonoid.toMonoid.{u2} β (DivisionMonoid.toDivInvMonoid.{u2} β _inst_4)))) (fun (_x : MonoidHom.{u1, u2} α β (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3))) (Monoid.toMulOneClass.{u2} β (DivInvMonoid.toMonoid.{u2} β (DivisionMonoid.toDivInvMonoid.{u2} β _inst_4)))) => α -> β) (MonoidHom.hasCoeToFun.{u1, u2} α β (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3))) (Monoid.toMulOneClass.{u2} β (DivInvMonoid.toMonoid.{u2} β (DivisionMonoid.toDivInvMonoid.{u2} β _inst_4)))) f a))
 but is expected to have type
-  forall {α : Type.{u2}} {β : Type.{u1}} [_inst_3 : Group.{u2} α] [_inst_4 : DivisionMonoid.{u1} β] (f : MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) (a : α), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : α) => β) (Inv.inv.{u2} α (InvOneClass.toInv.{u2} α (DivInvOneMonoid.toInvOneClass.{u2} α (DivisionMonoid.toDivInvOneMonoid.{u2} α (Group.toDivisionMonoid.{u2} α _inst_3)))) a)) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : α) => β) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) α β (MulOneClass.toMul.{u2} α (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3)))) (MulOneClass.toMul.{u1} β (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4))) (MonoidHom.monoidHomClass.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))))) f (Inv.inv.{u2} α (InvOneClass.toInv.{u2} α (DivInvOneMonoid.toInvOneClass.{u2} α (DivisionMonoid.toDivInvOneMonoid.{u2} α (Group.toDivisionMonoid.{u2} α _inst_3)))) a)) (Inv.inv.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : α) => β) a) (InvOneClass.toInv.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : α) => β) a) (DivInvOneMonoid.toInvOneClass.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : α) => β) a) (DivisionMonoid.toDivInvOneMonoid.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : α) => β) a) _inst_4))) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : α) => β) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) α β (MulOneClass.toMul.{u2} α (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3)))) (MulOneClass.toMul.{u1} β (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4))) (MonoidHom.monoidHomClass.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))))) f a))
+  forall {α : Type.{u2}} {β : Type.{u1}} [_inst_3 : Group.{u2} α] [_inst_4 : DivisionMonoid.{u1} β] (f : MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) (a : α), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : α) => β) (Inv.inv.{u2} α (InvOneClass.toInv.{u2} α (DivInvOneMonoid.toInvOneClass.{u2} α (DivisionMonoid.toDivInvOneMonoid.{u2} α (Group.toDivisionMonoid.{u2} α _inst_3)))) a)) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : α) => β) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) α β (MulOneClass.toMul.{u2} α (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3)))) (MulOneClass.toMul.{u1} β (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4))) (MonoidHom.monoidHomClass.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))))) f (Inv.inv.{u2} α (InvOneClass.toInv.{u2} α (DivInvOneMonoid.toInvOneClass.{u2} α (DivisionMonoid.toDivInvOneMonoid.{u2} α (Group.toDivisionMonoid.{u2} α _inst_3)))) a)) (Inv.inv.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : α) => β) a) (InvOneClass.toInv.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : α) => β) a) (DivInvOneMonoid.toInvOneClass.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : α) => β) a) (DivisionMonoid.toDivInvOneMonoid.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : α) => β) a) _inst_4))) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : α) => β) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) α β (MulOneClass.toMul.{u2} α (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3)))) (MulOneClass.toMul.{u1} β (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4))) (MonoidHom.monoidHomClass.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))))) f a))
 Case conversion may be inaccurate. Consider using '#align monoid_hom.map_inv MonoidHom.map_invₓ'. -/
 /-- Group homomorphisms preserve inverse. -/
 @[to_additive "Additive group homomorphisms preserve negation."]
@@ -2470,7 +2470,7 @@ protected theorem map_inv [Group α] [DivisionMonoid β] (f : α →* β) (a : 
 lean 3 declaration is
   forall {α : Type.{u1}} {β : Type.{u2}} [_inst_3 : Group.{u1} α] [_inst_4 : DivisionMonoid.{u2} β] (f : MonoidHom.{u1, u2} α β (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3))) (Monoid.toMulOneClass.{u2} β (DivInvMonoid.toMonoid.{u2} β (DivisionMonoid.toDivInvMonoid.{u2} β _inst_4)))) (g : α) (n : Int), Eq.{succ u2} β (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} α β (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3))) (Monoid.toMulOneClass.{u2} β (DivInvMonoid.toMonoid.{u2} β (DivisionMonoid.toDivInvMonoid.{u2} β _inst_4)))) (fun (_x : MonoidHom.{u1, u2} α β (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3))) (Monoid.toMulOneClass.{u2} β (DivInvMonoid.toMonoid.{u2} β (DivisionMonoid.toDivInvMonoid.{u2} β _inst_4)))) => α -> β) (MonoidHom.hasCoeToFun.{u1, u2} α β (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3))) (Monoid.toMulOneClass.{u2} β (DivInvMonoid.toMonoid.{u2} β (DivisionMonoid.toDivInvMonoid.{u2} β _inst_4)))) f (HPow.hPow.{u1, 0, u1} α Int α (instHPow.{u1, 0} α Int (DivInvMonoid.Pow.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3))) g n)) (HPow.hPow.{u2, 0, u2} β Int β (instHPow.{u2, 0} β Int (DivInvMonoid.Pow.{u2} β (DivisionMonoid.toDivInvMonoid.{u2} β _inst_4))) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} α β (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3))) (Monoid.toMulOneClass.{u2} β (DivInvMonoid.toMonoid.{u2} β (DivisionMonoid.toDivInvMonoid.{u2} β _inst_4)))) (fun (_x : MonoidHom.{u1, u2} α β (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3))) (Monoid.toMulOneClass.{u2} β (DivInvMonoid.toMonoid.{u2} β (DivisionMonoid.toDivInvMonoid.{u2} β _inst_4)))) => α -> β) (MonoidHom.hasCoeToFun.{u1, u2} α β (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3))) (Monoid.toMulOneClass.{u2} β (DivInvMonoid.toMonoid.{u2} β (DivisionMonoid.toDivInvMonoid.{u2} β _inst_4)))) f g) n)
 but is expected to have type
-  forall {α : Type.{u2}} {β : Type.{u1}} [_inst_3 : Group.{u2} α] [_inst_4 : DivisionMonoid.{u1} β] (f : MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) (g : α) (n : Int), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : α) => β) (HPow.hPow.{u2, 0, u2} α Int α (instHPow.{u2, 0} α Int (DivInvMonoid.Pow.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) g n)) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : α) => β) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) α β (MulOneClass.toMul.{u2} α (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3)))) (MulOneClass.toMul.{u1} β (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4))) (MonoidHom.monoidHomClass.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))))) f (HPow.hPow.{u2, 0, u2} α Int α (instHPow.{u2, 0} α Int (DivInvMonoid.Pow.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) g n)) (HPow.hPow.{u1, 0, u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : α) => β) g) Int ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : α) => β) g) (instHPow.{u1, 0} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : α) => β) g) Int (DivInvMonoid.Pow.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : α) => β) g) (DivisionMonoid.toDivInvMonoid.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : α) => β) g) _inst_4))) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : α) => β) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) α β (MulOneClass.toMul.{u2} α (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3)))) (MulOneClass.toMul.{u1} β (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4))) (MonoidHom.monoidHomClass.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))))) f g) n)
+  forall {α : Type.{u2}} {β : Type.{u1}} [_inst_3 : Group.{u2} α] [_inst_4 : DivisionMonoid.{u1} β] (f : MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) (g : α) (n : Int), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : α) => β) (HPow.hPow.{u2, 0, u2} α Int α (instHPow.{u2, 0} α Int (DivInvMonoid.Pow.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) g n)) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : α) => β) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) α β (MulOneClass.toMul.{u2} α (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3)))) (MulOneClass.toMul.{u1} β (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4))) (MonoidHom.monoidHomClass.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))))) f (HPow.hPow.{u2, 0, u2} α Int α (instHPow.{u2, 0} α Int (DivInvMonoid.Pow.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) g n)) (HPow.hPow.{u1, 0, u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : α) => β) g) Int ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : α) => β) g) (instHPow.{u1, 0} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : α) => β) g) Int (DivInvMonoid.Pow.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : α) => β) g) (DivisionMonoid.toDivInvMonoid.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : α) => β) g) _inst_4))) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : α) => β) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) α β (MulOneClass.toMul.{u2} α (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3)))) (MulOneClass.toMul.{u1} β (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4))) (MonoidHom.monoidHomClass.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))))) f g) n)
 Case conversion may be inaccurate. Consider using '#align monoid_hom.map_zpow MonoidHom.map_zpowₓ'. -/
 /-- Group homomorphisms preserve integer power. -/
 @[to_additive "Additive group homomorphisms preserve integer scaling."]
@@ -2484,7 +2484,7 @@ protected theorem map_zpow [Group α] [DivisionMonoid β] (f : α →* β) (g :
 lean 3 declaration is
   forall {α : Type.{u1}} {β : Type.{u2}} [_inst_3 : Group.{u1} α] [_inst_4 : DivisionMonoid.{u2} β] (f : MonoidHom.{u1, u2} α β (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3))) (Monoid.toMulOneClass.{u2} β (DivInvMonoid.toMonoid.{u2} β (DivisionMonoid.toDivInvMonoid.{u2} β _inst_4)))) (g : α) (h : α), Eq.{succ u2} β (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} α β (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3))) (Monoid.toMulOneClass.{u2} β (DivInvMonoid.toMonoid.{u2} β (DivisionMonoid.toDivInvMonoid.{u2} β _inst_4)))) (fun (_x : MonoidHom.{u1, u2} α β (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3))) (Monoid.toMulOneClass.{u2} β (DivInvMonoid.toMonoid.{u2} β (DivisionMonoid.toDivInvMonoid.{u2} β _inst_4)))) => α -> β) (MonoidHom.hasCoeToFun.{u1, u2} α β (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3))) (Monoid.toMulOneClass.{u2} β (DivInvMonoid.toMonoid.{u2} β (DivisionMonoid.toDivInvMonoid.{u2} β _inst_4)))) f (HDiv.hDiv.{u1, u1, u1} α α α (instHDiv.{u1} α (DivInvMonoid.toHasDiv.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3))) g h)) (HDiv.hDiv.{u2, u2, u2} β β β (instHDiv.{u2} β (DivInvMonoid.toHasDiv.{u2} β (DivisionMonoid.toDivInvMonoid.{u2} β _inst_4))) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} α β (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3))) (Monoid.toMulOneClass.{u2} β (DivInvMonoid.toMonoid.{u2} β (DivisionMonoid.toDivInvMonoid.{u2} β _inst_4)))) (fun (_x : MonoidHom.{u1, u2} α β (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3))) (Monoid.toMulOneClass.{u2} β (DivInvMonoid.toMonoid.{u2} β (DivisionMonoid.toDivInvMonoid.{u2} β _inst_4)))) => α -> β) (MonoidHom.hasCoeToFun.{u1, u2} α β (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3))) (Monoid.toMulOneClass.{u2} β (DivInvMonoid.toMonoid.{u2} β (DivisionMonoid.toDivInvMonoid.{u2} β _inst_4)))) f g) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} α β (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3))) (Monoid.toMulOneClass.{u2} β (DivInvMonoid.toMonoid.{u2} β (DivisionMonoid.toDivInvMonoid.{u2} β _inst_4)))) (fun (_x : MonoidHom.{u1, u2} α β (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3))) (Monoid.toMulOneClass.{u2} β (DivInvMonoid.toMonoid.{u2} β (DivisionMonoid.toDivInvMonoid.{u2} β _inst_4)))) => α -> β) (MonoidHom.hasCoeToFun.{u1, u2} α β (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3))) (Monoid.toMulOneClass.{u2} β (DivInvMonoid.toMonoid.{u2} β (DivisionMonoid.toDivInvMonoid.{u2} β _inst_4)))) f h))
 but is expected to have type
-  forall {α : Type.{u2}} {β : Type.{u1}} [_inst_3 : Group.{u2} α] [_inst_4 : DivisionMonoid.{u1} β] (f : MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) (g : α) (h : α), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : α) => β) (HDiv.hDiv.{u2, u2, u2} α α α (instHDiv.{u2} α (DivInvMonoid.toDiv.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) g h)) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : α) => β) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) α β (MulOneClass.toMul.{u2} α (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3)))) (MulOneClass.toMul.{u1} β (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4))) (MonoidHom.monoidHomClass.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))))) f (HDiv.hDiv.{u2, u2, u2} α α α (instHDiv.{u2} α (DivInvMonoid.toDiv.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) g h)) (HDiv.hDiv.{u1, u1, u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : α) => β) g) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : α) => β) h) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : α) => β) g) (instHDiv.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : α) => β) g) (DivInvMonoid.toDiv.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : α) => β) g) (DivisionMonoid.toDivInvMonoid.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : α) => β) g) _inst_4))) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : α) => β) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) α β (MulOneClass.toMul.{u2} α (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3)))) (MulOneClass.toMul.{u1} β (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4))) (MonoidHom.monoidHomClass.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))))) f g) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : α) => β) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) α β (MulOneClass.toMul.{u2} α (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3)))) (MulOneClass.toMul.{u1} β (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4))) (MonoidHom.monoidHomClass.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))))) f h))
+  forall {α : Type.{u2}} {β : Type.{u1}} [_inst_3 : Group.{u2} α] [_inst_4 : DivisionMonoid.{u1} β] (f : MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) (g : α) (h : α), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : α) => β) (HDiv.hDiv.{u2, u2, u2} α α α (instHDiv.{u2} α (DivInvMonoid.toDiv.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) g h)) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : α) => β) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) α β (MulOneClass.toMul.{u2} α (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3)))) (MulOneClass.toMul.{u1} β (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4))) (MonoidHom.monoidHomClass.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))))) f (HDiv.hDiv.{u2, u2, u2} α α α (instHDiv.{u2} α (DivInvMonoid.toDiv.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) g h)) (HDiv.hDiv.{u1, u1, u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : α) => β) g) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : α) => β) h) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : α) => β) g) (instHDiv.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : α) => β) g) (DivInvMonoid.toDiv.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : α) => β) g) (DivisionMonoid.toDivInvMonoid.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : α) => β) g) _inst_4))) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : α) => β) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) α β (MulOneClass.toMul.{u2} α (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3)))) (MulOneClass.toMul.{u1} β (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4))) (MonoidHom.monoidHomClass.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))))) f g) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : α) => β) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) α β (MulOneClass.toMul.{u2} α (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3)))) (MulOneClass.toMul.{u1} β (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4))) (MonoidHom.monoidHomClass.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))))) f h))
 Case conversion may be inaccurate. Consider using '#align monoid_hom.map_div MonoidHom.map_divₓ'. -/
 /-- Group homomorphisms preserve division. -/
 @[to_additive "Additive group homomorphisms preserve subtraction."]
@@ -2498,7 +2498,7 @@ protected theorem map_div [Group α] [DivisionMonoid β] (f : α →* β) (g h :
 lean 3 declaration is
   forall {α : Type.{u1}} {β : Type.{u2}} [_inst_3 : Group.{u1} α] [_inst_4 : DivisionMonoid.{u2} β] (f : MonoidHom.{u1, u2} α β (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3))) (Monoid.toMulOneClass.{u2} β (DivInvMonoid.toMonoid.{u2} β (DivisionMonoid.toDivInvMonoid.{u2} β _inst_4)))) (g : α) (h : α), Eq.{succ u2} β (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} α β (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3))) (Monoid.toMulOneClass.{u2} β (DivInvMonoid.toMonoid.{u2} β (DivisionMonoid.toDivInvMonoid.{u2} β _inst_4)))) (fun (_x : MonoidHom.{u1, u2} α β (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3))) (Monoid.toMulOneClass.{u2} β (DivInvMonoid.toMonoid.{u2} β (DivisionMonoid.toDivInvMonoid.{u2} β _inst_4)))) => α -> β) (MonoidHom.hasCoeToFun.{u1, u2} α β (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3))) (Monoid.toMulOneClass.{u2} β (DivInvMonoid.toMonoid.{u2} β (DivisionMonoid.toDivInvMonoid.{u2} β _inst_4)))) f (HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toHasMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3))))) g (Inv.inv.{u1} α (DivInvMonoid.toHasInv.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3)) h))) (HMul.hMul.{u2, u2, u2} β β β (instHMul.{u2} β (MulOneClass.toHasMul.{u2} β (Monoid.toMulOneClass.{u2} β (DivInvMonoid.toMonoid.{u2} β (DivisionMonoid.toDivInvMonoid.{u2} β _inst_4))))) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} α β (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3))) (Monoid.toMulOneClass.{u2} β (DivInvMonoid.toMonoid.{u2} β (DivisionMonoid.toDivInvMonoid.{u2} β _inst_4)))) (fun (_x : MonoidHom.{u1, u2} α β (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3))) (Monoid.toMulOneClass.{u2} β (DivInvMonoid.toMonoid.{u2} β (DivisionMonoid.toDivInvMonoid.{u2} β _inst_4)))) => α -> β) (MonoidHom.hasCoeToFun.{u1, u2} α β (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3))) (Monoid.toMulOneClass.{u2} β (DivInvMonoid.toMonoid.{u2} β (DivisionMonoid.toDivInvMonoid.{u2} β _inst_4)))) f g) (Inv.inv.{u2} β (DivInvMonoid.toHasInv.{u2} β (DivisionMonoid.toDivInvMonoid.{u2} β _inst_4)) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} α β (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3))) (Monoid.toMulOneClass.{u2} β (DivInvMonoid.toMonoid.{u2} β (DivisionMonoid.toDivInvMonoid.{u2} β _inst_4)))) (fun (_x : MonoidHom.{u1, u2} α β (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3))) (Monoid.toMulOneClass.{u2} β (DivInvMonoid.toMonoid.{u2} β (DivisionMonoid.toDivInvMonoid.{u2} β _inst_4)))) => α -> β) (MonoidHom.hasCoeToFun.{u1, u2} α β (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3))) (Monoid.toMulOneClass.{u2} β (DivInvMonoid.toMonoid.{u2} β (DivisionMonoid.toDivInvMonoid.{u2} β _inst_4)))) f h)))
 but is expected to have type
-  forall {α : Type.{u2}} {β : Type.{u1}} [_inst_3 : Group.{u2} α] [_inst_4 : DivisionMonoid.{u1} β] (f : MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) (g : α) (h : α), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : α) => β) (HMul.hMul.{u2, u2, u2} α α α (instHMul.{u2} α (MulOneClass.toMul.{u2} α (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))))) g (Inv.inv.{u2} α (InvOneClass.toInv.{u2} α (DivInvOneMonoid.toInvOneClass.{u2} α (DivisionMonoid.toDivInvOneMonoid.{u2} α (Group.toDivisionMonoid.{u2} α _inst_3)))) h))) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : α) => β) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) α β (MulOneClass.toMul.{u2} α (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3)))) (MulOneClass.toMul.{u1} β (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4))) (MonoidHom.monoidHomClass.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))))) f (HMul.hMul.{u2, u2, u2} α α α (instHMul.{u2} α (MulOneClass.toMul.{u2} α (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))))) g (Inv.inv.{u2} α (InvOneClass.toInv.{u2} α (DivInvOneMonoid.toInvOneClass.{u2} α (DivisionMonoid.toDivInvOneMonoid.{u2} α (Group.toDivisionMonoid.{u2} α _inst_3)))) h))) (HMul.hMul.{u1, u1, u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : α) => β) g) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : α) => β) h) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : α) => β) g) (instHMul.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : α) => β) g) (MulOneClass.toMul.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : α) => β) g) (Monoid.toMulOneClass.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : α) => β) g) (DivInvMonoid.toMonoid.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : α) => β) g) (DivisionMonoid.toDivInvMonoid.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : α) => β) g) _inst_4))))) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : α) => β) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) α β (MulOneClass.toMul.{u2} α (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3)))) (MulOneClass.toMul.{u1} β (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4))) (MonoidHom.monoidHomClass.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))))) f g) (Inv.inv.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : α) => β) h) (InvOneClass.toInv.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : α) => β) h) (DivInvOneMonoid.toInvOneClass.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : α) => β) h) (DivisionMonoid.toDivInvOneMonoid.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : α) => β) h) _inst_4))) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : α) => β) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) α β (MulOneClass.toMul.{u2} α (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3)))) (MulOneClass.toMul.{u1} β (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4))) (MonoidHom.monoidHomClass.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))))) f h)))
+  forall {α : Type.{u2}} {β : Type.{u1}} [_inst_3 : Group.{u2} α] [_inst_4 : DivisionMonoid.{u1} β] (f : MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) (g : α) (h : α), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : α) => β) (HMul.hMul.{u2, u2, u2} α α α (instHMul.{u2} α (MulOneClass.toMul.{u2} α (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))))) g (Inv.inv.{u2} α (InvOneClass.toInv.{u2} α (DivInvOneMonoid.toInvOneClass.{u2} α (DivisionMonoid.toDivInvOneMonoid.{u2} α (Group.toDivisionMonoid.{u2} α _inst_3)))) h))) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : α) => β) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) α β (MulOneClass.toMul.{u2} α (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3)))) (MulOneClass.toMul.{u1} β (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4))) (MonoidHom.monoidHomClass.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))))) f (HMul.hMul.{u2, u2, u2} α α α (instHMul.{u2} α (MulOneClass.toMul.{u2} α (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))))) g (Inv.inv.{u2} α (InvOneClass.toInv.{u2} α (DivInvOneMonoid.toInvOneClass.{u2} α (DivisionMonoid.toDivInvOneMonoid.{u2} α (Group.toDivisionMonoid.{u2} α _inst_3)))) h))) (HMul.hMul.{u1, u1, u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : α) => β) g) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : α) => β) h) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : α) => β) g) (instHMul.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : α) => β) g) (MulOneClass.toMul.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : α) => β) g) (Monoid.toMulOneClass.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : α) => β) g) (DivInvMonoid.toMonoid.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : α) => β) g) (DivisionMonoid.toDivInvMonoid.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : α) => β) g) _inst_4))))) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : α) => β) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) α β (MulOneClass.toMul.{u2} α (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3)))) (MulOneClass.toMul.{u1} β (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4))) (MonoidHom.monoidHomClass.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))))) f g) (Inv.inv.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : α) => β) h) (InvOneClass.toInv.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : α) => β) h) (DivInvOneMonoid.toInvOneClass.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : α) => β) h) (DivisionMonoid.toDivInvOneMonoid.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : α) => β) h) _inst_4))) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : α) => β) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) α β (MulOneClass.toMul.{u2} α (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3)))) (MulOneClass.toMul.{u1} β (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4))) (MonoidHom.monoidHomClass.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))))) f h)))
 Case conversion may be inaccurate. Consider using '#align monoid_hom.map_mul_inv MonoidHom.map_mul_invₓ'. -/
 /-- Group homomorphisms preserve division. -/
 @[to_additive "Additive group homomorphisms preserve subtraction."]
@@ -2512,7 +2512,7 @@ protected theorem map_mul_inv [Group α] [DivisionMonoid β] (f : α →* β) (g
 lean 3 declaration is
   forall {F : Type.{u1}} {G : Type.{u2}} {H : Type.{u3}} [_inst_3 : Group.{u2} G] [_inst_4 : MulOneClass.{u3} H] [_inst_5 : MonoidHomClass.{u1, u2, u3} F G H (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3))) _inst_4] (f : F), Iff (Function.Injective.{succ u2, succ u3} G H (coeFn.{succ u1, max (succ u2) (succ u3)} F (fun (_x : F) => G -> H) (FunLike.hasCoeToFun.{succ u1, succ u2, succ u3} F G (fun (_x : G) => H) (MulHomClass.toFunLike.{u1, u2, u3} F G H (MulOneClass.toHasMul.{u2} G (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))) (MulOneClass.toHasMul.{u3} H _inst_4) (MonoidHomClass.toMulHomClass.{u1, u2, u3} F G H (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3))) _inst_4 _inst_5))) f)) (forall (a : G), (Eq.{succ u3} H (coeFn.{succ u1, max (succ u2) (succ u3)} F (fun (_x : F) => G -> H) (FunLike.hasCoeToFun.{succ u1, succ u2, succ u3} F G (fun (_x : G) => H) (MulHomClass.toFunLike.{u1, u2, u3} F G H (MulOneClass.toHasMul.{u2} G (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))) (MulOneClass.toHasMul.{u3} H _inst_4) (MonoidHomClass.toMulHomClass.{u1, u2, u3} F G H (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3))) _inst_4 _inst_5))) f a) (OfNat.ofNat.{u3} H 1 (OfNat.mk.{u3} H 1 (One.one.{u3} H (MulOneClass.toHasOne.{u3} H _inst_4))))) -> (Eq.{succ u2} G a (OfNat.ofNat.{u2} G 1 (OfNat.mk.{u2} G 1 (One.one.{u2} G (MulOneClass.toHasOne.{u2} G (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))))))))
 but is expected to have type
-  forall {F : Type.{u1}} {G : Type.{u3}} {H : Type.{u2}} [_inst_3 : Group.{u3} G] [_inst_4 : MulOneClass.{u2} H] [_inst_5 : MonoidHomClass.{u1, u3, u2} F G H (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3))) _inst_4] (f : F), Iff (Function.Injective.{succ u3, succ u2} G H (FunLike.coe.{succ u1, succ u3, succ u2} F G (fun (_x : G) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : G) => H) _x) (MulHomClass.toFunLike.{u1, u3, u2} F G H (MulOneClass.toMul.{u3} G (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3)))) (MulOneClass.toMul.{u2} H _inst_4) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F G H (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3))) _inst_4 _inst_5)) f)) (forall (a : G), (Eq.{succ u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : G) => H) a) (FunLike.coe.{succ u1, succ u3, succ u2} F G (fun (_x : G) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : G) => H) _x) (MulHomClass.toFunLike.{u1, u3, u2} F G H (MulOneClass.toMul.{u3} G (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3)))) (MulOneClass.toMul.{u2} H _inst_4) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F G H (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3))) _inst_4 _inst_5)) f a) (OfNat.ofNat.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : G) => H) a) 1 (One.toOfNat1.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : G) => H) a) (MulOneClass.toOne.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : G) => H) a) _inst_4)))) -> (Eq.{succ u3} G a (OfNat.ofNat.{u3} G 1 (One.toOfNat1.{u3} G (InvOneClass.toOne.{u3} G (DivInvOneMonoid.toInvOneClass.{u3} G (DivisionMonoid.toDivInvOneMonoid.{u3} G (Group.toDivisionMonoid.{u3} G _inst_3))))))))
+  forall {F : Type.{u1}} {G : Type.{u3}} {H : Type.{u2}} [_inst_3 : Group.{u3} G] [_inst_4 : MulOneClass.{u2} H] [_inst_5 : MonoidHomClass.{u1, u3, u2} F G H (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3))) _inst_4] (f : F), Iff (Function.Injective.{succ u3, succ u2} G H (FunLike.coe.{succ u1, succ u3, succ u2} F G (fun (_x : G) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : G) => H) _x) (MulHomClass.toFunLike.{u1, u3, u2} F G H (MulOneClass.toMul.{u3} G (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3)))) (MulOneClass.toMul.{u2} H _inst_4) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F G H (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3))) _inst_4 _inst_5)) f)) (forall (a : G), (Eq.{succ u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : G) => H) a) (FunLike.coe.{succ u1, succ u3, succ u2} F G (fun (_x : G) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : G) => H) _x) (MulHomClass.toFunLike.{u1, u3, u2} F G H (MulOneClass.toMul.{u3} G (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3)))) (MulOneClass.toMul.{u2} H _inst_4) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F G H (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3))) _inst_4 _inst_5)) f a) (OfNat.ofNat.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : G) => H) a) 1 (One.toOfNat1.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : G) => H) a) (MulOneClass.toOne.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : G) => H) a) _inst_4)))) -> (Eq.{succ u3} G a (OfNat.ofNat.{u3} G 1 (One.toOfNat1.{u3} G (InvOneClass.toOne.{u3} G (DivInvOneMonoid.toInvOneClass.{u3} G (DivisionMonoid.toDivInvOneMonoid.{u3} G (Group.toDivisionMonoid.{u3} G _inst_3))))))))
 Case conversion may be inaccurate. Consider using '#align injective_iff_map_eq_one injective_iff_map_eq_oneₓ'. -/
 /-- A homomorphism from a group to a monoid is injective iff its kernel is trivial.
 For the iff statement on the triviality of the kernel, see `injective_iff_map_eq_one'`.  -/
@@ -2529,7 +2529,7 @@ theorem injective_iff_map_eq_one {G H} [Group G] [MulOneClass H] [MonoidHomClass
 lean 3 declaration is
   forall {F : Type.{u1}} {G : Type.{u2}} {H : Type.{u3}} [_inst_3 : Group.{u2} G] [_inst_4 : MulOneClass.{u3} H] [_inst_5 : MonoidHomClass.{u1, u2, u3} F G H (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3))) _inst_4] (f : F), Iff (Function.Injective.{succ u2, succ u3} G H (coeFn.{succ u1, max (succ u2) (succ u3)} F (fun (_x : F) => G -> H) (FunLike.hasCoeToFun.{succ u1, succ u2, succ u3} F G (fun (_x : G) => H) (MulHomClass.toFunLike.{u1, u2, u3} F G H (MulOneClass.toHasMul.{u2} G (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))) (MulOneClass.toHasMul.{u3} H _inst_4) (MonoidHomClass.toMulHomClass.{u1, u2, u3} F G H (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3))) _inst_4 _inst_5))) f)) (forall (a : G), Iff (Eq.{succ u3} H (coeFn.{succ u1, max (succ u2) (succ u3)} F (fun (_x : F) => G -> H) (FunLike.hasCoeToFun.{succ u1, succ u2, succ u3} F G (fun (_x : G) => H) (MulHomClass.toFunLike.{u1, u2, u3} F G H (MulOneClass.toHasMul.{u2} G (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))) (MulOneClass.toHasMul.{u3} H _inst_4) (MonoidHomClass.toMulHomClass.{u1, u2, u3} F G H (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3))) _inst_4 _inst_5))) f a) (OfNat.ofNat.{u3} H 1 (OfNat.mk.{u3} H 1 (One.one.{u3} H (MulOneClass.toHasOne.{u3} H _inst_4))))) (Eq.{succ u2} G a (OfNat.ofNat.{u2} G 1 (OfNat.mk.{u2} G 1 (One.one.{u2} G (MulOneClass.toHasOne.{u2} G (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))))))))
 but is expected to have type
-  forall {F : Type.{u1}} {G : Type.{u3}} {H : Type.{u2}} [_inst_3 : Group.{u3} G] [_inst_4 : MulOneClass.{u2} H] [_inst_5 : MonoidHomClass.{u1, u3, u2} F G H (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3))) _inst_4] (f : F), Iff (Function.Injective.{succ u3, succ u2} G H (FunLike.coe.{succ u1, succ u3, succ u2} F G (fun (_x : G) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : G) => H) _x) (MulHomClass.toFunLike.{u1, u3, u2} F G H (MulOneClass.toMul.{u3} G (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3)))) (MulOneClass.toMul.{u2} H _inst_4) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F G H (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3))) _inst_4 _inst_5)) f)) (forall (a : G), Iff (Eq.{succ u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : G) => H) a) (FunLike.coe.{succ u1, succ u3, succ u2} F G (fun (_x : G) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : G) => H) _x) (MulHomClass.toFunLike.{u1, u3, u2} F G H (MulOneClass.toMul.{u3} G (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3)))) (MulOneClass.toMul.{u2} H _inst_4) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F G H (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3))) _inst_4 _inst_5)) f a) (OfNat.ofNat.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : G) => H) a) 1 (One.toOfNat1.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : G) => H) a) (MulOneClass.toOne.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : G) => H) a) _inst_4)))) (Eq.{succ u3} G a (OfNat.ofNat.{u3} G 1 (One.toOfNat1.{u3} G (InvOneClass.toOne.{u3} G (DivInvOneMonoid.toInvOneClass.{u3} G (DivisionMonoid.toDivInvOneMonoid.{u3} G (Group.toDivisionMonoid.{u3} G _inst_3))))))))
+  forall {F : Type.{u1}} {G : Type.{u3}} {H : Type.{u2}} [_inst_3 : Group.{u3} G] [_inst_4 : MulOneClass.{u2} H] [_inst_5 : MonoidHomClass.{u1, u3, u2} F G H (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3))) _inst_4] (f : F), Iff (Function.Injective.{succ u3, succ u2} G H (FunLike.coe.{succ u1, succ u3, succ u2} F G (fun (_x : G) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : G) => H) _x) (MulHomClass.toFunLike.{u1, u3, u2} F G H (MulOneClass.toMul.{u3} G (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3)))) (MulOneClass.toMul.{u2} H _inst_4) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F G H (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3))) _inst_4 _inst_5)) f)) (forall (a : G), Iff (Eq.{succ u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : G) => H) a) (FunLike.coe.{succ u1, succ u3, succ u2} F G (fun (_x : G) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : G) => H) _x) (MulHomClass.toFunLike.{u1, u3, u2} F G H (MulOneClass.toMul.{u3} G (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3)))) (MulOneClass.toMul.{u2} H _inst_4) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F G H (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3))) _inst_4 _inst_5)) f a) (OfNat.ofNat.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : G) => H) a) 1 (One.toOfNat1.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : G) => H) a) (MulOneClass.toOne.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : G) => H) a) _inst_4)))) (Eq.{succ u3} G a (OfNat.ofNat.{u3} G 1 (One.toOfNat1.{u3} G (InvOneClass.toOne.{u3} G (DivInvOneMonoid.toInvOneClass.{u3} G (DivisionMonoid.toDivInvOneMonoid.{u3} G (Group.toDivisionMonoid.{u3} G _inst_3))))))))
 Case conversion may be inaccurate. Consider using '#align injective_iff_map_eq_one' injective_iff_map_eq_one'ₓ'. -/
 /-- A homomorphism from a group to a monoid is injective iff its kernel is trivial,
 stated as an iff on the triviality of the kernel.
@@ -2592,7 +2592,7 @@ def ofMapMulInv {H : Type _} [Group H] (f : G → H)
 lean 3 declaration is
   forall {G : Type.{u1}} [_inst_1 : Group.{u1} G] {H : Type.{u2}} [_inst_3 : Group.{u2} H] (f : G -> H) (map_div : forall (a : G) (b : G), Eq.{succ u2} H (f (HMul.hMul.{u1, u1, u1} G G G (instHMul.{u1} G (MulOneClass.toHasMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))))) a (Inv.inv.{u1} G (DivInvMonoid.toHasInv.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1)) b))) (HMul.hMul.{u2, u2, u2} H H H (instHMul.{u2} H (MulOneClass.toHasMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_3))))) (f a) (Inv.inv.{u2} H (DivInvMonoid.toHasInv.{u2} H (Group.toDivInvMonoid.{u2} H _inst_3)) (f b)))), Eq.{max (succ u1) (succ u2)} (G -> H) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_3)))) (fun (_x : MonoidHom.{u1, u2} G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_3)))) => G -> H) (MonoidHom.hasCoeToFun.{u1, u2} G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_3)))) (MonoidHom.ofMapMulInv.{u1, u2} G _inst_1 H _inst_3 f map_div)) f
 but is expected to have type
-  forall {G : Type.{u1}} [_inst_1 : Group.{u1} G] {H : Type.{u2}} [_inst_3 : Group.{u2} H] (f : G -> H) (map_div : forall (a : G) (b : G), Eq.{succ u2} H (f (HMul.hMul.{u1, u1, u1} G G G (instHMul.{u1} G (MulOneClass.toMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))))) a (Inv.inv.{u1} G (InvOneClass.toInv.{u1} G (DivInvOneMonoid.toInvOneClass.{u1} G (DivisionMonoid.toDivInvOneMonoid.{u1} G (Group.toDivisionMonoid.{u1} G _inst_1)))) b))) (HMul.hMul.{u2, u2, u2} H H H (instHMul.{u2} H (MulOneClass.toMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_3))))) (f a) (Inv.inv.{u2} H (InvOneClass.toInv.{u2} H (DivInvOneMonoid.toInvOneClass.{u2} H (DivisionMonoid.toDivInvOneMonoid.{u2} H (Group.toDivisionMonoid.{u2} H _inst_3)))) (f b)))), Eq.{max (succ u1) (succ u2)} (G -> H) (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (MonoidHom.{u1, u2} G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_3)))) G (fun (_x : G) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : G) => H) _x) (MulHomClass.toFunLike.{max u1 u2, u1, u2} (MonoidHom.{u1, u2} G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_3)))) G H (MulOneClass.toMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1)))) (MulOneClass.toMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_3)))) (MonoidHomClass.toMulHomClass.{max u1 u2, u1, u2} (MonoidHom.{u1, u2} G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_3)))) G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_3))) (MonoidHom.monoidHomClass.{u1, u2} G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_3)))))) (MonoidHom.ofMapMulInv.{u1, u2} G _inst_1 H _inst_3 f map_div)) f
+  forall {G : Type.{u1}} [_inst_1 : Group.{u1} G] {H : Type.{u2}} [_inst_3 : Group.{u2} H] (f : G -> H) (map_div : forall (a : G) (b : G), Eq.{succ u2} H (f (HMul.hMul.{u1, u1, u1} G G G (instHMul.{u1} G (MulOneClass.toMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))))) a (Inv.inv.{u1} G (InvOneClass.toInv.{u1} G (DivInvOneMonoid.toInvOneClass.{u1} G (DivisionMonoid.toDivInvOneMonoid.{u1} G (Group.toDivisionMonoid.{u1} G _inst_1)))) b))) (HMul.hMul.{u2, u2, u2} H H H (instHMul.{u2} H (MulOneClass.toMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_3))))) (f a) (Inv.inv.{u2} H (InvOneClass.toInv.{u2} H (DivInvOneMonoid.toInvOneClass.{u2} H (DivisionMonoid.toDivInvOneMonoid.{u2} H (Group.toDivisionMonoid.{u2} H _inst_3)))) (f b)))), Eq.{max (succ u1) (succ u2)} (G -> H) (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (MonoidHom.{u1, u2} G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_3)))) G (fun (_x : G) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : G) => H) _x) (MulHomClass.toFunLike.{max u1 u2, u1, u2} (MonoidHom.{u1, u2} G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_3)))) G H (MulOneClass.toMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1)))) (MulOneClass.toMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_3)))) (MonoidHomClass.toMulHomClass.{max u1 u2, u1, u2} (MonoidHom.{u1, u2} G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_3)))) G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_3))) (MonoidHom.monoidHomClass.{u1, u2} G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_3)))))) (MonoidHom.ofMapMulInv.{u1, u2} G _inst_1 H _inst_3 f map_div)) f
 Case conversion may be inaccurate. Consider using '#align monoid_hom.coe_of_map_mul_inv MonoidHom.coe_of_map_mul_invₓ'. -/
 @[simp, to_additive]
 theorem coe_of_map_mul_inv {H : Type _} [Group H] (f : G → H)
@@ -2618,7 +2618,7 @@ def ofMapDiv {H : Type _} [Group H] (f : G → H) (hf : ∀ x y, f (x / y) = f x
 lean 3 declaration is
   forall {G : Type.{u1}} [_inst_1 : Group.{u1} G] {H : Type.{u2}} [_inst_3 : Group.{u2} H] (f : G -> H) (hf : forall (x : G) (y : G), Eq.{succ u2} H (f (HDiv.hDiv.{u1, u1, u1} G G G (instHDiv.{u1} G (DivInvMonoid.toHasDiv.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) x y)) (HDiv.hDiv.{u2, u2, u2} H H H (instHDiv.{u2} H (DivInvMonoid.toHasDiv.{u2} H (Group.toDivInvMonoid.{u2} H _inst_3))) (f x) (f y))), Eq.{max (succ u1) (succ u2)} (G -> H) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_3)))) (fun (_x : MonoidHom.{u1, u2} G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_3)))) => G -> H) (MonoidHom.hasCoeToFun.{u1, u2} G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_3)))) (MonoidHom.ofMapDiv.{u1, u2} G _inst_1 H _inst_3 f hf)) f
 but is expected to have type
-  forall {G : Type.{u1}} [_inst_1 : Group.{u1} G] {H : Type.{u2}} [_inst_3 : Group.{u2} H] (f : G -> H) (hf : forall (x : G) (y : G), Eq.{succ u2} H (f (HDiv.hDiv.{u1, u1, u1} G G G (instHDiv.{u1} G (DivInvMonoid.toDiv.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) x y)) (HDiv.hDiv.{u2, u2, u2} H H H (instHDiv.{u2} H (DivInvMonoid.toDiv.{u2} H (Group.toDivInvMonoid.{u2} H _inst_3))) (f x) (f y))), Eq.{max (succ u1) (succ u2)} (G -> H) (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (MonoidHom.{u1, u2} G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_3)))) G (fun (_x : G) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : G) => H) _x) (MulHomClass.toFunLike.{max u1 u2, u1, u2} (MonoidHom.{u1, u2} G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_3)))) G H (MulOneClass.toMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1)))) (MulOneClass.toMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_3)))) (MonoidHomClass.toMulHomClass.{max u1 u2, u1, u2} (MonoidHom.{u1, u2} G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_3)))) G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_3))) (MonoidHom.monoidHomClass.{u1, u2} G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_3)))))) (MonoidHom.ofMapDiv.{u1, u2} G _inst_1 H _inst_3 f hf)) f
+  forall {G : Type.{u1}} [_inst_1 : Group.{u1} G] {H : Type.{u2}} [_inst_3 : Group.{u2} H] (f : G -> H) (hf : forall (x : G) (y : G), Eq.{succ u2} H (f (HDiv.hDiv.{u1, u1, u1} G G G (instHDiv.{u1} G (DivInvMonoid.toDiv.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) x y)) (HDiv.hDiv.{u2, u2, u2} H H H (instHDiv.{u2} H (DivInvMonoid.toDiv.{u2} H (Group.toDivInvMonoid.{u2} H _inst_3))) (f x) (f y))), Eq.{max (succ u1) (succ u2)} (G -> H) (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (MonoidHom.{u1, u2} G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_3)))) G (fun (_x : G) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : G) => H) _x) (MulHomClass.toFunLike.{max u1 u2, u1, u2} (MonoidHom.{u1, u2} G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_3)))) G H (MulOneClass.toMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1)))) (MulOneClass.toMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_3)))) (MonoidHomClass.toMulHomClass.{max u1 u2, u1, u2} (MonoidHom.{u1, u2} G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_3)))) G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_3))) (MonoidHom.monoidHomClass.{u1, u2} G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_3)))))) (MonoidHom.ofMapDiv.{u1, u2} G _inst_1 H _inst_3 f hf)) f
 Case conversion may be inaccurate. Consider using '#align monoid_hom.coe_of_map_div MonoidHom.coe_of_map_divₓ'. -/
 @[simp, to_additive]
 theorem coe_of_map_div {H : Type _} [Group H] (f : G → H) (hf : ∀ x y, f (x / y) = f x / f y) :
@@ -2641,7 +2641,7 @@ add_decl_doc AddMonoidHom.hasNeg
 lean 3 declaration is
   forall {M : Type.{u1}} {G : Type.{u2}} {mM : MulOneClass.{u1} M} {gG : CommGroup.{u2} G} (f : MonoidHom.{u1, u2} M G mM (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G (CommGroup.toGroup.{u2} G gG))))) (x : M), Eq.{succ u2} G (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} M G mM (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G (CommGroup.toGroup.{u2} G gG))))) (fun (_x : MonoidHom.{u1, u2} M G mM (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G (CommGroup.toGroup.{u2} G gG))))) => M -> G) (MonoidHom.hasCoeToFun.{u1, u2} M G mM (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G (CommGroup.toGroup.{u2} G gG))))) (Inv.inv.{max u2 u1} (MonoidHom.{u1, u2} M G mM (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G (CommGroup.toGroup.{u2} G gG))))) (MonoidHom.hasInv.{u1, u2} M G mM gG) f) x) (Inv.inv.{u2} G (DivInvMonoid.toHasInv.{u2} G (Group.toDivInvMonoid.{u2} G (CommGroup.toGroup.{u2} G gG))) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} M G mM (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G (CommGroup.toGroup.{u2} G gG))))) (fun (_x : MonoidHom.{u1, u2} M G mM (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G (CommGroup.toGroup.{u2} G gG))))) => M -> G) (MonoidHom.hasCoeToFun.{u1, u2} M G mM (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G (CommGroup.toGroup.{u2} G gG))))) f x))
 but is expected to have type
-  forall {M : Type.{u2}} {G : Type.{u1}} [mM : MulOneClass.{u2} M] [gG : CommGroup.{u1} G] (f : MonoidHom.{u2, u1} M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))) (x : M), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => G) x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => G) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))) M G (MulOneClass.toMul.{u2} M mM) (MulOneClass.toMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))) M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG)))) (MonoidHom.monoidHomClass.{u2, u1} M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))))) (Inv.inv.{max u2 u1} (MonoidHom.{u2, u1} M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))) (MonoidHom.instInvMonoidHomToMulOneClassToMonoidToDivInvMonoidToGroup.{u2, u1} M G mM gG) f) x) (Inv.inv.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => G) x) (InvOneClass.toInv.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => G) x) (DivInvOneMonoid.toInvOneClass.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => G) x) (DivisionMonoid.toDivInvOneMonoid.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => G) x) (DivisionCommMonoid.toDivisionMonoid.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => G) x) (CommGroup.toDivisionCommMonoid.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => G) x) gG))))) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => G) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))) M G (MulOneClass.toMul.{u2} M mM) (MulOneClass.toMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))) M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG)))) (MonoidHom.monoidHomClass.{u2, u1} M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))))) f x))
+  forall {M : Type.{u2}} {G : Type.{u1}} [mM : MulOneClass.{u2} M] [gG : CommGroup.{u1} G] (f : MonoidHom.{u2, u1} M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))) (x : M), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => G) x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => G) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))) M G (MulOneClass.toMul.{u2} M mM) (MulOneClass.toMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))) M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG)))) (MonoidHom.monoidHomClass.{u2, u1} M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))))) (Inv.inv.{max u2 u1} (MonoidHom.{u2, u1} M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))) (MonoidHom.instInvMonoidHomToMulOneClassToMonoidToDivInvMonoidToGroup.{u2, u1} M G mM gG) f) x) (Inv.inv.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => G) x) (InvOneClass.toInv.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => G) x) (DivInvOneMonoid.toInvOneClass.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => G) x) (DivisionMonoid.toDivInvOneMonoid.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => G) x) (DivisionCommMonoid.toDivisionMonoid.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => G) x) (CommGroup.toDivisionCommMonoid.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => G) x) gG))))) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => G) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))) M G (MulOneClass.toMul.{u2} M mM) (MulOneClass.toMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))) M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG)))) (MonoidHom.monoidHomClass.{u2, u1} M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))))) f x))
 Case conversion may be inaccurate. Consider using '#align monoid_hom.inv_apply MonoidHom.inv_applyₓ'. -/
 @[simp, to_additive]
 theorem inv_apply {M G} {mM : MulOneClass M} {gG : CommGroup G} (f : M →* G) (x : M) :
@@ -2694,7 +2694,7 @@ add_decl_doc AddMonoidHom.hasSub
 lean 3 declaration is
   forall {M : Type.{u1}} {G : Type.{u2}} {mM : MulOneClass.{u1} M} {gG : CommGroup.{u2} G} (f : MonoidHom.{u1, u2} M G mM (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G (CommGroup.toGroup.{u2} G gG))))) (g : MonoidHom.{u1, u2} M G mM (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G (CommGroup.toGroup.{u2} G gG))))) (x : M), Eq.{succ u2} G (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} M G mM (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G (CommGroup.toGroup.{u2} G gG))))) (fun (_x : MonoidHom.{u1, u2} M G mM (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G (CommGroup.toGroup.{u2} G gG))))) => M -> G) (MonoidHom.hasCoeToFun.{u1, u2} M G mM (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G (CommGroup.toGroup.{u2} G gG))))) (HDiv.hDiv.{max u2 u1, max u2 u1, max u2 u1} (MonoidHom.{u1, u2} M G mM (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G (CommGroup.toGroup.{u2} G gG))))) (MonoidHom.{u1, u2} M G mM (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G (CommGroup.toGroup.{u2} G gG))))) (MonoidHom.{u1, u2} M G mM (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G (CommGroup.toGroup.{u2} G gG))))) (instHDiv.{max u2 u1} (MonoidHom.{u1, u2} M G mM (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G (CommGroup.toGroup.{u2} G gG))))) (MonoidHom.hasDiv.{u1, u2} M G mM gG)) f g) x) (HDiv.hDiv.{u2, u2, u2} G G G (instHDiv.{u2} G (DivInvMonoid.toHasDiv.{u2} G (Group.toDivInvMonoid.{u2} G (CommGroup.toGroup.{u2} G gG)))) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} M G mM (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G (CommGroup.toGroup.{u2} G gG))))) (fun (_x : MonoidHom.{u1, u2} M G mM (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G (CommGroup.toGroup.{u2} G gG))))) => M -> G) (MonoidHom.hasCoeToFun.{u1, u2} M G mM (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G (CommGroup.toGroup.{u2} G gG))))) f x) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} M G mM (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G (CommGroup.toGroup.{u2} G gG))))) (fun (_x : MonoidHom.{u1, u2} M G mM (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G (CommGroup.toGroup.{u2} G gG))))) => M -> G) (MonoidHom.hasCoeToFun.{u1, u2} M G mM (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G (CommGroup.toGroup.{u2} G gG))))) g x))
 but is expected to have type
-  forall {M : Type.{u2}} {G : Type.{u1}} [mM : MulOneClass.{u2} M] [gG : CommGroup.{u1} G] (f : MonoidHom.{u2, u1} M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))) (g : MonoidHom.{u2, u1} M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))) (x : M), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => G) x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => G) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))) M G (MulOneClass.toMul.{u2} M mM) (MulOneClass.toMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))) M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG)))) (MonoidHom.monoidHomClass.{u2, u1} M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))))) (HDiv.hDiv.{max u2 u1, max u2 u1, max u2 u1} (MonoidHom.{u2, u1} M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))) (MonoidHom.{u2, u1} M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))) (MonoidHom.{u2, u1} M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))) (instHDiv.{max u2 u1} (MonoidHom.{u2, u1} M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))) (MonoidHom.instDivMonoidHomToMulOneClassToMonoidToDivInvMonoidToGroup.{u2, u1} M G mM gG)) f g) x) (HDiv.hDiv.{u1, u1, u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => G) x) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => G) x) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => G) x) (instHDiv.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => G) x) (DivInvMonoid.toDiv.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => G) x) (Group.toDivInvMonoid.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => G) x) (CommGroup.toGroup.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => G) x) gG)))) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => G) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))) M G (MulOneClass.toMul.{u2} M mM) (MulOneClass.toMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))) M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG)))) (MonoidHom.monoidHomClass.{u2, u1} M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))))) f x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => G) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))) M G (MulOneClass.toMul.{u2} M mM) (MulOneClass.toMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))) M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG)))) (MonoidHom.monoidHomClass.{u2, u1} M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))))) g x))
+  forall {M : Type.{u2}} {G : Type.{u1}} [mM : MulOneClass.{u2} M] [gG : CommGroup.{u1} G] (f : MonoidHom.{u2, u1} M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))) (g : MonoidHom.{u2, u1} M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))) (x : M), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => G) x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => G) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))) M G (MulOneClass.toMul.{u2} M mM) (MulOneClass.toMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))) M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG)))) (MonoidHom.monoidHomClass.{u2, u1} M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))))) (HDiv.hDiv.{max u2 u1, max u2 u1, max u2 u1} (MonoidHom.{u2, u1} M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))) (MonoidHom.{u2, u1} M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))) (MonoidHom.{u2, u1} M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))) (instHDiv.{max u2 u1} (MonoidHom.{u2, u1} M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))) (MonoidHom.instDivMonoidHomToMulOneClassToMonoidToDivInvMonoidToGroup.{u2, u1} M G mM gG)) f g) x) (HDiv.hDiv.{u1, u1, u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => G) x) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => G) x) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => G) x) (instHDiv.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => G) x) (DivInvMonoid.toDiv.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => G) x) (Group.toDivInvMonoid.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => G) x) (CommGroup.toGroup.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => G) x) gG)))) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => G) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))) M G (MulOneClass.toMul.{u2} M mM) (MulOneClass.toMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))) M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG)))) (MonoidHom.monoidHomClass.{u2, u1} M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))))) f x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2397 : M) => G) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))) M G (MulOneClass.toMul.{u2} M mM) (MulOneClass.toMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))) M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG)))) (MonoidHom.monoidHomClass.{u2, u1} M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))))) g x))
 Case conversion may be inaccurate. Consider using '#align monoid_hom.div_apply MonoidHom.div_applyₓ'. -/
 @[simp, to_additive]
 theorem div_apply {M G} {mM : MulOneClass M} {gG : CommGroup G} (f g : M →* G) (x : M) :
Diff
@@ -688,7 +688,7 @@ section Coes
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} {mM : MulOneClass.{u1} M} {mN : MulOneClass.{u2} N}, Coe.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (MonoidHom.{u1, u2} M N mM mN) (OneHom.{u1, u2} M N (MulOneClass.toHasOne.{u1} M mM) (MulOneClass.toHasOne.{u2} N mN))
 but is expected to have type
-  forall {M : Type.{u1}} {N : Type.{u2}} {mM : MulOneClass.{u1} M} {mN : MulOneClass.{u2} N}, Coe.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (MonoidHom.{u1, u2} M N mM mN) (OneHom.{u1, u2} M N (MulOneClass.toOne.{u1} M mM) (MulOneClass.toOne.{u2} N mN))
+  forall {M : Type.{u1}} {N : Type.{u2}} [mM : MulOneClass.{u1} M] [mN : MulOneClass.{u2} N], Coe.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (MonoidHom.{u1, u2} M N mM mN) (OneHom.{u1, u2} M N (MulOneClass.toOne.{u1} M mM) (MulOneClass.toOne.{u2} N mN))
 Case conversion may be inaccurate. Consider using '#align monoid_hom.has_coe_to_one_hom MonoidHom.coeToOneHomₓ'. -/
 @[to_additive]
 instance MonoidHom.coeToOneHom {mM : MulOneClass M} {mN : MulOneClass N} :
@@ -701,7 +701,7 @@ instance MonoidHom.coeToOneHom {mM : MulOneClass M} {mN : MulOneClass N} :
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} {mM : MulOneClass.{u1} M} {mN : MulOneClass.{u2} N}, Coe.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (MonoidHom.{u1, u2} M N mM mN) (MulHom.{u1, u2} M N (MulOneClass.toHasMul.{u1} M mM) (MulOneClass.toHasMul.{u2} N mN))
 but is expected to have type
-  forall {M : Type.{u1}} {N : Type.{u2}} {mM : MulOneClass.{u1} M} {mN : MulOneClass.{u2} N}, Coe.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (MonoidHom.{u1, u2} M N mM mN) (MulHom.{u1, u2} M N (MulOneClass.toMul.{u1} M mM) (MulOneClass.toMul.{u2} N mN))
+  forall {M : Type.{u1}} {N : Type.{u2}} [mM : MulOneClass.{u1} M] [mN : MulOneClass.{u2} N], Coe.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (MonoidHom.{u1, u2} M N mM mN) (MulHom.{u1, u2} M N (MulOneClass.toMul.{u1} M mM) (MulOneClass.toMul.{u2} N mN))
 Case conversion may be inaccurate. Consider using '#align monoid_hom.has_coe_to_mul_hom MonoidHom.coeToMulHomₓ'. -/
 @[to_additive]
 instance MonoidHom.coeToMulHom {mM : MulOneClass M} {mN : MulOneClass N} : Coe (M →* N) (M →ₙ* N) :=
@@ -720,7 +720,7 @@ instance MonoidWithZeroHom.coeToMonoidHom {mM : MulZeroOneClass M} {mN : MulZero
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} {mM : MulZeroOneClass.{u1} M} {mN : MulZeroOneClass.{u2} N}, Coe.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (MonoidWithZeroHom.{u1, u2} M N mM mN) (ZeroHom.{u1, u2} M N (MulZeroClass.toHasZero.{u1} M (MulZeroOneClass.toMulZeroClass.{u1} M mM)) (MulZeroClass.toHasZero.{u2} N (MulZeroOneClass.toMulZeroClass.{u2} N mN)))
 but is expected to have type
-  forall {M : Type.{u1}} {N : Type.{u2}} {mM : MulZeroOneClass.{u1} M} {mN : MulZeroOneClass.{u2} N}, Coe.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (MonoidWithZeroHom.{u1, u2} M N mM mN) (ZeroHom.{u1, u2} M N (MulZeroOneClass.toZero.{u1} M mM) (MulZeroOneClass.toZero.{u2} N mN))
+  forall {M : Type.{u1}} {N : Type.{u2}} [mM : MulZeroOneClass.{u1} M] [mN : MulZeroOneClass.{u2} N], Coe.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (MonoidWithZeroHom.{u1, u2} M N mM mN) (ZeroHom.{u1, u2} M N (MulZeroOneClass.toZero.{u1} M mM) (MulZeroOneClass.toZero.{u2} N mN))
 Case conversion may be inaccurate. Consider using '#align monoid_with_zero_hom.has_coe_to_zero_hom MonoidWithZeroHom.coeToZeroHomₓ'. -/
 instance MonoidWithZeroHom.coeToZeroHom {mM : MulZeroOneClass M} {mN : MulZeroOneClass N} :
     Coe (M →*₀ N) (ZeroHom M N) :=
@@ -1322,7 +1322,7 @@ theorem MulHom.coe_copy_eq {hM : Mul M} {hN : Mul N} (f : M →ₙ* N) (f' : M 
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} {hM : MulOneClass.{u1} M} {hN : MulOneClass.{u2} N} (f : MonoidHom.{u1, u2} M N hM hN) (f' : M -> N), (Eq.{max (succ u1) (succ u2)} (M -> N) f' (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} M N hM hN) (fun (_x : MonoidHom.{u1, u2} M N hM hN) => M -> N) (MonoidHom.hasCoeToFun.{u1, u2} M N hM hN) f)) -> (MonoidHom.{u1, u2} M N hM hN)
 but is expected to have type
-  forall {M : Type.{u1}} {N : Type.{u2}} {hM : MulOneClass.{u1} M} {hN : MulOneClass.{u2} N} (f : MonoidHom.{u1, u2} M N hM hN) (f' : M -> N), (Eq.{max (succ u1) (succ u2)} (M -> N) f' (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (MonoidHom.{u1, u2} M N hM hN) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{max u1 u2, u1, u2} (MonoidHom.{u1, u2} M N hM hN) M N (MulOneClass.toMul.{u1} M hM) (MulOneClass.toMul.{u2} N hN) (MonoidHomClass.toMulHomClass.{max u1 u2, u1, u2} (MonoidHom.{u1, u2} M N hM hN) M N hM hN (MonoidHom.monoidHomClass.{u1, u2} M N hM hN))) f)) -> (MonoidHom.{u1, u2} M N hM hN)
+  forall {M : Type.{u1}} {N : Type.{u2}} [hM : MulOneClass.{u1} M] [hN : MulOneClass.{u2} N] (f : MonoidHom.{u1, u2} M N hM hN) (f' : M -> N), (Eq.{max (succ u1) (succ u2)} (M -> N) f' (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (MonoidHom.{u1, u2} M N hM hN) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{max u1 u2, u1, u2} (MonoidHom.{u1, u2} M N hM hN) M N (MulOneClass.toMul.{u1} M hM) (MulOneClass.toMul.{u2} N hN) (MonoidHomClass.toMulHomClass.{max u1 u2, u1, u2} (MonoidHom.{u1, u2} M N hM hN) M N hM hN (MonoidHom.monoidHomClass.{u1, u2} M N hM hN))) f)) -> (MonoidHom.{u1, u2} M N hM hN)
 Case conversion may be inaccurate. Consider using '#align monoid_hom.copy MonoidHom.copyₓ'. -/
 /-- Copy of a `monoid_hom` with a new `to_fun` equal to the old one. Useful to fix
 definitional equalities. -/
@@ -1364,7 +1364,7 @@ theorem MonoidHom.copy_eq {hM : MulOneClass M} {hN : MulOneClass N} (f : M →*
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} {hM : MulZeroOneClass.{u1} M} {hN : MulZeroOneClass.{u2} N} (f : MonoidWithZeroHom.{u1, u2} M N hM hN) (f' : M -> N), (Eq.{max (succ u1) (succ u2)} (M -> N) f' (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidWithZeroHom.{u1, u2} M N hM hN) (fun (_x : MonoidWithZeroHom.{u1, u2} M N hM hN) => M -> N) (MonoidWithZeroHom.hasCoeToFun.{u1, u2} M N hM hN) f)) -> (MonoidHom.{u1, u2} M N (MulZeroOneClass.toMulOneClass.{u1} M hM) (MulZeroOneClass.toMulOneClass.{u2} N hN))
 but is expected to have type
-  forall {M : Type.{u1}} {N : Type.{u2}} {hM : MulZeroOneClass.{u1} M} {hN : MulZeroOneClass.{u2} N} (f : MonoidWithZeroHom.{u1, u2} M N hM hN) (f' : M -> N), (Eq.{max (succ u1) (succ u2)} (M -> N) f' (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (MonoidWithZeroHom.{u1, u2} M N hM hN) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{max u1 u2, u1, u2} (MonoidWithZeroHom.{u1, u2} M N hM hN) M N (MulOneClass.toMul.{u1} M (MulZeroOneClass.toMulOneClass.{u1} M hM)) (MulOneClass.toMul.{u2} N (MulZeroOneClass.toMulOneClass.{u2} N hN)) (MonoidHomClass.toMulHomClass.{max u1 u2, u1, u2} (MonoidWithZeroHom.{u1, u2} M N hM hN) M N (MulZeroOneClass.toMulOneClass.{u1} M hM) (MulZeroOneClass.toMulOneClass.{u2} N hN) (MonoidWithZeroHomClass.toMonoidHomClass.{max u1 u2, u1, u2} (MonoidWithZeroHom.{u1, u2} M N hM hN) M N hM hN (MonoidWithZeroHom.monoidWithZeroHomClass.{u1, u2} M N hM hN)))) f)) -> (MonoidHom.{u1, u2} M N (MulZeroOneClass.toMulOneClass.{u1} M hM) (MulZeroOneClass.toMulOneClass.{u2} N hN))
+  forall {M : Type.{u1}} {N : Type.{u2}} [hM : MulZeroOneClass.{u1} M] [hN : MulZeroOneClass.{u2} N] (f : MonoidWithZeroHom.{u1, u2} M N hM hN) (f' : M -> N), (Eq.{max (succ u1) (succ u2)} (M -> N) f' (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (MonoidWithZeroHom.{u1, u2} M N hM hN) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{max u1 u2, u1, u2} (MonoidWithZeroHom.{u1, u2} M N hM hN) M N (MulOneClass.toMul.{u1} M (MulZeroOneClass.toMulOneClass.{u1} M hM)) (MulOneClass.toMul.{u2} N (MulZeroOneClass.toMulOneClass.{u2} N hN)) (MonoidHomClass.toMulHomClass.{max u1 u2, u1, u2} (MonoidWithZeroHom.{u1, u2} M N hM hN) M N (MulZeroOneClass.toMulOneClass.{u1} M hM) (MulZeroOneClass.toMulOneClass.{u2} N hN) (MonoidWithZeroHomClass.toMonoidHomClass.{max u1 u2, u1, u2} (MonoidWithZeroHom.{u1, u2} M N hM hN) M N hM hN (MonoidWithZeroHom.monoidWithZeroHomClass.{u1, u2} M N hM hN)))) f)) -> (MonoidHom.{u1, u2} M N (MulZeroOneClass.toMulOneClass.{u1} M hM) (MulZeroOneClass.toMulOneClass.{u2} N hN))
 Case conversion may be inaccurate. Consider using '#align monoid_with_zero_hom.copy MonoidWithZeroHom.copyₓ'. -/
 /-- Copy of a `monoid_hom` with a new `to_fun` equal to the old one. Useful to fix
 definitional equalities. -/
@@ -1496,7 +1496,7 @@ include mM mN
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} {F : Type.{u3}} {mM : MulOneClass.{u1} M} {mN : MulOneClass.{u2} N} [_inst_1 : MonoidHomClass.{u3, u1, u2} F M N mM mN] (f : F) {x : M}, (Exists.{succ u1} M (fun (y : M) => Eq.{succ u1} M (HMul.hMul.{u1, u1, u1} M M M (instHMul.{u1} M (MulOneClass.toHasMul.{u1} M mM)) x y) (OfNat.ofNat.{u1} M 1 (OfNat.mk.{u1} M 1 (One.one.{u1} M (MulOneClass.toHasOne.{u1} M mM)))))) -> (Exists.{succ u2} N (fun (y : N) => Eq.{succ u2} N (HMul.hMul.{u2, u2, u2} N N N (instHMul.{u2} N (MulOneClass.toHasMul.{u2} N mN)) (coeFn.{succ u3, max (succ u1) (succ u2)} F (fun (_x : F) => M -> N) (FunLike.hasCoeToFun.{succ u3, succ u1, succ u2} F M (fun (_x : M) => N) (MulHomClass.toFunLike.{u3, u1, u2} F M N (MulOneClass.toHasMul.{u1} M mM) (MulOneClass.toHasMul.{u2} N mN) (MonoidHomClass.toMulHomClass.{u3, u1, u2} F M N mM mN _inst_1))) f x) y) (OfNat.ofNat.{u2} N 1 (OfNat.mk.{u2} N 1 (One.one.{u2} N (MulOneClass.toHasOne.{u2} N mN))))))
 but is expected to have type
-  forall {M : Type.{u3}} {N : Type.{u2}} {F : Type.{u1}} {mM : MulOneClass.{u3} M} {mN : MulOneClass.{u2} N} [_inst_1 : MonoidHomClass.{u1, u3, u2} F M N mM mN] (f : F) {x : M}, (Exists.{succ u3} M (fun (y : M) => Eq.{succ u3} M (HMul.hMul.{u3, u3, u3} M M M (instHMul.{u3} M (MulOneClass.toMul.{u3} M mM)) x y) (OfNat.ofNat.{u3} M 1 (One.toOfNat1.{u3} M (MulOneClass.toOne.{u3} M mM))))) -> (Exists.{succ u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) x) (fun (y : (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) x) => Eq.{succ u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) x) (HMul.hMul.{u2, u2, u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) x) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) x) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) x) (instHMul.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) x) (MulOneClass.toMul.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) x) mN)) (FunLike.coe.{succ u1, succ u3, succ u2} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{u1, u3, u2} F M N (MulOneClass.toMul.{u3} M mM) (MulOneClass.toMul.{u2} N mN) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F M N mM mN _inst_1)) f x) y) (OfNat.ofNat.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) x) 1 (One.toOfNat1.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) x) (MulOneClass.toOne.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) x) mN)))))
+  forall {M : Type.{u3}} {N : Type.{u2}} {F : Type.{u1}} [mM : MulOneClass.{u3} M] [mN : MulOneClass.{u2} N] [_inst_1 : MonoidHomClass.{u1, u3, u2} F M N mM mN] (f : F) {x : M}, (Exists.{succ u3} M (fun (y : M) => Eq.{succ u3} M (HMul.hMul.{u3, u3, u3} M M M (instHMul.{u3} M (MulOneClass.toMul.{u3} M mM)) x y) (OfNat.ofNat.{u3} M 1 (One.toOfNat1.{u3} M (MulOneClass.toOne.{u3} M mM))))) -> (Exists.{succ u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) x) (fun (y : (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) x) => Eq.{succ u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) x) (HMul.hMul.{u2, u2, u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) x) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) x) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) x) (instHMul.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) x) (MulOneClass.toMul.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) x) mN)) (FunLike.coe.{succ u1, succ u3, succ u2} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{u1, u3, u2} F M N (MulOneClass.toMul.{u3} M mM) (MulOneClass.toMul.{u2} N mN) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F M N mM mN _inst_1)) f x) y) (OfNat.ofNat.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) x) 1 (One.toOfNat1.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) x) (MulOneClass.toOne.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) x) mN)))))
 Case conversion may be inaccurate. Consider using '#align monoid_hom.map_exists_right_inv MonoidHom.map_exists_right_invₓ'. -/
 /-- Given a monoid homomorphism `f : M →* N` and an element `x : M`, if `x` has a right inverse,
 then `f x` has a right inverse too. For elements invertible on both sides see `is_unit.map`. -/
@@ -1512,7 +1512,7 @@ theorem map_exists_right_inv (f : F) {x : M} (hx : ∃ y, x * y = 1) : ∃ y, f
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} {F : Type.{u3}} {mM : MulOneClass.{u1} M} {mN : MulOneClass.{u2} N} [_inst_1 : MonoidHomClass.{u3, u1, u2} F M N mM mN] (f : F) {x : M}, (Exists.{succ u1} M (fun (y : M) => Eq.{succ u1} M (HMul.hMul.{u1, u1, u1} M M M (instHMul.{u1} M (MulOneClass.toHasMul.{u1} M mM)) y x) (OfNat.ofNat.{u1} M 1 (OfNat.mk.{u1} M 1 (One.one.{u1} M (MulOneClass.toHasOne.{u1} M mM)))))) -> (Exists.{succ u2} N (fun (y : N) => Eq.{succ u2} N (HMul.hMul.{u2, u2, u2} N N N (instHMul.{u2} N (MulOneClass.toHasMul.{u2} N mN)) y (coeFn.{succ u3, max (succ u1) (succ u2)} F (fun (_x : F) => M -> N) (FunLike.hasCoeToFun.{succ u3, succ u1, succ u2} F M (fun (_x : M) => N) (MulHomClass.toFunLike.{u3, u1, u2} F M N (MulOneClass.toHasMul.{u1} M mM) (MulOneClass.toHasMul.{u2} N mN) (MonoidHomClass.toMulHomClass.{u3, u1, u2} F M N mM mN _inst_1))) f x)) (OfNat.ofNat.{u2} N 1 (OfNat.mk.{u2} N 1 (One.one.{u2} N (MulOneClass.toHasOne.{u2} N mN))))))
 but is expected to have type
-  forall {M : Type.{u3}} {N : Type.{u2}} {F : Type.{u1}} {mM : MulOneClass.{u3} M} {mN : MulOneClass.{u2} N} [_inst_1 : MonoidHomClass.{u1, u3, u2} F M N mM mN] (f : F) {x : M}, (Exists.{succ u3} M (fun (y : M) => Eq.{succ u3} M (HMul.hMul.{u3, u3, u3} M M M (instHMul.{u3} M (MulOneClass.toMul.{u3} M mM)) y x) (OfNat.ofNat.{u3} M 1 (One.toOfNat1.{u3} M (MulOneClass.toOne.{u3} M mM))))) -> (Exists.{succ u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) x) (fun (y : (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) x) => Eq.{succ u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) x) (HMul.hMul.{u2, u2, u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) x) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) x) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) x) (instHMul.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) x) (MulOneClass.toMul.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) x) mN)) y (FunLike.coe.{succ u1, succ u3, succ u2} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{u1, u3, u2} F M N (MulOneClass.toMul.{u3} M mM) (MulOneClass.toMul.{u2} N mN) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F M N mM mN _inst_1)) f x)) (OfNat.ofNat.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) x) 1 (One.toOfNat1.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) x) (MulOneClass.toOne.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) x) mN)))))
+  forall {M : Type.{u3}} {N : Type.{u2}} {F : Type.{u1}} [mM : MulOneClass.{u3} M] [mN : MulOneClass.{u2} N] [_inst_1 : MonoidHomClass.{u1, u3, u2} F M N mM mN] (f : F) {x : M}, (Exists.{succ u3} M (fun (y : M) => Eq.{succ u3} M (HMul.hMul.{u3, u3, u3} M M M (instHMul.{u3} M (MulOneClass.toMul.{u3} M mM)) y x) (OfNat.ofNat.{u3} M 1 (One.toOfNat1.{u3} M (MulOneClass.toOne.{u3} M mM))))) -> (Exists.{succ u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) x) (fun (y : (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) x) => Eq.{succ u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) x) (HMul.hMul.{u2, u2, u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) x) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) x) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) x) (instHMul.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) x) (MulOneClass.toMul.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) x) mN)) y (FunLike.coe.{succ u1, succ u3, succ u2} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{u1, u3, u2} F M N (MulOneClass.toMul.{u3} M mM) (MulOneClass.toMul.{u2} N mN) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F M N mM mN _inst_1)) f x)) (OfNat.ofNat.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) x) 1 (One.toOfNat1.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) x) (MulOneClass.toOne.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) x) mN)))))
 Case conversion may be inaccurate. Consider using '#align monoid_hom.map_exists_left_inv MonoidHom.map_exists_left_invₓ'. -/
 /-- Given a monoid homomorphism `f : M →* N` and an element `x : M`, if `x` has a left inverse,
 then `f x` has a left inverse too. For elements invertible on both sides see `is_unit.map`. -/
@@ -2327,7 +2327,7 @@ add_decl_doc AddHom.hasAdd
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} {mM : Mul.{u1} M} {mN : CommSemigroup.{u2} N} (f : MulHom.{u1, u2} M N mM (Semigroup.toHasMul.{u2} N (CommSemigroup.toSemigroup.{u2} N mN))) (g : MulHom.{u1, u2} M N mM (Semigroup.toHasMul.{u2} N (CommSemigroup.toSemigroup.{u2} N mN))) (x : M), Eq.{succ u2} N (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MulHom.{u1, u2} M N mM (Semigroup.toHasMul.{u2} N (CommSemigroup.toSemigroup.{u2} N mN))) (fun (_x : MulHom.{u1, u2} M N mM (Semigroup.toHasMul.{u2} N (CommSemigroup.toSemigroup.{u2} N mN))) => M -> N) (MulHom.hasCoeToFun.{u1, u2} M N mM (Semigroup.toHasMul.{u2} N (CommSemigroup.toSemigroup.{u2} N mN))) (HMul.hMul.{max u2 u1, max u2 u1, max u2 u1} (MulHom.{u1, u2} M N mM (Semigroup.toHasMul.{u2} N (CommSemigroup.toSemigroup.{u2} N mN))) (MulHom.{u1, u2} M N mM (Semigroup.toHasMul.{u2} N (CommSemigroup.toSemigroup.{u2} N mN))) (MulHom.{u1, u2} M N mM (Semigroup.toHasMul.{u2} N (CommSemigroup.toSemigroup.{u2} N mN))) (instHMul.{max u2 u1} (MulHom.{u1, u2} M N mM (Semigroup.toHasMul.{u2} N (CommSemigroup.toSemigroup.{u2} N mN))) (MulHom.hasMul.{u1, u2} M N mM mN)) f g) x) (HMul.hMul.{u2, u2, u2} N N N (instHMul.{u2} N (Semigroup.toHasMul.{u2} N (CommSemigroup.toSemigroup.{u2} N mN))) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MulHom.{u1, u2} M N mM (Semigroup.toHasMul.{u2} N (CommSemigroup.toSemigroup.{u2} N mN))) (fun (_x : MulHom.{u1, u2} M N mM (Semigroup.toHasMul.{u2} N (CommSemigroup.toSemigroup.{u2} N mN))) => M -> N) (MulHom.hasCoeToFun.{u1, u2} M N mM (Semigroup.toHasMul.{u2} N (CommSemigroup.toSemigroup.{u2} N mN))) f x) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MulHom.{u1, u2} M N mM (Semigroup.toHasMul.{u2} N (CommSemigroup.toSemigroup.{u2} N mN))) (fun (_x : MulHom.{u1, u2} M N mM (Semigroup.toHasMul.{u2} N (CommSemigroup.toSemigroup.{u2} N mN))) => M -> N) (MulHom.hasCoeToFun.{u1, u2} M N mM (Semigroup.toHasMul.{u2} N (CommSemigroup.toSemigroup.{u2} N mN))) g x))
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} {mM : Mul.{u2} M} {mN : CommSemigroup.{u1} N} (f : MulHom.{u2, u1} M N mM (Semigroup.toMul.{u1} N (CommSemigroup.toSemigroup.{u1} N mN))) (g : MulHom.{u2, u1} M N mM (Semigroup.toMul.{u1} N (CommSemigroup.toSemigroup.{u1} N mN))) (x : M), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N mM (Semigroup.toMul.{u1} N (CommSemigroup.toSemigroup.{u1} N mN))) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N mM (Semigroup.toMul.{u1} N (CommSemigroup.toSemigroup.{u1} N mN))) M N mM (Semigroup.toMul.{u1} N (CommSemigroup.toSemigroup.{u1} N mN)) (MulHom.mulHomClass.{u2, u1} M N mM (Semigroup.toMul.{u1} N (CommSemigroup.toSemigroup.{u1} N mN)))) (HMul.hMul.{max u2 u1, max u2 u1, max u2 u1} (MulHom.{u2, u1} M N mM (Semigroup.toMul.{u1} N (CommSemigroup.toSemigroup.{u1} N mN))) (MulHom.{u2, u1} M N mM (Semigroup.toMul.{u1} N (CommSemigroup.toSemigroup.{u1} N mN))) (MulHom.{u2, u1} M N mM (Semigroup.toMul.{u1} N (CommSemigroup.toSemigroup.{u1} N mN))) (instHMul.{max u2 u1} (MulHom.{u2, u1} M N mM (Semigroup.toMul.{u1} N (CommSemigroup.toSemigroup.{u1} N mN))) (MulHom.instMulMulHomToMulToSemigroup.{u2, u1} M N mM mN)) f g) x) (HMul.hMul.{u1, u1, u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) x) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) x) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) x) (instHMul.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) x) (Semigroup.toMul.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) x) (CommSemigroup.toSemigroup.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) x) mN))) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N mM (Semigroup.toMul.{u1} N (CommSemigroup.toSemigroup.{u1} N mN))) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N mM (Semigroup.toMul.{u1} N (CommSemigroup.toSemigroup.{u1} N mN))) M N mM (Semigroup.toMul.{u1} N (CommSemigroup.toSemigroup.{u1} N mN)) (MulHom.mulHomClass.{u2, u1} M N mM (Semigroup.toMul.{u1} N (CommSemigroup.toSemigroup.{u1} N mN)))) f x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N mM (Semigroup.toMul.{u1} N (CommSemigroup.toSemigroup.{u1} N mN))) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N mM (Semigroup.toMul.{u1} N (CommSemigroup.toSemigroup.{u1} N mN))) M N mM (Semigroup.toMul.{u1} N (CommSemigroup.toSemigroup.{u1} N mN)) (MulHom.mulHomClass.{u2, u1} M N mM (Semigroup.toMul.{u1} N (CommSemigroup.toSemigroup.{u1} N mN)))) g x))
+  forall {M : Type.{u2}} {N : Type.{u1}} [mM : Mul.{u2} M] [mN : CommSemigroup.{u1} N] (f : MulHom.{u2, u1} M N mM (Semigroup.toMul.{u1} N (CommSemigroup.toSemigroup.{u1} N mN))) (g : MulHom.{u2, u1} M N mM (Semigroup.toMul.{u1} N (CommSemigroup.toSemigroup.{u1} N mN))) (x : M), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N mM (Semigroup.toMul.{u1} N (CommSemigroup.toSemigroup.{u1} N mN))) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N mM (Semigroup.toMul.{u1} N (CommSemigroup.toSemigroup.{u1} N mN))) M N mM (Semigroup.toMul.{u1} N (CommSemigroup.toSemigroup.{u1} N mN)) (MulHom.mulHomClass.{u2, u1} M N mM (Semigroup.toMul.{u1} N (CommSemigroup.toSemigroup.{u1} N mN)))) (HMul.hMul.{max u2 u1, max u2 u1, max u2 u1} (MulHom.{u2, u1} M N mM (Semigroup.toMul.{u1} N (CommSemigroup.toSemigroup.{u1} N mN))) (MulHom.{u2, u1} M N mM (Semigroup.toMul.{u1} N (CommSemigroup.toSemigroup.{u1} N mN))) (MulHom.{u2, u1} M N mM (Semigroup.toMul.{u1} N (CommSemigroup.toSemigroup.{u1} N mN))) (instHMul.{max u2 u1} (MulHom.{u2, u1} M N mM (Semigroup.toMul.{u1} N (CommSemigroup.toSemigroup.{u1} N mN))) (MulHom.instMulMulHomToMulToSemigroup.{u2, u1} M N mM mN)) f g) x) (HMul.hMul.{u1, u1, u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) x) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) x) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) x) (instHMul.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) x) (Semigroup.toMul.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) x) (CommSemigroup.toSemigroup.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) x) mN))) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N mM (Semigroup.toMul.{u1} N (CommSemigroup.toSemigroup.{u1} N mN))) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N mM (Semigroup.toMul.{u1} N (CommSemigroup.toSemigroup.{u1} N mN))) M N mM (Semigroup.toMul.{u1} N (CommSemigroup.toSemigroup.{u1} N mN)) (MulHom.mulHomClass.{u2, u1} M N mM (Semigroup.toMul.{u1} N (CommSemigroup.toSemigroup.{u1} N mN)))) f x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N mM (Semigroup.toMul.{u1} N (CommSemigroup.toSemigroup.{u1} N mN))) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N mM (Semigroup.toMul.{u1} N (CommSemigroup.toSemigroup.{u1} N mN))) M N mM (Semigroup.toMul.{u1} N (CommSemigroup.toSemigroup.{u1} N mN)) (MulHom.mulHomClass.{u2, u1} M N mM (Semigroup.toMul.{u1} N (CommSemigroup.toSemigroup.{u1} N mN)))) g x))
 Case conversion may be inaccurate. Consider using '#align mul_hom.mul_apply MulHom.mul_applyₓ'. -/
 @[simp, to_additive]
 theorem mul_apply {M N} {mM : Mul M} {mN : CommSemigroup N} (f g : M →ₙ* N) (x : M) :
@@ -2390,7 +2390,7 @@ add_decl_doc AddMonoidHom.hasAdd
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} {mM : MulOneClass.{u1} M} {mN : CommMonoid.{u2} N} (f : MonoidHom.{u1, u2} M N mM (Monoid.toMulOneClass.{u2} N (CommMonoid.toMonoid.{u2} N mN))) (g : MonoidHom.{u1, u2} M N mM (Monoid.toMulOneClass.{u2} N (CommMonoid.toMonoid.{u2} N mN))) (x : M), Eq.{succ u2} N (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} M N mM (Monoid.toMulOneClass.{u2} N (CommMonoid.toMonoid.{u2} N mN))) (fun (_x : MonoidHom.{u1, u2} M N mM (Monoid.toMulOneClass.{u2} N (CommMonoid.toMonoid.{u2} N mN))) => M -> N) (MonoidHom.hasCoeToFun.{u1, u2} M N mM (Monoid.toMulOneClass.{u2} N (CommMonoid.toMonoid.{u2} N mN))) (HMul.hMul.{max u2 u1, max u2 u1, max u2 u1} (MonoidHom.{u1, u2} M N mM (Monoid.toMulOneClass.{u2} N (CommMonoid.toMonoid.{u2} N mN))) (MonoidHom.{u1, u2} M N mM (Monoid.toMulOneClass.{u2} N (CommMonoid.toMonoid.{u2} N mN))) (MonoidHom.{u1, u2} M N mM (Monoid.toMulOneClass.{u2} N (CommMonoid.toMonoid.{u2} N mN))) (instHMul.{max u2 u1} (MonoidHom.{u1, u2} M N mM (Monoid.toMulOneClass.{u2} N (CommMonoid.toMonoid.{u2} N mN))) (MonoidHom.hasMul.{u1, u2} M N mM mN)) f g) x) (HMul.hMul.{u2, u2, u2} N N N (instHMul.{u2} N (MulOneClass.toHasMul.{u2} N (Monoid.toMulOneClass.{u2} N (CommMonoid.toMonoid.{u2} N mN)))) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} M N mM (Monoid.toMulOneClass.{u2} N (CommMonoid.toMonoid.{u2} N mN))) (fun (_x : MonoidHom.{u1, u2} M N mM (Monoid.toMulOneClass.{u2} N (CommMonoid.toMonoid.{u2} N mN))) => M -> N) (MonoidHom.hasCoeToFun.{u1, u2} M N mM (Monoid.toMulOneClass.{u2} N (CommMonoid.toMonoid.{u2} N mN))) f x) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} M N mM (Monoid.toMulOneClass.{u2} N (CommMonoid.toMonoid.{u2} N mN))) (fun (_x : MonoidHom.{u1, u2} M N mM (Monoid.toMulOneClass.{u2} N (CommMonoid.toMonoid.{u2} N mN))) => M -> N) (MonoidHom.hasCoeToFun.{u1, u2} M N mM (Monoid.toMulOneClass.{u2} N (CommMonoid.toMonoid.{u2} N mN))) g x))
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} {mM : MulOneClass.{u2} M} {mN : CommMonoid.{u1} N} (f : MonoidHom.{u2, u1} M N mM (Monoid.toMulOneClass.{u1} N (CommMonoid.toMonoid.{u1} N mN))) (g : MonoidHom.{u2, u1} M N mM (Monoid.toMulOneClass.{u1} N (CommMonoid.toMonoid.{u1} N mN))) (x : M), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M N mM (Monoid.toMulOneClass.{u1} N (CommMonoid.toMonoid.{u1} N mN))) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N mM (Monoid.toMulOneClass.{u1} N (CommMonoid.toMonoid.{u1} N mN))) M N (MulOneClass.toMul.{u2} M mM) (MulOneClass.toMul.{u1} N (Monoid.toMulOneClass.{u1} N (CommMonoid.toMonoid.{u1} N mN))) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N mM (Monoid.toMulOneClass.{u1} N (CommMonoid.toMonoid.{u1} N mN))) M N mM (Monoid.toMulOneClass.{u1} N (CommMonoid.toMonoid.{u1} N mN)) (MonoidHom.monoidHomClass.{u2, u1} M N mM (Monoid.toMulOneClass.{u1} N (CommMonoid.toMonoid.{u1} N mN))))) (HMul.hMul.{max u2 u1, max u2 u1, max u2 u1} (MonoidHom.{u2, u1} M N mM (Monoid.toMulOneClass.{u1} N (CommMonoid.toMonoid.{u1} N mN))) (MonoidHom.{u2, u1} M N mM (Monoid.toMulOneClass.{u1} N (CommMonoid.toMonoid.{u1} N mN))) (MonoidHom.{u2, u1} M N mM (Monoid.toMulOneClass.{u1} N (CommMonoid.toMonoid.{u1} N mN))) (instHMul.{max u2 u1} (MonoidHom.{u2, u1} M N mM (Monoid.toMulOneClass.{u1} N (CommMonoid.toMonoid.{u1} N mN))) (MonoidHom.mul.{u2, u1} M N mM mN)) f g) x) (HMul.hMul.{u1, u1, u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) x) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) x) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) x) (instHMul.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) x) (MulOneClass.toMul.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) x) (Monoid.toMulOneClass.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) x) (CommMonoid.toMonoid.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) x) mN)))) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M N mM (Monoid.toMulOneClass.{u1} N (CommMonoid.toMonoid.{u1} N mN))) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N mM (Monoid.toMulOneClass.{u1} N (CommMonoid.toMonoid.{u1} N mN))) M N (MulOneClass.toMul.{u2} M mM) (MulOneClass.toMul.{u1} N (Monoid.toMulOneClass.{u1} N (CommMonoid.toMonoid.{u1} N mN))) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N mM (Monoid.toMulOneClass.{u1} N (CommMonoid.toMonoid.{u1} N mN))) M N mM (Monoid.toMulOneClass.{u1} N (CommMonoid.toMonoid.{u1} N mN)) (MonoidHom.monoidHomClass.{u2, u1} M N mM (Monoid.toMulOneClass.{u1} N (CommMonoid.toMonoid.{u1} N mN))))) f x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M N mM (Monoid.toMulOneClass.{u1} N (CommMonoid.toMonoid.{u1} N mN))) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N mM (Monoid.toMulOneClass.{u1} N (CommMonoid.toMonoid.{u1} N mN))) M N (MulOneClass.toMul.{u2} M mM) (MulOneClass.toMul.{u1} N (Monoid.toMulOneClass.{u1} N (CommMonoid.toMonoid.{u1} N mN))) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N mM (Monoid.toMulOneClass.{u1} N (CommMonoid.toMonoid.{u1} N mN))) M N mM (Monoid.toMulOneClass.{u1} N (CommMonoid.toMonoid.{u1} N mN)) (MonoidHom.monoidHomClass.{u2, u1} M N mM (Monoid.toMulOneClass.{u1} N (CommMonoid.toMonoid.{u1} N mN))))) g x))
+  forall {M : Type.{u2}} {N : Type.{u1}} [mM : MulOneClass.{u2} M] [mN : CommMonoid.{u1} N] (f : MonoidHom.{u2, u1} M N mM (Monoid.toMulOneClass.{u1} N (CommMonoid.toMonoid.{u1} N mN))) (g : MonoidHom.{u2, u1} M N mM (Monoid.toMulOneClass.{u1} N (CommMonoid.toMonoid.{u1} N mN))) (x : M), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M N mM (Monoid.toMulOneClass.{u1} N (CommMonoid.toMonoid.{u1} N mN))) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N mM (Monoid.toMulOneClass.{u1} N (CommMonoid.toMonoid.{u1} N mN))) M N (MulOneClass.toMul.{u2} M mM) (MulOneClass.toMul.{u1} N (Monoid.toMulOneClass.{u1} N (CommMonoid.toMonoid.{u1} N mN))) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N mM (Monoid.toMulOneClass.{u1} N (CommMonoid.toMonoid.{u1} N mN))) M N mM (Monoid.toMulOneClass.{u1} N (CommMonoid.toMonoid.{u1} N mN)) (MonoidHom.monoidHomClass.{u2, u1} M N mM (Monoid.toMulOneClass.{u1} N (CommMonoid.toMonoid.{u1} N mN))))) (HMul.hMul.{max u2 u1, max u2 u1, max u2 u1} (MonoidHom.{u2, u1} M N mM (Monoid.toMulOneClass.{u1} N (CommMonoid.toMonoid.{u1} N mN))) (MonoidHom.{u2, u1} M N mM (Monoid.toMulOneClass.{u1} N (CommMonoid.toMonoid.{u1} N mN))) (MonoidHom.{u2, u1} M N mM (Monoid.toMulOneClass.{u1} N (CommMonoid.toMonoid.{u1} N mN))) (instHMul.{max u2 u1} (MonoidHom.{u2, u1} M N mM (Monoid.toMulOneClass.{u1} N (CommMonoid.toMonoid.{u1} N mN))) (MonoidHom.mul.{u2, u1} M N mM mN)) f g) x) (HMul.hMul.{u1, u1, u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) x) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) x) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) x) (instHMul.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) x) (MulOneClass.toMul.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) x) (Monoid.toMulOneClass.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) x) (CommMonoid.toMonoid.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) x) mN)))) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M N mM (Monoid.toMulOneClass.{u1} N (CommMonoid.toMonoid.{u1} N mN))) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N mM (Monoid.toMulOneClass.{u1} N (CommMonoid.toMonoid.{u1} N mN))) M N (MulOneClass.toMul.{u2} M mM) (MulOneClass.toMul.{u1} N (Monoid.toMulOneClass.{u1} N (CommMonoid.toMonoid.{u1} N mN))) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N mM (Monoid.toMulOneClass.{u1} N (CommMonoid.toMonoid.{u1} N mN))) M N mM (Monoid.toMulOneClass.{u1} N (CommMonoid.toMonoid.{u1} N mN)) (MonoidHom.monoidHomClass.{u2, u1} M N mM (Monoid.toMulOneClass.{u1} N (CommMonoid.toMonoid.{u1} N mN))))) f x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M N mM (Monoid.toMulOneClass.{u1} N (CommMonoid.toMonoid.{u1} N mN))) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N mM (Monoid.toMulOneClass.{u1} N (CommMonoid.toMonoid.{u1} N mN))) M N (MulOneClass.toMul.{u2} M mM) (MulOneClass.toMul.{u1} N (Monoid.toMulOneClass.{u1} N (CommMonoid.toMonoid.{u1} N mN))) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N mM (Monoid.toMulOneClass.{u1} N (CommMonoid.toMonoid.{u1} N mN))) M N mM (Monoid.toMulOneClass.{u1} N (CommMonoid.toMonoid.{u1} N mN)) (MonoidHom.monoidHomClass.{u2, u1} M N mM (Monoid.toMulOneClass.{u1} N (CommMonoid.toMonoid.{u1} N mN))))) g x))
 Case conversion may be inaccurate. Consider using '#align monoid_hom.mul_apply MonoidHom.mul_applyₓ'. -/
 @[simp, to_additive]
 theorem mul_apply {M N} {mM : MulOneClass M} {mN : CommMonoid N} (f g : M →* N) (x : M) :
@@ -2641,7 +2641,7 @@ add_decl_doc AddMonoidHom.hasNeg
 lean 3 declaration is
   forall {M : Type.{u1}} {G : Type.{u2}} {mM : MulOneClass.{u1} M} {gG : CommGroup.{u2} G} (f : MonoidHom.{u1, u2} M G mM (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G (CommGroup.toGroup.{u2} G gG))))) (x : M), Eq.{succ u2} G (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} M G mM (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G (CommGroup.toGroup.{u2} G gG))))) (fun (_x : MonoidHom.{u1, u2} M G mM (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G (CommGroup.toGroup.{u2} G gG))))) => M -> G) (MonoidHom.hasCoeToFun.{u1, u2} M G mM (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G (CommGroup.toGroup.{u2} G gG))))) (Inv.inv.{max u2 u1} (MonoidHom.{u1, u2} M G mM (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G (CommGroup.toGroup.{u2} G gG))))) (MonoidHom.hasInv.{u1, u2} M G mM gG) f) x) (Inv.inv.{u2} G (DivInvMonoid.toHasInv.{u2} G (Group.toDivInvMonoid.{u2} G (CommGroup.toGroup.{u2} G gG))) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} M G mM (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G (CommGroup.toGroup.{u2} G gG))))) (fun (_x : MonoidHom.{u1, u2} M G mM (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G (CommGroup.toGroup.{u2} G gG))))) => M -> G) (MonoidHom.hasCoeToFun.{u1, u2} M G mM (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G (CommGroup.toGroup.{u2} G gG))))) f x))
 but is expected to have type
-  forall {M : Type.{u2}} {G : Type.{u1}} {mM : MulOneClass.{u2} M} {gG : CommGroup.{u1} G} (f : MonoidHom.{u2, u1} M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))) (x : M), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => G) x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => G) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))) M G (MulOneClass.toMul.{u2} M mM) (MulOneClass.toMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))) M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG)))) (MonoidHom.monoidHomClass.{u2, u1} M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))))) (Inv.inv.{max u2 u1} (MonoidHom.{u2, u1} M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))) (MonoidHom.instInvMonoidHomToMulOneClassToMonoidToDivInvMonoidToGroup.{u2, u1} M G mM gG) f) x) (Inv.inv.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => G) x) (InvOneClass.toInv.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => G) x) (DivInvOneMonoid.toInvOneClass.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => G) x) (DivisionMonoid.toDivInvOneMonoid.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => G) x) (DivisionCommMonoid.toDivisionMonoid.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => G) x) (CommGroup.toDivisionCommMonoid.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => G) x) gG))))) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => G) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))) M G (MulOneClass.toMul.{u2} M mM) (MulOneClass.toMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))) M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG)))) (MonoidHom.monoidHomClass.{u2, u1} M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))))) f x))
+  forall {M : Type.{u2}} {G : Type.{u1}} [mM : MulOneClass.{u2} M] [gG : CommGroup.{u1} G] (f : MonoidHom.{u2, u1} M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))) (x : M), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => G) x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => G) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))) M G (MulOneClass.toMul.{u2} M mM) (MulOneClass.toMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))) M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG)))) (MonoidHom.monoidHomClass.{u2, u1} M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))))) (Inv.inv.{max u2 u1} (MonoidHom.{u2, u1} M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))) (MonoidHom.instInvMonoidHomToMulOneClassToMonoidToDivInvMonoidToGroup.{u2, u1} M G mM gG) f) x) (Inv.inv.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => G) x) (InvOneClass.toInv.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => G) x) (DivInvOneMonoid.toInvOneClass.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => G) x) (DivisionMonoid.toDivInvOneMonoid.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => G) x) (DivisionCommMonoid.toDivisionMonoid.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => G) x) (CommGroup.toDivisionCommMonoid.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => G) x) gG))))) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => G) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))) M G (MulOneClass.toMul.{u2} M mM) (MulOneClass.toMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))) M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG)))) (MonoidHom.monoidHomClass.{u2, u1} M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))))) f x))
 Case conversion may be inaccurate. Consider using '#align monoid_hom.inv_apply MonoidHom.inv_applyₓ'. -/
 @[simp, to_additive]
 theorem inv_apply {M G} {mM : MulOneClass M} {gG : CommGroup G} (f : M →* G) (x : M) :
@@ -2654,7 +2654,7 @@ theorem inv_apply {M G} {mM : MulOneClass M} {gG : CommGroup G} (f : M →* G) (
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} {A : Type.{u3}} {mM : MulOneClass.{u1} M} {gN : MulOneClass.{u2} N} {gA : CommGroup.{u3} A} (φ : MonoidHom.{u2, u3} N A gN (Monoid.toMulOneClass.{u3} A (DivInvMonoid.toMonoid.{u3} A (Group.toDivInvMonoid.{u3} A (CommGroup.toGroup.{u3} A gA))))) (ψ : MonoidHom.{u1, u2} M N mM gN), Eq.{max (succ u3) (succ u1)} (MonoidHom.{u1, u3} M A mM (Monoid.toMulOneClass.{u3} A (DivInvMonoid.toMonoid.{u3} A (Group.toDivInvMonoid.{u3} A (CommGroup.toGroup.{u3} A gA))))) (MonoidHom.comp.{u1, u2, u3} M N A mM gN (Monoid.toMulOneClass.{u3} A (DivInvMonoid.toMonoid.{u3} A (Group.toDivInvMonoid.{u3} A (CommGroup.toGroup.{u3} A gA)))) (Inv.inv.{max u3 u2} (MonoidHom.{u2, u3} N A gN (Monoid.toMulOneClass.{u3} A (DivInvMonoid.toMonoid.{u3} A (Group.toDivInvMonoid.{u3} A (CommGroup.toGroup.{u3} A gA))))) (MonoidHom.hasInv.{u2, u3} N A gN gA) φ) ψ) (Inv.inv.{max u3 u1} (MonoidHom.{u1, u3} M A mM (Monoid.toMulOneClass.{u3} A (DivInvMonoid.toMonoid.{u3} A (Group.toDivInvMonoid.{u3} A (CommGroup.toGroup.{u3} A gA))))) (MonoidHom.hasInv.{u1, u3} M A mM gA) (MonoidHom.comp.{u1, u2, u3} M N A mM gN (Monoid.toMulOneClass.{u3} A (DivInvMonoid.toMonoid.{u3} A (Group.toDivInvMonoid.{u3} A (CommGroup.toGroup.{u3} A gA)))) φ ψ))
 but is expected to have type
-  forall {M : Type.{u3}} {N : Type.{u2}} {A : Type.{u1}} {mM : MulOneClass.{u3} M} {gN : MulOneClass.{u2} N} {gA : CommGroup.{u1} A} (φ : MonoidHom.{u2, u1} N A gN (Monoid.toMulOneClass.{u1} A (DivInvMonoid.toMonoid.{u1} A (Group.toDivInvMonoid.{u1} A (CommGroup.toGroup.{u1} A gA))))) (ψ : MonoidHom.{u3, u2} M N mM gN), Eq.{max (succ u3) (succ u1)} (MonoidHom.{u3, u1} M A mM (Monoid.toMulOneClass.{u1} A (DivInvMonoid.toMonoid.{u1} A (Group.toDivInvMonoid.{u1} A (CommGroup.toGroup.{u1} A gA))))) (MonoidHom.comp.{u3, u2, u1} M N A mM gN (Monoid.toMulOneClass.{u1} A (DivInvMonoid.toMonoid.{u1} A (Group.toDivInvMonoid.{u1} A (CommGroup.toGroup.{u1} A gA)))) (Inv.inv.{max u2 u1} (MonoidHom.{u2, u1} N A gN (Monoid.toMulOneClass.{u1} A (DivInvMonoid.toMonoid.{u1} A (Group.toDivInvMonoid.{u1} A (CommGroup.toGroup.{u1} A gA))))) (MonoidHom.instInvMonoidHomToMulOneClassToMonoidToDivInvMonoidToGroup.{u2, u1} N A gN gA) φ) ψ) (Inv.inv.{max u1 u3} (MonoidHom.{u3, u1} M A mM (Monoid.toMulOneClass.{u1} A (DivInvMonoid.toMonoid.{u1} A (Group.toDivInvMonoid.{u1} A (CommGroup.toGroup.{u1} A gA))))) (MonoidHom.instInvMonoidHomToMulOneClassToMonoidToDivInvMonoidToGroup.{u3, u1} M A mM gA) (MonoidHom.comp.{u3, u2, u1} M N A mM gN (Monoid.toMulOneClass.{u1} A (DivInvMonoid.toMonoid.{u1} A (Group.toDivInvMonoid.{u1} A (CommGroup.toGroup.{u1} A gA)))) φ ψ))
+  forall {M : Type.{u3}} {N : Type.{u2}} {A : Type.{u1}} [mM : MulOneClass.{u3} M] [gN : MulOneClass.{u2} N] [gA : CommGroup.{u1} A] (φ : MonoidHom.{u2, u1} N A gN (Monoid.toMulOneClass.{u1} A (DivInvMonoid.toMonoid.{u1} A (Group.toDivInvMonoid.{u1} A (CommGroup.toGroup.{u1} A gA))))) (ψ : MonoidHom.{u3, u2} M N mM gN), Eq.{max (succ u3) (succ u1)} (MonoidHom.{u3, u1} M A mM (Monoid.toMulOneClass.{u1} A (DivInvMonoid.toMonoid.{u1} A (Group.toDivInvMonoid.{u1} A (CommGroup.toGroup.{u1} A gA))))) (MonoidHom.comp.{u3, u2, u1} M N A mM gN (Monoid.toMulOneClass.{u1} A (DivInvMonoid.toMonoid.{u1} A (Group.toDivInvMonoid.{u1} A (CommGroup.toGroup.{u1} A gA)))) (Inv.inv.{max u2 u1} (MonoidHom.{u2, u1} N A gN (Monoid.toMulOneClass.{u1} A (DivInvMonoid.toMonoid.{u1} A (Group.toDivInvMonoid.{u1} A (CommGroup.toGroup.{u1} A gA))))) (MonoidHom.instInvMonoidHomToMulOneClassToMonoidToDivInvMonoidToGroup.{u2, u1} N A gN gA) φ) ψ) (Inv.inv.{max u1 u3} (MonoidHom.{u3, u1} M A mM (Monoid.toMulOneClass.{u1} A (DivInvMonoid.toMonoid.{u1} A (Group.toDivInvMonoid.{u1} A (CommGroup.toGroup.{u1} A gA))))) (MonoidHom.instInvMonoidHomToMulOneClassToMonoidToDivInvMonoidToGroup.{u3, u1} M A mM gA) (MonoidHom.comp.{u3, u2, u1} M N A mM gN (Monoid.toMulOneClass.{u1} A (DivInvMonoid.toMonoid.{u1} A (Group.toDivInvMonoid.{u1} A (CommGroup.toGroup.{u1} A gA)))) φ ψ))
 Case conversion may be inaccurate. Consider using '#align monoid_hom.inv_comp MonoidHom.inv_compₓ'. -/
 @[simp, to_additive]
 theorem inv_comp {M N A} {mM : MulOneClass M} {gN : MulOneClass N} {gA : CommGroup A} (φ : N →* A)
@@ -2668,7 +2668,7 @@ theorem inv_comp {M N A} {mM : MulOneClass M} {gN : MulOneClass N} {gA : CommGro
 lean 3 declaration is
   forall {M : Type.{u1}} {A : Type.{u2}} {B : Type.{u3}} {mM : MulOneClass.{u1} M} {mA : CommGroup.{u2} A} {mB : CommGroup.{u3} B} (φ : MonoidHom.{u2, u3} A B (Monoid.toMulOneClass.{u2} A (DivInvMonoid.toMonoid.{u2} A (Group.toDivInvMonoid.{u2} A (CommGroup.toGroup.{u2} A mA)))) (Monoid.toMulOneClass.{u3} B (DivInvMonoid.toMonoid.{u3} B (Group.toDivInvMonoid.{u3} B (CommGroup.toGroup.{u3} B mB))))) (ψ : MonoidHom.{u1, u2} M A mM (Monoid.toMulOneClass.{u2} A (DivInvMonoid.toMonoid.{u2} A (Group.toDivInvMonoid.{u2} A (CommGroup.toGroup.{u2} A mA))))), Eq.{max (succ u3) (succ u1)} (MonoidHom.{u1, u3} M B mM (Monoid.toMulOneClass.{u3} B (DivInvMonoid.toMonoid.{u3} B (Group.toDivInvMonoid.{u3} B (CommGroup.toGroup.{u3} B mB))))) (MonoidHom.comp.{u1, u2, u3} M A B mM (Monoid.toMulOneClass.{u2} A (DivInvMonoid.toMonoid.{u2} A (Group.toDivInvMonoid.{u2} A (CommGroup.toGroup.{u2} A mA)))) (Monoid.toMulOneClass.{u3} B (DivInvMonoid.toMonoid.{u3} B (Group.toDivInvMonoid.{u3} B (CommGroup.toGroup.{u3} B mB)))) φ (Inv.inv.{max u2 u1} (MonoidHom.{u1, u2} M A mM (Monoid.toMulOneClass.{u2} A (DivInvMonoid.toMonoid.{u2} A (Group.toDivInvMonoid.{u2} A (CommGroup.toGroup.{u2} A mA))))) (MonoidHom.hasInv.{u1, u2} M A mM mA) ψ)) (Inv.inv.{max u3 u1} (MonoidHom.{u1, u3} M B mM (Monoid.toMulOneClass.{u3} B (DivInvMonoid.toMonoid.{u3} B (Group.toDivInvMonoid.{u3} B (CommGroup.toGroup.{u3} B mB))))) (MonoidHom.hasInv.{u1, u3} M B mM mB) (MonoidHom.comp.{u1, u2, u3} M A B mM (Monoid.toMulOneClass.{u2} A (DivInvMonoid.toMonoid.{u2} A (Group.toDivInvMonoid.{u2} A (CommGroup.toGroup.{u2} A mA)))) (Monoid.toMulOneClass.{u3} B (DivInvMonoid.toMonoid.{u3} B (Group.toDivInvMonoid.{u3} B (CommGroup.toGroup.{u3} B mB)))) φ ψ))
 but is expected to have type
-  forall {M : Type.{u3}} {A : Type.{u2}} {B : Type.{u1}} {mM : MulOneClass.{u3} M} {mA : CommGroup.{u2} A} {mB : CommGroup.{u1} B} (φ : MonoidHom.{u2, u1} A B (Monoid.toMulOneClass.{u2} A (DivInvMonoid.toMonoid.{u2} A (Group.toDivInvMonoid.{u2} A (CommGroup.toGroup.{u2} A mA)))) (Monoid.toMulOneClass.{u1} B (DivInvMonoid.toMonoid.{u1} B (Group.toDivInvMonoid.{u1} B (CommGroup.toGroup.{u1} B mB))))) (ψ : MonoidHom.{u3, u2} M A mM (Monoid.toMulOneClass.{u2} A (DivInvMonoid.toMonoid.{u2} A (Group.toDivInvMonoid.{u2} A (CommGroup.toGroup.{u2} A mA))))), Eq.{max (succ u3) (succ u1)} (MonoidHom.{u3, u1} M B mM (Monoid.toMulOneClass.{u1} B (DivInvMonoid.toMonoid.{u1} B (Group.toDivInvMonoid.{u1} B (CommGroup.toGroup.{u1} B mB))))) (MonoidHom.comp.{u3, u2, u1} M A B mM (Monoid.toMulOneClass.{u2} A (DivInvMonoid.toMonoid.{u2} A (Group.toDivInvMonoid.{u2} A (CommGroup.toGroup.{u2} A mA)))) (Monoid.toMulOneClass.{u1} B (DivInvMonoid.toMonoid.{u1} B (Group.toDivInvMonoid.{u1} B (CommGroup.toGroup.{u1} B mB)))) φ (Inv.inv.{max u2 u3} (MonoidHom.{u3, u2} M A mM (Monoid.toMulOneClass.{u2} A (DivInvMonoid.toMonoid.{u2} A (Group.toDivInvMonoid.{u2} A (CommGroup.toGroup.{u2} A mA))))) (MonoidHom.instInvMonoidHomToMulOneClassToMonoidToDivInvMonoidToGroup.{u3, u2} M A mM mA) ψ)) (Inv.inv.{max u1 u3} (MonoidHom.{u3, u1} M B mM (Monoid.toMulOneClass.{u1} B (DivInvMonoid.toMonoid.{u1} B (Group.toDivInvMonoid.{u1} B (CommGroup.toGroup.{u1} B mB))))) (MonoidHom.instInvMonoidHomToMulOneClassToMonoidToDivInvMonoidToGroup.{u3, u1} M B mM mB) (MonoidHom.comp.{u3, u2, u1} M A B mM (Monoid.toMulOneClass.{u2} A (DivInvMonoid.toMonoid.{u2} A (Group.toDivInvMonoid.{u2} A (CommGroup.toGroup.{u2} A mA)))) (Monoid.toMulOneClass.{u1} B (DivInvMonoid.toMonoid.{u1} B (Group.toDivInvMonoid.{u1} B (CommGroup.toGroup.{u1} B mB)))) φ ψ))
+  forall {M : Type.{u3}} {A : Type.{u2}} {B : Type.{u1}} [mM : MulOneClass.{u3} M] [mA : CommGroup.{u2} A] [mB : CommGroup.{u1} B] (φ : MonoidHom.{u2, u1} A B (Monoid.toMulOneClass.{u2} A (DivInvMonoid.toMonoid.{u2} A (Group.toDivInvMonoid.{u2} A (CommGroup.toGroup.{u2} A mA)))) (Monoid.toMulOneClass.{u1} B (DivInvMonoid.toMonoid.{u1} B (Group.toDivInvMonoid.{u1} B (CommGroup.toGroup.{u1} B mB))))) (ψ : MonoidHom.{u3, u2} M A mM (Monoid.toMulOneClass.{u2} A (DivInvMonoid.toMonoid.{u2} A (Group.toDivInvMonoid.{u2} A (CommGroup.toGroup.{u2} A mA))))), Eq.{max (succ u3) (succ u1)} (MonoidHom.{u3, u1} M B mM (Monoid.toMulOneClass.{u1} B (DivInvMonoid.toMonoid.{u1} B (Group.toDivInvMonoid.{u1} B (CommGroup.toGroup.{u1} B mB))))) (MonoidHom.comp.{u3, u2, u1} M A B mM (Monoid.toMulOneClass.{u2} A (DivInvMonoid.toMonoid.{u2} A (Group.toDivInvMonoid.{u2} A (CommGroup.toGroup.{u2} A mA)))) (Monoid.toMulOneClass.{u1} B (DivInvMonoid.toMonoid.{u1} B (Group.toDivInvMonoid.{u1} B (CommGroup.toGroup.{u1} B mB)))) φ (Inv.inv.{max u2 u3} (MonoidHom.{u3, u2} M A mM (Monoid.toMulOneClass.{u2} A (DivInvMonoid.toMonoid.{u2} A (Group.toDivInvMonoid.{u2} A (CommGroup.toGroup.{u2} A mA))))) (MonoidHom.instInvMonoidHomToMulOneClassToMonoidToDivInvMonoidToGroup.{u3, u2} M A mM mA) ψ)) (Inv.inv.{max u1 u3} (MonoidHom.{u3, u1} M B mM (Monoid.toMulOneClass.{u1} B (DivInvMonoid.toMonoid.{u1} B (Group.toDivInvMonoid.{u1} B (CommGroup.toGroup.{u1} B mB))))) (MonoidHom.instInvMonoidHomToMulOneClassToMonoidToDivInvMonoidToGroup.{u3, u1} M B mM mB) (MonoidHom.comp.{u3, u2, u1} M A B mM (Monoid.toMulOneClass.{u2} A (DivInvMonoid.toMonoid.{u2} A (Group.toDivInvMonoid.{u2} A (CommGroup.toGroup.{u2} A mA)))) (Monoid.toMulOneClass.{u1} B (DivInvMonoid.toMonoid.{u1} B (Group.toDivInvMonoid.{u1} B (CommGroup.toGroup.{u1} B mB)))) φ ψ))
 Case conversion may be inaccurate. Consider using '#align monoid_hom.comp_inv MonoidHom.comp_invₓ'. -/
 @[simp, to_additive]
 theorem comp_inv {M A B} {mM : MulOneClass M} {mA : CommGroup A} {mB : CommGroup B} (φ : A →* B)
@@ -2694,7 +2694,7 @@ add_decl_doc AddMonoidHom.hasSub
 lean 3 declaration is
   forall {M : Type.{u1}} {G : Type.{u2}} {mM : MulOneClass.{u1} M} {gG : CommGroup.{u2} G} (f : MonoidHom.{u1, u2} M G mM (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G (CommGroup.toGroup.{u2} G gG))))) (g : MonoidHom.{u1, u2} M G mM (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G (CommGroup.toGroup.{u2} G gG))))) (x : M), Eq.{succ u2} G (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} M G mM (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G (CommGroup.toGroup.{u2} G gG))))) (fun (_x : MonoidHom.{u1, u2} M G mM (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G (CommGroup.toGroup.{u2} G gG))))) => M -> G) (MonoidHom.hasCoeToFun.{u1, u2} M G mM (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G (CommGroup.toGroup.{u2} G gG))))) (HDiv.hDiv.{max u2 u1, max u2 u1, max u2 u1} (MonoidHom.{u1, u2} M G mM (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G (CommGroup.toGroup.{u2} G gG))))) (MonoidHom.{u1, u2} M G mM (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G (CommGroup.toGroup.{u2} G gG))))) (MonoidHom.{u1, u2} M G mM (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G (CommGroup.toGroup.{u2} G gG))))) (instHDiv.{max u2 u1} (MonoidHom.{u1, u2} M G mM (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G (CommGroup.toGroup.{u2} G gG))))) (MonoidHom.hasDiv.{u1, u2} M G mM gG)) f g) x) (HDiv.hDiv.{u2, u2, u2} G G G (instHDiv.{u2} G (DivInvMonoid.toHasDiv.{u2} G (Group.toDivInvMonoid.{u2} G (CommGroup.toGroup.{u2} G gG)))) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} M G mM (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G (CommGroup.toGroup.{u2} G gG))))) (fun (_x : MonoidHom.{u1, u2} M G mM (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G (CommGroup.toGroup.{u2} G gG))))) => M -> G) (MonoidHom.hasCoeToFun.{u1, u2} M G mM (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G (CommGroup.toGroup.{u2} G gG))))) f x) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} M G mM (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G (CommGroup.toGroup.{u2} G gG))))) (fun (_x : MonoidHom.{u1, u2} M G mM (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G (CommGroup.toGroup.{u2} G gG))))) => M -> G) (MonoidHom.hasCoeToFun.{u1, u2} M G mM (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G (CommGroup.toGroup.{u2} G gG))))) g x))
 but is expected to have type
-  forall {M : Type.{u2}} {G : Type.{u1}} {mM : MulOneClass.{u2} M} {gG : CommGroup.{u1} G} (f : MonoidHom.{u2, u1} M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))) (g : MonoidHom.{u2, u1} M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))) (x : M), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => G) x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => G) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))) M G (MulOneClass.toMul.{u2} M mM) (MulOneClass.toMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))) M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG)))) (MonoidHom.monoidHomClass.{u2, u1} M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))))) (HDiv.hDiv.{max u2 u1, max u2 u1, max u2 u1} (MonoidHom.{u2, u1} M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))) (MonoidHom.{u2, u1} M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))) (MonoidHom.{u2, u1} M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))) (instHDiv.{max u2 u1} (MonoidHom.{u2, u1} M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))) (MonoidHom.instDivMonoidHomToMulOneClassToMonoidToDivInvMonoidToGroup.{u2, u1} M G mM gG)) f g) x) (HDiv.hDiv.{u1, u1, u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => G) x) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => G) x) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => G) x) (instHDiv.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => G) x) (DivInvMonoid.toDiv.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => G) x) (Group.toDivInvMonoid.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => G) x) (CommGroup.toGroup.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => G) x) gG)))) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => G) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))) M G (MulOneClass.toMul.{u2} M mM) (MulOneClass.toMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))) M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG)))) (MonoidHom.monoidHomClass.{u2, u1} M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))))) f x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => G) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))) M G (MulOneClass.toMul.{u2} M mM) (MulOneClass.toMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))) M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG)))) (MonoidHom.monoidHomClass.{u2, u1} M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))))) g x))
+  forall {M : Type.{u2}} {G : Type.{u1}} [mM : MulOneClass.{u2} M] [gG : CommGroup.{u1} G] (f : MonoidHom.{u2, u1} M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))) (g : MonoidHom.{u2, u1} M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))) (x : M), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => G) x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => G) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))) M G (MulOneClass.toMul.{u2} M mM) (MulOneClass.toMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))) M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG)))) (MonoidHom.monoidHomClass.{u2, u1} M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))))) (HDiv.hDiv.{max u2 u1, max u2 u1, max u2 u1} (MonoidHom.{u2, u1} M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))) (MonoidHom.{u2, u1} M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))) (MonoidHom.{u2, u1} M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))) (instHDiv.{max u2 u1} (MonoidHom.{u2, u1} M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))) (MonoidHom.instDivMonoidHomToMulOneClassToMonoidToDivInvMonoidToGroup.{u2, u1} M G mM gG)) f g) x) (HDiv.hDiv.{u1, u1, u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => G) x) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => G) x) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => G) x) (instHDiv.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => G) x) (DivInvMonoid.toDiv.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => G) x) (Group.toDivInvMonoid.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => G) x) (CommGroup.toGroup.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => G) x) gG)))) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => G) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))) M G (MulOneClass.toMul.{u2} M mM) (MulOneClass.toMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))) M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG)))) (MonoidHom.monoidHomClass.{u2, u1} M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))))) f x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => G) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))) M G (MulOneClass.toMul.{u2} M mM) (MulOneClass.toMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))) M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG)))) (MonoidHom.monoidHomClass.{u2, u1} M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))))) g x))
 Case conversion may be inaccurate. Consider using '#align monoid_hom.div_apply MonoidHom.div_applyₓ'. -/
 @[simp, to_additive]
 theorem div_apply {M G} {mM : MulOneClass M} {gG : CommGroup G} (f g : M →* G) (x : M) :
Diff
@@ -1253,6 +1253,12 @@ protected def OneHom.copy {hM : One M} {hN : One N} (f : OneHom M N) (f' : M →
 #align zero_hom.copy ZeroHom.copy
 -/
 
+/- warning: one_hom.coe_copy -> OneHom.coe_copy is a dubious translation:
+lean 3 declaration is
+  forall {M : Type.{u1}} {N : Type.{u2}} {hM : One.{u1} M} {hN : One.{u2} N} (f : OneHom.{u1, u2} M N hM hN) (f' : M -> N) (h : Eq.{max (succ u1) (succ u2)} (M -> N) f' (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (OneHom.{u1, u2} M N hM hN) (fun (_x : OneHom.{u1, u2} M N hM hN) => M -> N) (OneHom.hasCoeToFun.{u1, u2} M N hM hN) f)), Eq.{max (succ u1) (succ u2)} (M -> N) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (OneHom.{u1, u2} M N hM hN) (fun (_x : OneHom.{u1, u2} M N hM hN) => M -> N) (OneHom.hasCoeToFun.{u1, u2} M N hM hN) (OneHom.copy.{u1, u2} M N hM hN f f' h)) f'
+but is expected to have type
+  forall {M : Type.{u2}} {N : Type.{u1}} {hM : One.{u2} M} {hN : One.{u1} N} (f : OneHom.{u2, u1} M N hM hN) (f' : M -> N) (h : Eq.{max (succ u2) (succ u1)} (M -> N) f' (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (OneHom.{u2, u1} M N hM hN) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1262 : M) => N) _x) (OneHomClass.toFunLike.{max u2 u1, u2, u1} (OneHom.{u2, u1} M N hM hN) M N hM hN (OneHom.oneHomClass.{u2, u1} M N hM hN)) f)), Eq.{max (succ u2) (succ u1)} (forall (ᾰ : M), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1262 : M) => N) ᾰ) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (OneHom.{u2, u1} M N hM hN) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1262 : M) => N) _x) (OneHomClass.toFunLike.{max u2 u1, u2, u1} (OneHom.{u2, u1} M N hM hN) M N hM hN (OneHom.oneHomClass.{u2, u1} M N hM hN)) (OneHom.copy.{u2, u1} M N hM hN f f' h)) f'
+Case conversion may be inaccurate. Consider using '#align one_hom.coe_copy OneHom.coe_copyₓ'. -/
 @[simp, to_additive]
 theorem OneHom.coe_copy {hM : One M} {hN : One N} (f : OneHom M N) (f' : M → N) (h : f' = f) :
     ⇑(f.copy f' h) = f' :=
@@ -1260,6 +1266,12 @@ theorem OneHom.coe_copy {hM : One M} {hN : One N} (f : OneHom M N) (f' : M → N
 #align one_hom.coe_copy OneHom.coe_copy
 #align zero_hom.coe_copy ZeroHom.coe_copy
 
+/- warning: one_hom.coe_copy_eq -> OneHom.coe_copy_eq is a dubious translation:
+lean 3 declaration is
+  forall {M : Type.{u1}} {N : Type.{u2}} {hM : One.{u1} M} {hN : One.{u2} N} (f : OneHom.{u1, u2} M N hM hN) (f' : M -> N) (h : Eq.{max (succ u1) (succ u2)} (M -> N) f' (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (OneHom.{u1, u2} M N hM hN) (fun (_x : OneHom.{u1, u2} M N hM hN) => M -> N) (OneHom.hasCoeToFun.{u1, u2} M N hM hN) f)), Eq.{max (succ u2) (succ u1)} (OneHom.{u1, u2} M N hM hN) (OneHom.copy.{u1, u2} M N hM hN f f' h) f
+but is expected to have type
+  forall {M : Type.{u2}} {N : Type.{u1}} {hM : One.{u2} M} {hN : One.{u1} N} (f : OneHom.{u2, u1} M N hM hN) (f' : M -> N) (h : Eq.{max (succ u2) (succ u1)} (M -> N) f' (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (OneHom.{u2, u1} M N hM hN) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1262 : M) => N) _x) (OneHomClass.toFunLike.{max u2 u1, u2, u1} (OneHom.{u2, u1} M N hM hN) M N hM hN (OneHom.oneHomClass.{u2, u1} M N hM hN)) f)), Eq.{max (succ u2) (succ u1)} (OneHom.{u2, u1} M N hM hN) (OneHom.copy.{u2, u1} M N hM hN f f' h) f
+Case conversion may be inaccurate. Consider using '#align one_hom.coe_copy_eq OneHom.coe_copy_eqₓ'. -/
 @[to_additive]
 theorem OneHom.coe_copy_eq {hM : One M} {hN : One N} (f : OneHom M N) (f' : M → N) (h : f' = f) :
     f.copy f' h = f :=
@@ -1280,6 +1292,12 @@ protected def MulHom.copy {hM : Mul M} {hN : Mul N} (f : M →ₙ* N) (f' : M 
 #align add_hom.copy AddHom.copy
 -/
 
+/- warning: mul_hom.coe_copy -> MulHom.coe_copy is a dubious translation:
+lean 3 declaration is
+  forall {M : Type.{u1}} {N : Type.{u2}} {hM : Mul.{u1} M} {hN : Mul.{u2} N} (f : MulHom.{u1, u2} M N hM hN) (f' : M -> N) (h : Eq.{max (succ u1) (succ u2)} (M -> N) f' (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MulHom.{u1, u2} M N hM hN) (fun (_x : MulHom.{u1, u2} M N hM hN) => M -> N) (MulHom.hasCoeToFun.{u1, u2} M N hM hN) f)), Eq.{max (succ u1) (succ u2)} (M -> N) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MulHom.{u1, u2} M N hM hN) (fun (_x : MulHom.{u1, u2} M N hM hN) => M -> N) (MulHom.hasCoeToFun.{u1, u2} M N hM hN) (MulHom.copy.{u1, u2} M N hM hN f f' h)) f'
+but is expected to have type
+  forall {M : Type.{u2}} {N : Type.{u1}} {hM : Mul.{u2} M} {hN : Mul.{u1} N} (f : MulHom.{u2, u1} M N hM hN) (f' : M -> N) (h : Eq.{max (succ u2) (succ u1)} (M -> N) f' (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N hM hN) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N hM hN) M N hM hN (MulHom.mulHomClass.{u2, u1} M N hM hN)) f)), Eq.{max (succ u2) (succ u1)} (forall (ᾰ : M), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) ᾰ) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N hM hN) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N hM hN) M N hM hN (MulHom.mulHomClass.{u2, u1} M N hM hN)) (MulHom.copy.{u2, u1} M N hM hN f f' h)) f'
+Case conversion may be inaccurate. Consider using '#align mul_hom.coe_copy MulHom.coe_copyₓ'. -/
 @[simp, to_additive]
 theorem MulHom.coe_copy {hM : Mul M} {hN : Mul N} (f : M →ₙ* N) (f' : M → N) (h : f' = f) :
     ⇑(f.copy f' h) = f' :=
@@ -1287,6 +1305,12 @@ theorem MulHom.coe_copy {hM : Mul M} {hN : Mul N} (f : M →ₙ* N) (f' : M →
 #align mul_hom.coe_copy MulHom.coe_copy
 #align add_hom.coe_copy AddHom.coe_copy
 
+/- warning: mul_hom.coe_copy_eq -> MulHom.coe_copy_eq is a dubious translation:
+lean 3 declaration is
+  forall {M : Type.{u1}} {N : Type.{u2}} {hM : Mul.{u1} M} {hN : Mul.{u2} N} (f : MulHom.{u1, u2} M N hM hN) (f' : M -> N) (h : Eq.{max (succ u1) (succ u2)} (M -> N) f' (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MulHom.{u1, u2} M N hM hN) (fun (_x : MulHom.{u1, u2} M N hM hN) => M -> N) (MulHom.hasCoeToFun.{u1, u2} M N hM hN) f)), Eq.{max (succ u2) (succ u1)} (MulHom.{u1, u2} M N hM hN) (MulHom.copy.{u1, u2} M N hM hN f f' h) f
+but is expected to have type
+  forall {M : Type.{u2}} {N : Type.{u1}} {hM : Mul.{u2} M} {hN : Mul.{u1} N} (f : MulHom.{u2, u1} M N hM hN) (f' : M -> N) (h : Eq.{max (succ u2) (succ u1)} (M -> N) f' (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N hM hN) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N hM hN) M N hM hN (MulHom.mulHomClass.{u2, u1} M N hM hN)) f)), Eq.{max (succ u2) (succ u1)} (MulHom.{u2, u1} M N hM hN) (MulHom.copy.{u2, u1} M N hM hN f f' h) f
+Case conversion may be inaccurate. Consider using '#align mul_hom.coe_copy_eq MulHom.coe_copy_eqₓ'. -/
 @[to_additive]
 theorem MulHom.coe_copy_eq {hM : Mul M} {hN : Mul N} (f : M →ₙ* N) (f' : M → N) (h : f' = f) :
     f.copy f' h = f :=
@@ -1310,6 +1334,12 @@ protected def MonoidHom.copy {hM : MulOneClass M} {hN : MulOneClass N} (f : M 
 #align monoid_hom.copy MonoidHom.copy
 #align add_monoid_hom.copy AddMonoidHom.copy
 
+/- warning: monoid_hom.coe_copy -> MonoidHom.coe_copy is a dubious translation:
+lean 3 declaration is
+  forall {M : Type.{u1}} {N : Type.{u2}} {hM : MulOneClass.{u1} M} {hN : MulOneClass.{u2} N} (f : MonoidHom.{u1, u2} M N hM hN) (f' : M -> N) (h : Eq.{max (succ u1) (succ u2)} (M -> N) f' (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} M N hM hN) (fun (_x : MonoidHom.{u1, u2} M N hM hN) => M -> N) (MonoidHom.hasCoeToFun.{u1, u2} M N hM hN) f)), Eq.{max (succ u1) (succ u2)} (M -> N) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} M N hM hN) (fun (_x : MonoidHom.{u1, u2} M N hM hN) => M -> N) (MonoidHom.hasCoeToFun.{u1, u2} M N hM hN) (MonoidHom.copy.{u1, u2} M N hM hN f f' h)) f'
+but is expected to have type
+  forall {M : Type.{u2}} {N : Type.{u1}} {hM : MulOneClass.{u2} M} {hN : MulOneClass.{u1} N} (f : MonoidHom.{u2, u1} M N hM hN) (f' : M -> N) (h : Eq.{max (succ u2) (succ u1)} (M -> N) f' (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M N hM hN) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N hM hN) M N (MulOneClass.toMul.{u2} M hM) (MulOneClass.toMul.{u1} N hN) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N hM hN) M N hM hN (MonoidHom.monoidHomClass.{u2, u1} M N hM hN))) f)), Eq.{max (succ u2) (succ u1)} (forall (ᾰ : M), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) ᾰ) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M N hM hN) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N hM hN) M N (MulOneClass.toMul.{u2} M hM) (MulOneClass.toMul.{u1} N hN) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N hM hN) M N hM hN (MonoidHom.monoidHomClass.{u2, u1} M N hM hN))) (MonoidHom.copy.{u2, u1} M N hM hN f f' h)) f'
+Case conversion may be inaccurate. Consider using '#align monoid_hom.coe_copy MonoidHom.coe_copyₓ'. -/
 @[simp, to_additive]
 theorem MonoidHom.coe_copy {hM : MulOneClass M} {hN : MulOneClass N} (f : M →* N) (f' : M → N)
     (h : f' = f) : ⇑(f.copy f' h) = f' :=
@@ -1317,6 +1347,12 @@ theorem MonoidHom.coe_copy {hM : MulOneClass M} {hN : MulOneClass N} (f : M →*
 #align monoid_hom.coe_copy MonoidHom.coe_copy
 #align add_monoid_hom.coe_copy AddMonoidHom.coe_copy
 
+/- warning: monoid_hom.copy_eq -> MonoidHom.copy_eq is a dubious translation:
+lean 3 declaration is
+  forall {M : Type.{u1}} {N : Type.{u2}} {hM : MulOneClass.{u1} M} {hN : MulOneClass.{u2} N} (f : MonoidHom.{u1, u2} M N hM hN) (f' : M -> N) (h : Eq.{max (succ u1) (succ u2)} (M -> N) f' (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} M N hM hN) (fun (_x : MonoidHom.{u1, u2} M N hM hN) => M -> N) (MonoidHom.hasCoeToFun.{u1, u2} M N hM hN) f)), Eq.{max (succ u2) (succ u1)} (MonoidHom.{u1, u2} M N hM hN) (MonoidHom.copy.{u1, u2} M N hM hN f f' h) f
+but is expected to have type
+  forall {M : Type.{u2}} {N : Type.{u1}} {hM : MulOneClass.{u2} M} {hN : MulOneClass.{u1} N} (f : MonoidHom.{u2, u1} M N hM hN) (f' : M -> N) (h : Eq.{max (succ u2) (succ u1)} (M -> N) f' (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M N hM hN) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N hM hN) M N (MulOneClass.toMul.{u2} M hM) (MulOneClass.toMul.{u1} N hN) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N hM hN) M N hM hN (MonoidHom.monoidHomClass.{u2, u1} M N hM hN))) f)), Eq.{max (succ u2) (succ u1)} (MonoidHom.{u2, u1} M N hM hN) (MonoidHom.copy.{u2, u1} M N hM hN f f' h) f
+Case conversion may be inaccurate. Consider using '#align monoid_hom.copy_eq MonoidHom.copy_eqₓ'. -/
 @[to_additive]
 theorem MonoidHom.copy_eq {hM : MulOneClass M} {hN : MulOneClass N} (f : M →* N) (f' : M → N)
     (h : f' = f) : f.copy f' h = f :=
@@ -1337,12 +1373,24 @@ protected def MonoidWithZeroHom.copy {hM : MulZeroOneClass M} {hN : MulZeroOneCl
   { f.toZeroHom.copy f' h, f.toMonoidHom.copy f' h with }
 #align monoid_with_zero_hom.copy MonoidWithZeroHom.copy
 
+/- warning: monoid_with_zero_hom.coe_copy -> MonoidWithZeroHom.coe_copy is a dubious translation:
+lean 3 declaration is
+  forall {M : Type.{u1}} {N : Type.{u2}} {hM : MulZeroOneClass.{u1} M} {hN : MulZeroOneClass.{u2} N} (f : MonoidWithZeroHom.{u1, u2} M N hM hN) (f' : M -> N) (h : Eq.{max (succ u1) (succ u2)} (M -> N) f' (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidWithZeroHom.{u1, u2} M N hM hN) (fun (_x : MonoidWithZeroHom.{u1, u2} M N hM hN) => M -> N) (MonoidWithZeroHom.hasCoeToFun.{u1, u2} M N hM hN) f)), Eq.{max (succ u1) (succ u2)} (M -> N) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} M N (MulZeroOneClass.toMulOneClass.{u1} M hM) (MulZeroOneClass.toMulOneClass.{u2} N hN)) (fun (_x : MonoidHom.{u1, u2} M N (MulZeroOneClass.toMulOneClass.{u1} M hM) (MulZeroOneClass.toMulOneClass.{u2} N hN)) => M -> N) (MonoidHom.hasCoeToFun.{u1, u2} M N (MulZeroOneClass.toMulOneClass.{u1} M hM) (MulZeroOneClass.toMulOneClass.{u2} N hN)) (MonoidWithZeroHom.copy.{u1, u2} M N hM hN f f' h)) f'
+but is expected to have type
+  forall {M : Type.{u2}} {N : Type.{u1}} {hM : MulZeroOneClass.{u2} M} {hN : MulZeroOneClass.{u1} N} (f : MonoidWithZeroHom.{u2, u1} M N hM hN) (f' : M -> N) (h : Eq.{max (succ u2) (succ u1)} (M -> N) f' (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidWithZeroHom.{u2, u1} M N hM hN) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N hM hN) M N (MulOneClass.toMul.{u2} M (MulZeroOneClass.toMulOneClass.{u2} M hM)) (MulOneClass.toMul.{u1} N (MulZeroOneClass.toMulOneClass.{u1} N hN)) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N hM hN) M N (MulZeroOneClass.toMulOneClass.{u2} M hM) (MulZeroOneClass.toMulOneClass.{u1} N hN) (MonoidWithZeroHomClass.toMonoidHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N hM hN) M N hM hN (MonoidWithZeroHom.monoidWithZeroHomClass.{u2, u1} M N hM hN)))) f)), Eq.{max (succ u2) (succ u1)} (forall (ᾰ : M), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) ᾰ) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M N (MulZeroOneClass.toMulOneClass.{u2} M hM) (MulZeroOneClass.toMulOneClass.{u1} N hN)) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N (MulZeroOneClass.toMulOneClass.{u2} M hM) (MulZeroOneClass.toMulOneClass.{u1} N hN)) M N (MulOneClass.toMul.{u2} M (MulZeroOneClass.toMulOneClass.{u2} M hM)) (MulOneClass.toMul.{u1} N (MulZeroOneClass.toMulOneClass.{u1} N hN)) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N (MulZeroOneClass.toMulOneClass.{u2} M hM) (MulZeroOneClass.toMulOneClass.{u1} N hN)) M N (MulZeroOneClass.toMulOneClass.{u2} M hM) (MulZeroOneClass.toMulOneClass.{u1} N hN) (MonoidHom.monoidHomClass.{u2, u1} M N (MulZeroOneClass.toMulOneClass.{u2} M hM) (MulZeroOneClass.toMulOneClass.{u1} N hN)))) (MonoidWithZeroHom.copy.{u2, u1} M N hM hN f f' h)) f'
+Case conversion may be inaccurate. Consider using '#align monoid_with_zero_hom.coe_copy MonoidWithZeroHom.coe_copyₓ'. -/
 @[simp]
 theorem MonoidWithZeroHom.coe_copy {hM : MulZeroOneClass M} {hN : MulZeroOneClass N} (f : M →*₀ N)
     (f' : M → N) (h : f' = f) : ⇑(f.copy f' h) = f' :=
   rfl
 #align monoid_with_zero_hom.coe_copy MonoidWithZeroHom.coe_copy
 
+/- warning: monoid_with_zero_hom.copy_eq -> MonoidWithZeroHom.copy_eq is a dubious translation:
+lean 3 declaration is
+  forall {M : Type.{u1}} {N : Type.{u2}} {hM : MulZeroOneClass.{u1} M} {hN : MulZeroOneClass.{u2} N} (f : MonoidWithZeroHom.{u1, u2} M N hM hN) (f' : M -> N) (h : Eq.{max (succ u1) (succ u2)} (M -> N) f' (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidWithZeroHom.{u1, u2} M N hM hN) (fun (_x : MonoidWithZeroHom.{u1, u2} M N hM hN) => M -> N) (MonoidWithZeroHom.hasCoeToFun.{u1, u2} M N hM hN) f)), Eq.{max (succ u2) (succ u1)} (MonoidHom.{u1, u2} M N (MulZeroOneClass.toMulOneClass.{u1} M hM) (MulZeroOneClass.toMulOneClass.{u2} N hN)) (MonoidWithZeroHom.copy.{u1, u2} M N hM hN f f' h) ((fun (a : Sort.{max (succ u2) (succ u1)}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{max (succ u2) (succ u1), max (succ u2) (succ u1)} a b] => self.0) (MonoidWithZeroHom.{u1, u2} M N hM hN) (MonoidHom.{u1, u2} M N (MulZeroOneClass.toMulOneClass.{u1} M hM) (MulZeroOneClass.toMulOneClass.{u2} N hN)) (HasLiftT.mk.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (MonoidWithZeroHom.{u1, u2} M N hM hN) (MonoidHom.{u1, u2} M N (MulZeroOneClass.toMulOneClass.{u1} M hM) (MulZeroOneClass.toMulOneClass.{u2} N hN)) (CoeTCₓ.coe.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (MonoidWithZeroHom.{u1, u2} M N hM hN) (MonoidHom.{u1, u2} M N (MulZeroOneClass.toMulOneClass.{u1} M hM) (MulZeroOneClass.toMulOneClass.{u2} N hN)) (MonoidHom.hasCoeT.{u1, u2, max u2 u1} M N (MonoidWithZeroHom.{u1, u2} M N hM hN) (MulZeroOneClass.toMulOneClass.{u1} M hM) (MulZeroOneClass.toMulOneClass.{u2} N hN) (MonoidWithZeroHomClass.toMonoidHomClass.{max u2 u1, u1, u2} (MonoidWithZeroHom.{u1, u2} M N hM hN) M N hM hN (MonoidWithZeroHom.monoidWithZeroHomClass.{u1, u2} M N hM hN))))) f)
+but is expected to have type
+  forall {M : Type.{u2}} {N : Type.{u1}} {hM : MulZeroOneClass.{u2} M} {hN : MulZeroOneClass.{u1} N} (f : MonoidWithZeroHom.{u2, u1} M N hM hN) (f' : M -> N) (h : Eq.{max (succ u2) (succ u1)} (M -> N) f' (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidWithZeroHom.{u2, u1} M N hM hN) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N hM hN) M N (MulOneClass.toMul.{u2} M (MulZeroOneClass.toMulOneClass.{u2} M hM)) (MulOneClass.toMul.{u1} N (MulZeroOneClass.toMulOneClass.{u1} N hN)) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N hM hN) M N (MulZeroOneClass.toMulOneClass.{u2} M hM) (MulZeroOneClass.toMulOneClass.{u1} N hN) (MonoidWithZeroHomClass.toMonoidHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N hM hN) M N hM hN (MonoidWithZeroHom.monoidWithZeroHomClass.{u2, u1} M N hM hN)))) f)), Eq.{max (succ u2) (succ u1)} (MonoidHom.{u2, u1} M N (MulZeroOneClass.toMulOneClass.{u2} M hM) (MulZeroOneClass.toMulOneClass.{u1} N hN)) (MonoidWithZeroHom.copy.{u2, u1} M N hM hN f f' h) (MonoidHomClass.toMonoidHom.{u2, u1, max u2 u1} M N (MonoidWithZeroHom.{u2, u1} M N hM hN) (MulZeroOneClass.toMulOneClass.{u2} M hM) (MulZeroOneClass.toMulOneClass.{u1} N hN) (MonoidWithZeroHomClass.toMonoidHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N hM hN) M N hM hN (MonoidWithZeroHom.monoidWithZeroHomClass.{u2, u1} M N hM hN)) f)
+Case conversion may be inaccurate. Consider using '#align monoid_with_zero_hom.copy_eq MonoidWithZeroHom.copy_eqₓ'. -/
 theorem MonoidWithZeroHom.copy_eq {hM : MulZeroOneClass M} {hN : MulZeroOneClass N} (f : M →*₀ N)
     (f' : M → N) (h : f' = f) : f.copy f' h = f :=
   FunLike.ext' h
Diff
@@ -250,7 +250,7 @@ instance OneHom.oneHomClass : OneHomClass (OneHom M N) M N
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} {F : Type.{u3}} [_inst_1 : One.{u1} M] [_inst_2 : One.{u2} N] [_inst_3 : OneHomClass.{u3, u1, u2} F M N _inst_1 _inst_2] (f : F), Eq.{succ u2} N (coeFn.{succ u3, max (succ u1) (succ u2)} F (fun (_x : F) => M -> N) (FunLike.hasCoeToFun.{succ u3, succ u1, succ u2} F M (fun (_x : M) => N) (OneHomClass.toFunLike.{u3, u1, u2} F M N _inst_1 _inst_2 _inst_3)) f (OfNat.ofNat.{u1} M 1 (OfNat.mk.{u1} M 1 (One.one.{u1} M _inst_1)))) (OfNat.ofNat.{u2} N 1 (OfNat.mk.{u2} N 1 (One.one.{u2} N _inst_2)))
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} {F : Type.{u3}} [_inst_1 : One.{u2} M] [_inst_2 : One.{u1} N] [_inst_3 : OneHomClass.{u3, u2, u1} F M N _inst_1 _inst_2] (f : F), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1254 : M) => N) (OfNat.ofNat.{u2} M 1 (One.toOfNat1.{u2} M _inst_1))) (FunLike.coe.{succ u3, succ u2, succ u1} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1254 : M) => N) _x) (OneHomClass.toFunLike.{u3, u2, u1} F M N _inst_1 _inst_2 _inst_3) f (OfNat.ofNat.{u2} M 1 (One.toOfNat1.{u2} M _inst_1))) (OfNat.ofNat.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1254 : M) => N) (OfNat.ofNat.{u2} M 1 (One.toOfNat1.{u2} M _inst_1))) 1 (One.toOfNat1.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1254 : M) => N) (OfNat.ofNat.{u2} M 1 (One.toOfNat1.{u2} M _inst_1))) _inst_2))
+  forall {M : Type.{u2}} {N : Type.{u1}} {F : Type.{u3}} [_inst_1 : One.{u2} M] [_inst_2 : One.{u1} N] [_inst_3 : OneHomClass.{u3, u2, u1} F M N _inst_1 _inst_2] (f : F), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1262 : M) => N) (OfNat.ofNat.{u2} M 1 (One.toOfNat1.{u2} M _inst_1))) (FunLike.coe.{succ u3, succ u2, succ u1} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1262 : M) => N) _x) (OneHomClass.toFunLike.{u3, u2, u1} F M N _inst_1 _inst_2 _inst_3) f (OfNat.ofNat.{u2} M 1 (One.toOfNat1.{u2} M _inst_1))) (OfNat.ofNat.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1262 : M) => N) (OfNat.ofNat.{u2} M 1 (One.toOfNat1.{u2} M _inst_1))) 1 (One.toOfNat1.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1262 : M) => N) (OfNat.ofNat.{u2} M 1 (One.toOfNat1.{u2} M _inst_1))) _inst_2))
 Case conversion may be inaccurate. Consider using '#align map_one map_oneₓ'. -/
 @[simp, to_additive]
 theorem map_one [OneHomClass F M N] (f : F) : f 1 = 1 :=
@@ -262,7 +262,7 @@ theorem map_one [OneHomClass F M N] (f : F) : f 1 = 1 :=
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} {F : Type.{u3}} [_inst_1 : One.{u1} M] [_inst_2 : One.{u2} N] [_inst_3 : OneHomClass.{u3, u1, u2} F M N _inst_1 _inst_2] (f : F), (Function.Injective.{succ u1, succ u2} M N (coeFn.{succ u3, max (succ u1) (succ u2)} F (fun (_x : F) => M -> N) (FunLike.hasCoeToFun.{succ u3, succ u1, succ u2} F M (fun (_x : M) => N) (OneHomClass.toFunLike.{u3, u1, u2} F M N _inst_1 _inst_2 _inst_3)) f)) -> (forall {x : M}, Iff (Eq.{succ u2} N (coeFn.{succ u3, max (succ u1) (succ u2)} F (fun (_x : F) => M -> N) (FunLike.hasCoeToFun.{succ u3, succ u1, succ u2} F M (fun (_x : M) => N) (OneHomClass.toFunLike.{u3, u1, u2} F M N _inst_1 _inst_2 _inst_3)) f x) (OfNat.ofNat.{u2} N 1 (OfNat.mk.{u2} N 1 (One.one.{u2} N _inst_2)))) (Eq.{succ u1} M x (OfNat.ofNat.{u1} M 1 (OfNat.mk.{u1} M 1 (One.one.{u1} M _inst_1)))))
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} {F : Type.{u3}} [_inst_1 : One.{u2} M] [_inst_2 : One.{u1} N] [_inst_3 : OneHomClass.{u3, u2, u1} F M N _inst_1 _inst_2] (f : F), (Function.Injective.{succ u2, succ u1} M N (FunLike.coe.{succ u3, succ u2, succ u1} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1254 : M) => N) _x) (OneHomClass.toFunLike.{u3, u2, u1} F M N _inst_1 _inst_2 _inst_3) f)) -> (forall {x : M}, Iff (Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1254 : M) => N) x) (FunLike.coe.{succ u3, succ u2, succ u1} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1254 : M) => N) _x) (OneHomClass.toFunLike.{u3, u2, u1} F M N _inst_1 _inst_2 _inst_3) f x) (OfNat.ofNat.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1254 : M) => N) x) 1 (One.toOfNat1.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1254 : M) => N) x) _inst_2))) (Eq.{succ u2} M x (OfNat.ofNat.{u2} M 1 (One.toOfNat1.{u2} M _inst_1))))
+  forall {M : Type.{u2}} {N : Type.{u1}} {F : Type.{u3}} [_inst_1 : One.{u2} M] [_inst_2 : One.{u1} N] [_inst_3 : OneHomClass.{u3, u2, u1} F M N _inst_1 _inst_2] (f : F), (Function.Injective.{succ u2, succ u1} M N (FunLike.coe.{succ u3, succ u2, succ u1} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1262 : M) => N) _x) (OneHomClass.toFunLike.{u3, u2, u1} F M N _inst_1 _inst_2 _inst_3) f)) -> (forall {x : M}, Iff (Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1262 : M) => N) x) (FunLike.coe.{succ u3, succ u2, succ u1} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1262 : M) => N) _x) (OneHomClass.toFunLike.{u3, u2, u1} F M N _inst_1 _inst_2 _inst_3) f x) (OfNat.ofNat.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1262 : M) => N) x) 1 (One.toOfNat1.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1262 : M) => N) x) _inst_2))) (Eq.{succ u2} M x (OfNat.ofNat.{u2} M 1 (One.toOfNat1.{u2} M _inst_1))))
 Case conversion may be inaccurate. Consider using '#align map_eq_one_iff map_eq_one_iffₓ'. -/
 @[to_additive]
 theorem map_eq_one_iff [OneHomClass F M N] (f : F) (hf : Function.Injective f) {x : M} :
@@ -275,7 +275,7 @@ theorem map_eq_one_iff [OneHomClass F M N] (f : F) (hf : Function.Injective f) {
 lean 3 declaration is
   forall {R : Type.{u1}} {S : Type.{u2}} {F : Type.{u3}} [_inst_3 : One.{u1} R] [_inst_4 : One.{u2} S] [_inst_5 : OneHomClass.{u3, u1, u2} F R S _inst_3 _inst_4] (f : F), (Function.Injective.{succ u1, succ u2} R S (coeFn.{succ u3, max (succ u1) (succ u2)} F (fun (_x : F) => R -> S) (FunLike.hasCoeToFun.{succ u3, succ u1, succ u2} F R (fun (_x : R) => S) (OneHomClass.toFunLike.{u3, u1, u2} F R S _inst_3 _inst_4 _inst_5)) f)) -> (forall {x : R}, Iff (Ne.{succ u2} S (coeFn.{succ u3, max (succ u1) (succ u2)} F (fun (_x : F) => R -> S) (FunLike.hasCoeToFun.{succ u3, succ u1, succ u2} F R (fun (_x : R) => S) (OneHomClass.toFunLike.{u3, u1, u2} F R S _inst_3 _inst_4 _inst_5)) f x) (OfNat.ofNat.{u2} S 1 (OfNat.mk.{u2} S 1 (One.one.{u2} S _inst_4)))) (Ne.{succ u1} R x (OfNat.ofNat.{u1} R 1 (OfNat.mk.{u1} R 1 (One.one.{u1} R _inst_3)))))
 but is expected to have type
-  forall {R : Type.{u3}} {S : Type.{u2}} {F : Type.{u1}} [_inst_3 : One.{u3} R] [_inst_4 : One.{u2} S] [_inst_5 : OneHomClass.{u1, u3, u2} F R S _inst_3 _inst_4] (f : F), (Function.Injective.{succ u3, succ u2} R S (FunLike.coe.{succ u1, succ u3, succ u2} F R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1254 : R) => S) _x) (OneHomClass.toFunLike.{u1, u3, u2} F R S _inst_3 _inst_4 _inst_5) f)) -> (forall {x : R}, Iff (Ne.{succ u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1254 : R) => S) x) (FunLike.coe.{succ u1, succ u3, succ u2} F R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1254 : R) => S) _x) (OneHomClass.toFunLike.{u1, u3, u2} F R S _inst_3 _inst_4 _inst_5) f x) (OfNat.ofNat.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1254 : R) => S) x) 1 (One.toOfNat1.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1254 : R) => S) x) _inst_4))) (Ne.{succ u3} R x (OfNat.ofNat.{u3} R 1 (One.toOfNat1.{u3} R _inst_3))))
+  forall {R : Type.{u3}} {S : Type.{u2}} {F : Type.{u1}} [_inst_3 : One.{u3} R] [_inst_4 : One.{u2} S] [_inst_5 : OneHomClass.{u1, u3, u2} F R S _inst_3 _inst_4] (f : F), (Function.Injective.{succ u3, succ u2} R S (FunLike.coe.{succ u1, succ u3, succ u2} F R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1262 : R) => S) _x) (OneHomClass.toFunLike.{u1, u3, u2} F R S _inst_3 _inst_4 _inst_5) f)) -> (forall {x : R}, Iff (Ne.{succ u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1262 : R) => S) x) (FunLike.coe.{succ u1, succ u3, succ u2} F R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1262 : R) => S) _x) (OneHomClass.toFunLike.{u1, u3, u2} F R S _inst_3 _inst_4 _inst_5) f x) (OfNat.ofNat.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1262 : R) => S) x) 1 (One.toOfNat1.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1262 : R) => S) x) _inst_4))) (Ne.{succ u3} R x (OfNat.ofNat.{u3} R 1 (One.toOfNat1.{u3} R _inst_3))))
 Case conversion may be inaccurate. Consider using '#align map_ne_one_iff map_ne_one_iffₓ'. -/
 @[to_additive]
 theorem map_ne_one_iff {R S F : Type _} [One R] [One S] [OneHomClass F R S] (f : F)
@@ -288,7 +288,7 @@ theorem map_ne_one_iff {R S F : Type _} [One R] [One S] [OneHomClass F R S] (f :
 lean 3 declaration is
   forall {R : Type.{u1}} {S : Type.{u2}} {F : Type.{u3}} [_inst_3 : One.{u1} R] [_inst_4 : One.{u2} S] [_inst_5 : OneHomClass.{u3, u1, u2} F R S _inst_3 _inst_4] {f : F} {x : R}, (Ne.{succ u2} S (coeFn.{succ u3, max (succ u1) (succ u2)} F (fun (_x : F) => R -> S) (FunLike.hasCoeToFun.{succ u3, succ u1, succ u2} F R (fun (_x : R) => S) (OneHomClass.toFunLike.{u3, u1, u2} F R S _inst_3 _inst_4 _inst_5)) f x) (OfNat.ofNat.{u2} S 1 (OfNat.mk.{u2} S 1 (One.one.{u2} S _inst_4)))) -> (Ne.{succ u1} R x (OfNat.ofNat.{u1} R 1 (OfNat.mk.{u1} R 1 (One.one.{u1} R _inst_3))))
 but is expected to have type
-  forall {R : Type.{u3}} {S : Type.{u2}} {F : Type.{u1}} [_inst_3 : One.{u3} R] [_inst_4 : One.{u2} S] [_inst_5 : OneHomClass.{u1, u3, u2} F R S _inst_3 _inst_4] {f : F} {x : R}, (Ne.{succ u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1254 : R) => S) x) (FunLike.coe.{succ u1, succ u3, succ u2} F R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1254 : R) => S) _x) (OneHomClass.toFunLike.{u1, u3, u2} F R S _inst_3 _inst_4 _inst_5) f x) (OfNat.ofNat.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1254 : R) => S) x) 1 (One.toOfNat1.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1254 : R) => S) x) _inst_4))) -> (Ne.{succ u3} R x (OfNat.ofNat.{u3} R 1 (One.toOfNat1.{u3} R _inst_3)))
+  forall {R : Type.{u3}} {S : Type.{u2}} {F : Type.{u1}} [_inst_3 : One.{u3} R] [_inst_4 : One.{u2} S] [_inst_5 : OneHomClass.{u1, u3, u2} F R S _inst_3 _inst_4] {f : F} {x : R}, (Ne.{succ u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1262 : R) => S) x) (FunLike.coe.{succ u1, succ u3, succ u2} F R (fun (_x : R) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1262 : R) => S) _x) (OneHomClass.toFunLike.{u1, u3, u2} F R S _inst_3 _inst_4 _inst_5) f x) (OfNat.ofNat.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1262 : R) => S) x) 1 (One.toOfNat1.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1262 : R) => S) x) _inst_4))) -> (Ne.{succ u3} R x (OfNat.ofNat.{u3} R 1 (One.toOfNat1.{u3} R _inst_3)))
 Case conversion may be inaccurate. Consider using '#align ne_one_of_map ne_one_of_mapₓ'. -/
 @[to_additive]
 theorem ne_one_of_map {R S F : Type _} [One R] [One S] [OneHomClass F R S] {f : F} {x : R}
@@ -307,7 +307,7 @@ instance [OneHomClass F M N] : CoeTC F (OneHom M N) :=
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} {F : Type.{u3}} [_inst_1 : One.{u1} M] [_inst_2 : One.{u2} N] [_inst_3 : OneHomClass.{u3, u1, u2} F M N _inst_1 _inst_2] (f : F), Eq.{max (succ u1) (succ u2)} ((fun (_x : OneHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) ((fun (a : Type.{u3}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{succ u3, max (succ u2) (succ u1)} a b] => self.0) F (OneHom.{u1, u2} M N _inst_1 _inst_2) (HasLiftT.mk.{succ u3, max (succ u2) (succ u1)} F (OneHom.{u1, u2} M N _inst_1 _inst_2) (CoeTCₓ.coe.{succ u3, max (succ u2) (succ u1)} F (OneHom.{u1, u2} M N _inst_1 _inst_2) (OneHom.hasCoeT.{u1, u2, u3} M N F _inst_1 _inst_2 _inst_3))) f)) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (OneHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : OneHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (FunLike.hasCoeToFun.{max (succ u2) (succ u1), succ u1, succ u2} (OneHom.{u1, u2} M N _inst_1 _inst_2) M (fun (_x : M) => N) (OneHomClass.toFunLike.{max u2 u1, u1, u2} (OneHom.{u1, u2} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (OneHom.oneHomClass.{u1, u2} M N _inst_1 _inst_2))) ((fun (a : Type.{u3}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{succ u3, max (succ u2) (succ u1)} a b] => self.0) F (OneHom.{u1, u2} M N _inst_1 _inst_2) (HasLiftT.mk.{succ u3, max (succ u2) (succ u1)} F (OneHom.{u1, u2} M N _inst_1 _inst_2) (CoeTCₓ.coe.{succ u3, max (succ u2) (succ u1)} F (OneHom.{u1, u2} M N _inst_1 _inst_2) (OneHom.hasCoeT.{u1, u2, u3} M N F _inst_1 _inst_2 _inst_3))) f)) (coeFn.{succ u3, max (succ u1) (succ u2)} F (fun (_x : F) => M -> N) (FunLike.hasCoeToFun.{succ u3, succ u1, succ u2} F M (fun (_x : M) => N) (OneHomClass.toFunLike.{u3, u1, u2} F M N _inst_1 _inst_2 _inst_3)) f)
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} {F : Type.{u3}} [_inst_1 : One.{u2} M] [_inst_2 : One.{u1} N] [_inst_3 : OneHomClass.{u3, u2, u1} F M N _inst_1 _inst_2] (f : F), Eq.{max (succ u2) (succ u1)} (forall (a : M), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1254 : M) => N) a) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (OneHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1254 : M) => N) _x) (OneHomClass.toFunLike.{max u2 u1, u2, u1} (OneHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (OneHom.oneHomClass.{u2, u1} M N _inst_1 _inst_2)) (OneHomClass.toOneHom.{u2, u1, u3} M N F _inst_1 _inst_2 _inst_3 f)) (FunLike.coe.{succ u3, succ u2, succ u1} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1254 : M) => N) _x) (OneHomClass.toFunLike.{u3, u2, u1} F M N _inst_1 _inst_2 _inst_3) f)
+  forall {M : Type.{u2}} {N : Type.{u1}} {F : Type.{u3}} [_inst_1 : One.{u2} M] [_inst_2 : One.{u1} N] [_inst_3 : OneHomClass.{u3, u2, u1} F M N _inst_1 _inst_2] (f : F), Eq.{max (succ u2) (succ u1)} (forall (a : M), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1262 : M) => N) a) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (OneHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1262 : M) => N) _x) (OneHomClass.toFunLike.{max u2 u1, u2, u1} (OneHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (OneHom.oneHomClass.{u2, u1} M N _inst_1 _inst_2)) (OneHomClass.toOneHom.{u2, u1, u3} M N F _inst_1 _inst_2 _inst_3 f)) (FunLike.coe.{succ u3, succ u2, succ u1} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1262 : M) => N) _x) (OneHomClass.toFunLike.{u3, u2, u1} F M N _inst_1 _inst_2 _inst_3) f)
 Case conversion may be inaccurate. Consider using '#align one_hom.coe_coe OneHom.coe_coeₓ'. -/
 @[simp, to_additive]
 theorem OneHom.coe_coe [OneHomClass F M N] (f : F) : ((f : OneHom M N) : M → N) = f :=
@@ -369,7 +369,7 @@ instance MulHom.mulHomClass : MulHomClass (M →ₙ* N) M N
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} {F : Type.{u3}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] [_inst_3 : MulHomClass.{u3, u1, u2} F M N _inst_1 _inst_2] (f : F) (x : M) (y : M), Eq.{succ u2} N (coeFn.{succ u3, max (succ u1) (succ u2)} F (fun (_x : F) => M -> N) (FunLike.hasCoeToFun.{succ u3, succ u1, succ u2} F M (fun (_x : M) => N) (MulHomClass.toFunLike.{u3, u1, u2} F M N _inst_1 _inst_2 _inst_3)) f (HMul.hMul.{u1, u1, u1} M M M (instHMul.{u1} M _inst_1) x y)) (HMul.hMul.{u2, u2, u2} N N N (instHMul.{u2} N _inst_2) (coeFn.{succ u3, max (succ u1) (succ u2)} F (fun (_x : F) => M -> N) (FunLike.hasCoeToFun.{succ u3, succ u1, succ u2} F M (fun (_x : M) => N) (MulHomClass.toFunLike.{u3, u1, u2} F M N _inst_1 _inst_2 _inst_3)) f x) (coeFn.{succ u3, max (succ u1) (succ u2)} F (fun (_x : F) => M -> N) (FunLike.hasCoeToFun.{succ u3, succ u1, succ u2} F M (fun (_x : M) => N) (MulHomClass.toFunLike.{u3, u1, u2} F M N _inst_1 _inst_2 _inst_3)) f y))
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} {F : Type.{u3}} [_inst_1 : Mul.{u2} M] [_inst_2 : Mul.{u1} N] [_inst_3 : MulHomClass.{u3, u2, u1} F M N _inst_1 _inst_2] (f : F) (x : M) (y : M), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) (HMul.hMul.{u2, u2, u2} M M M (instHMul.{u2} M _inst_1) x y)) (FunLike.coe.{succ u3, succ u2, succ u1} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{u3, u2, u1} F M N _inst_1 _inst_2 _inst_3) f (HMul.hMul.{u2, u2, u2} M M M (instHMul.{u2} M _inst_1) x y)) (HMul.hMul.{u1, u1, u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) x) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) y) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) x) (instHMul.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) x) _inst_2) (FunLike.coe.{succ u3, succ u2, succ u1} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{u3, u2, u1} F M N _inst_1 _inst_2 _inst_3) f x) (FunLike.coe.{succ u3, succ u2, succ u1} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{u3, u2, u1} F M N _inst_1 _inst_2 _inst_3) f y))
+  forall {M : Type.{u2}} {N : Type.{u1}} {F : Type.{u3}} [_inst_1 : Mul.{u2} M] [_inst_2 : Mul.{u1} N] [_inst_3 : MulHomClass.{u3, u2, u1} F M N _inst_1 _inst_2] (f : F) (x : M) (y : M), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) (HMul.hMul.{u2, u2, u2} M M M (instHMul.{u2} M _inst_1) x y)) (FunLike.coe.{succ u3, succ u2, succ u1} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{u3, u2, u1} F M N _inst_1 _inst_2 _inst_3) f (HMul.hMul.{u2, u2, u2} M M M (instHMul.{u2} M _inst_1) x y)) (HMul.hMul.{u1, u1, u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) x) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) y) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) x) (instHMul.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) x) _inst_2) (FunLike.coe.{succ u3, succ u2, succ u1} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{u3, u2, u1} F M N _inst_1 _inst_2 _inst_3) f x) (FunLike.coe.{succ u3, succ u2, succ u1} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{u3, u2, u1} F M N _inst_1 _inst_2 _inst_3) f y))
 Case conversion may be inaccurate. Consider using '#align map_mul map_mulₓ'. -/
 @[simp, to_additive]
 theorem map_mul [MulHomClass F M N] (f : F) (x y : M) : f (x * y) = f x * f y :=
@@ -387,7 +387,7 @@ instance [MulHomClass F M N] : CoeTC F (M →ₙ* N) :=
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} {F : Type.{u3}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] [_inst_3 : MulHomClass.{u3, u1, u2} F M N _inst_1 _inst_2] (f : F), Eq.{max (succ u1) (succ u2)} ((fun (_x : MulHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) ((fun (a : Type.{u3}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{succ u3, max (succ u2) (succ u1)} a b] => self.0) F (MulHom.{u1, u2} M N _inst_1 _inst_2) (HasLiftT.mk.{succ u3, max (succ u2) (succ u1)} F (MulHom.{u1, u2} M N _inst_1 _inst_2) (CoeTCₓ.coe.{succ u3, max (succ u2) (succ u1)} F (MulHom.{u1, u2} M N _inst_1 _inst_2) (MulHom.hasCoeT.{u1, u2, u3} M N F _inst_1 _inst_2 _inst_3))) f)) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MulHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MulHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (FunLike.hasCoeToFun.{max (succ u2) (succ u1), succ u1, succ u2} (MulHom.{u1, u2} M N _inst_1 _inst_2) M (fun (_x : M) => N) (MulHomClass.toFunLike.{max u2 u1, u1, u2} (MulHom.{u1, u2} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u1, u2} M N _inst_1 _inst_2))) ((fun (a : Type.{u3}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{succ u3, max (succ u2) (succ u1)} a b] => self.0) F (MulHom.{u1, u2} M N _inst_1 _inst_2) (HasLiftT.mk.{succ u3, max (succ u2) (succ u1)} F (MulHom.{u1, u2} M N _inst_1 _inst_2) (CoeTCₓ.coe.{succ u3, max (succ u2) (succ u1)} F (MulHom.{u1, u2} M N _inst_1 _inst_2) (MulHom.hasCoeT.{u1, u2, u3} M N F _inst_1 _inst_2 _inst_3))) f)) (coeFn.{succ u3, max (succ u1) (succ u2)} F (fun (_x : F) => M -> N) (FunLike.hasCoeToFun.{succ u3, succ u1, succ u2} F M (fun (_x : M) => N) (MulHomClass.toFunLike.{u3, u1, u2} F M N _inst_1 _inst_2 _inst_3)) f)
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} {F : Type.{u3}} [_inst_1 : Mul.{u2} M] [_inst_2 : Mul.{u1} N] [_inst_3 : MulHomClass.{u3, u2, u1} F M N _inst_1 _inst_2] (f : F), Eq.{max (succ u2) (succ u1)} (forall (a : M), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) a) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) (MulHomClass.toMulHom.{u2, u1, u3} M N F _inst_1 _inst_2 _inst_3 f)) (FunLike.coe.{succ u3, succ u2, succ u1} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{u3, u2, u1} F M N _inst_1 _inst_2 _inst_3) f)
+  forall {M : Type.{u2}} {N : Type.{u1}} {F : Type.{u3}} [_inst_1 : Mul.{u2} M] [_inst_2 : Mul.{u1} N] [_inst_3 : MulHomClass.{u3, u2, u1} F M N _inst_1 _inst_2] (f : F), Eq.{max (succ u2) (succ u1)} (forall (a : M), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) a) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) (MulHomClass.toMulHom.{u2, u1, u3} M N F _inst_1 _inst_2 _inst_3 f)) (FunLike.coe.{succ u3, succ u2, succ u1} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{u3, u2, u1} F M N _inst_1 _inst_2 _inst_3) f)
 Case conversion may be inaccurate. Consider using '#align mul_hom.coe_coe MulHom.coe_coeₓ'. -/
 @[simp, to_additive]
 theorem MulHom.coe_coe [MulHomClass F M N] (f : F) : ((f : MulHom M N) : M → N) = f :=
@@ -458,7 +458,7 @@ instance [MonoidHomClass F M N] : CoeTC F (M →* N) :=
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} {F : Type.{u3}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N] [_inst_3 : MonoidHomClass.{u3, u1, u2} F M N _inst_1 _inst_2] (f : F), Eq.{max (succ u1) (succ u2)} ((fun (_x : MonoidHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) ((fun (a : Type.{u3}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{succ u3, max (succ u2) (succ u1)} a b] => self.0) F (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (HasLiftT.mk.{succ u3, max (succ u2) (succ u1)} F (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (CoeTCₓ.coe.{succ u3, max (succ u2) (succ u1)} F (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.hasCoeT.{u1, u2, u3} M N F _inst_1 _inst_2 _inst_3))) f)) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MonoidHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (FunLike.hasCoeToFun.{max (succ u2) (succ u1), succ u1, succ u2} (MonoidHom.{u1, u2} M N _inst_1 _inst_2) M (fun (_x : M) => N) (MulHomClass.toFunLike.{max u2 u1, u1, u2} (MonoidHom.{u1, u2} M N _inst_1 _inst_2) M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2) (MonoidHomClass.toMulHomClass.{max u2 u1, u1, u2} (MonoidHom.{u1, u2} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2)))) ((fun (a : Type.{u3}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{succ u3, max (succ u2) (succ u1)} a b] => self.0) F (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (HasLiftT.mk.{succ u3, max (succ u2) (succ u1)} F (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (CoeTCₓ.coe.{succ u3, max (succ u2) (succ u1)} F (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.hasCoeT.{u1, u2, u3} M N F _inst_1 _inst_2 _inst_3))) f)) (coeFn.{succ u3, max (succ u1) (succ u2)} F (fun (_x : F) => M -> N) (FunLike.hasCoeToFun.{succ u3, succ u1, succ u2} F M (fun (_x : M) => N) (MulHomClass.toFunLike.{u3, u1, u2} F M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2) (MonoidHomClass.toMulHomClass.{u3, u1, u2} F M N _inst_1 _inst_2 _inst_3))) f)
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} {F : Type.{u3}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u1} N] [_inst_3 : MonoidHomClass.{u3, u2, u1} F M N _inst_1 _inst_2] (f : F), Eq.{max (succ u2) (succ u1)} (forall (a : M), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) a) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2))) (MonoidHomClass.toMonoidHom.{u2, u1, u3} M N F _inst_1 _inst_2 _inst_3 f)) (FunLike.coe.{succ u3, succ u2, succ u1} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{u3, u2, u1} F M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2) (MonoidHomClass.toMulHomClass.{u3, u2, u1} F M N _inst_1 _inst_2 _inst_3)) f)
+  forall {M : Type.{u2}} {N : Type.{u1}} {F : Type.{u3}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u1} N] [_inst_3 : MonoidHomClass.{u3, u2, u1} F M N _inst_1 _inst_2] (f : F), Eq.{max (succ u2) (succ u1)} (forall (a : M), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) a) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2))) (MonoidHomClass.toMonoidHom.{u2, u1, u3} M N F _inst_1 _inst_2 _inst_3 f)) (FunLike.coe.{succ u3, succ u2, succ u1} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{u3, u2, u1} F M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2) (MonoidHomClass.toMulHomClass.{u3, u2, u1} F M N _inst_1 _inst_2 _inst_3)) f)
 Case conversion may be inaccurate. Consider using '#align monoid_hom.coe_coe MonoidHom.coe_coeₓ'. -/
 @[simp, to_additive]
 theorem MonoidHom.coe_coe [MonoidHomClass F M N] (f : F) : ((f : M →* N) : M → N) = f :=
@@ -470,7 +470,7 @@ theorem MonoidHom.coe_coe [MonoidHomClass F M N] (f : F) : ((f : M →* N) : M 
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} {F : Type.{u3}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N] [_inst_3 : MonoidHomClass.{u3, u1, u2} F M N _inst_1 _inst_2] (f : F) {a : M} {b : M}, (Eq.{succ u1} M (HMul.hMul.{u1, u1, u1} M M M (instHMul.{u1} M (MulOneClass.toHasMul.{u1} M _inst_1)) a b) (OfNat.ofNat.{u1} M 1 (OfNat.mk.{u1} M 1 (One.one.{u1} M (MulOneClass.toHasOne.{u1} M _inst_1))))) -> (Eq.{succ u2} N (HMul.hMul.{u2, u2, u2} N N N (instHMul.{u2} N (MulOneClass.toHasMul.{u2} N _inst_2)) (coeFn.{succ u3, max (succ u1) (succ u2)} F (fun (_x : F) => M -> N) (FunLike.hasCoeToFun.{succ u3, succ u1, succ u2} F M (fun (_x : M) => N) (MulHomClass.toFunLike.{u3, u1, u2} F M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2) (MonoidHomClass.toMulHomClass.{u3, u1, u2} F M N _inst_1 _inst_2 _inst_3))) f a) (coeFn.{succ u3, max (succ u1) (succ u2)} F (fun (_x : F) => M -> N) (FunLike.hasCoeToFun.{succ u3, succ u1, succ u2} F M (fun (_x : M) => N) (MulHomClass.toFunLike.{u3, u1, u2} F M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2) (MonoidHomClass.toMulHomClass.{u3, u1, u2} F M N _inst_1 _inst_2 _inst_3))) f b)) (OfNat.ofNat.{u2} N 1 (OfNat.mk.{u2} N 1 (One.one.{u2} N (MulOneClass.toHasOne.{u2} N _inst_2)))))
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} {F : Type.{u3}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u1} N] [_inst_3 : MonoidHomClass.{u3, u2, u1} F M N _inst_1 _inst_2] (f : F) {a : M} {b : M}, (Eq.{succ u2} M (HMul.hMul.{u2, u2, u2} M M M (instHMul.{u2} M (MulOneClass.toMul.{u2} M _inst_1)) a b) (OfNat.ofNat.{u2} M 1 (One.toOfNat1.{u2} M (MulOneClass.toOne.{u2} M _inst_1)))) -> (Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) a) (HMul.hMul.{u1, u1, u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) a) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) b) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) a) (instHMul.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) a) (MulOneClass.toMul.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) a) _inst_2)) (FunLike.coe.{succ u3, succ u2, succ u1} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{u3, u2, u1} F M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2) (MonoidHomClass.toMulHomClass.{u3, u2, u1} F M N _inst_1 _inst_2 _inst_3)) f a) (FunLike.coe.{succ u3, succ u2, succ u1} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{u3, u2, u1} F M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2) (MonoidHomClass.toMulHomClass.{u3, u2, u1} F M N _inst_1 _inst_2 _inst_3)) f b)) (OfNat.ofNat.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) a) 1 (One.toOfNat1.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) a) (MulOneClass.toOne.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) a) _inst_2))))
+  forall {M : Type.{u2}} {N : Type.{u1}} {F : Type.{u3}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u1} N] [_inst_3 : MonoidHomClass.{u3, u2, u1} F M N _inst_1 _inst_2] (f : F) {a : M} {b : M}, (Eq.{succ u2} M (HMul.hMul.{u2, u2, u2} M M M (instHMul.{u2} M (MulOneClass.toMul.{u2} M _inst_1)) a b) (OfNat.ofNat.{u2} M 1 (One.toOfNat1.{u2} M (MulOneClass.toOne.{u2} M _inst_1)))) -> (Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) a) (HMul.hMul.{u1, u1, u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) a) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) b) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) a) (instHMul.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) a) (MulOneClass.toMul.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) a) _inst_2)) (FunLike.coe.{succ u3, succ u2, succ u1} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{u3, u2, u1} F M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2) (MonoidHomClass.toMulHomClass.{u3, u2, u1} F M N _inst_1 _inst_2 _inst_3)) f a) (FunLike.coe.{succ u3, succ u2, succ u1} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{u3, u2, u1} F M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2) (MonoidHomClass.toMulHomClass.{u3, u2, u1} F M N _inst_1 _inst_2 _inst_3)) f b)) (OfNat.ofNat.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) a) 1 (One.toOfNat1.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) a) (MulOneClass.toOne.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) a) _inst_2))))
 Case conversion may be inaccurate. Consider using '#align map_mul_eq_one map_mul_eq_oneₓ'. -/
 @[to_additive]
 theorem map_mul_eq_one [MonoidHomClass F M N] (f : F) {a b : M} (h : a * b = 1) : f a * f b = 1 :=
@@ -482,7 +482,7 @@ theorem map_mul_eq_one [MonoidHomClass F M N] (f : F) {a b : M} (h : a * b = 1)
 lean 3 declaration is
   forall {G : Type.{u1}} {H : Type.{u2}} {F : Type.{u3}} [_inst_3 : DivInvMonoid.{u1} G] [_inst_4 : DivInvMonoid.{u2} H] [_inst_5 : MonoidHomClass.{u3, u1, u2} F G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G _inst_3)) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H _inst_4))] (f : F), (forall (a : G), Eq.{succ u2} H (coeFn.{succ u3, max (succ u1) (succ u2)} F (fun (_x : F) => G -> H) (FunLike.hasCoeToFun.{succ u3, succ u1, succ u2} F G (fun (_x : G) => H) (MulHomClass.toFunLike.{u3, u1, u2} F G H (MulOneClass.toHasMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G _inst_3))) (MulOneClass.toHasMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H _inst_4))) (MonoidHomClass.toMulHomClass.{u3, u1, u2} F G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G _inst_3)) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H _inst_4)) _inst_5))) f (Inv.inv.{u1} G (DivInvMonoid.toHasInv.{u1} G _inst_3) a)) (Inv.inv.{u2} H (DivInvMonoid.toHasInv.{u2} H _inst_4) (coeFn.{succ u3, max (succ u1) (succ u2)} F (fun (_x : F) => G -> H) (FunLike.hasCoeToFun.{succ u3, succ u1, succ u2} F G (fun (_x : G) => H) (MulHomClass.toFunLike.{u3, u1, u2} F G H (MulOneClass.toHasMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G _inst_3))) (MulOneClass.toHasMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H _inst_4))) (MonoidHomClass.toMulHomClass.{u3, u1, u2} F G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G _inst_3)) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H _inst_4)) _inst_5))) f a))) -> (forall (a : G) (b : G), Eq.{succ u2} H (coeFn.{succ u3, max (succ u1) (succ u2)} F (fun (_x : F) => G -> H) (FunLike.hasCoeToFun.{succ u3, succ u1, succ u2} F G (fun (_x : G) => H) (MulHomClass.toFunLike.{u3, u1, u2} F G H (MulOneClass.toHasMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G _inst_3))) (MulOneClass.toHasMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H _inst_4))) (MonoidHomClass.toMulHomClass.{u3, u1, u2} F G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G _inst_3)) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H _inst_4)) _inst_5))) f (HDiv.hDiv.{u1, u1, u1} G G G (instHDiv.{u1} G (DivInvMonoid.toHasDiv.{u1} G _inst_3)) a b)) (HDiv.hDiv.{u2, u2, u2} H H H (instHDiv.{u2} H (DivInvMonoid.toHasDiv.{u2} H _inst_4)) (coeFn.{succ u3, max (succ u1) (succ u2)} F (fun (_x : F) => G -> H) (FunLike.hasCoeToFun.{succ u3, succ u1, succ u2} F G (fun (_x : G) => H) (MulHomClass.toFunLike.{u3, u1, u2} F G H (MulOneClass.toHasMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G _inst_3))) (MulOneClass.toHasMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H _inst_4))) (MonoidHomClass.toMulHomClass.{u3, u1, u2} F G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G _inst_3)) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H _inst_4)) _inst_5))) f a) (coeFn.{succ u3, max (succ u1) (succ u2)} F (fun (_x : F) => G -> H) (FunLike.hasCoeToFun.{succ u3, succ u1, succ u2} F G (fun (_x : G) => H) (MulHomClass.toFunLike.{u3, u1, u2} F G H (MulOneClass.toHasMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G _inst_3))) (MulOneClass.toHasMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H _inst_4))) (MonoidHomClass.toMulHomClass.{u3, u1, u2} F G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G _inst_3)) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H _inst_4)) _inst_5))) f b)))
 but is expected to have type
-  forall {G : Type.{u3}} {H : Type.{u2}} {F : Type.{u1}} [_inst_3 : DivInvMonoid.{u3} G] [_inst_4 : DivInvMonoid.{u2} H] [_inst_5 : MonoidHomClass.{u1, u3, u2} F G H (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G _inst_3)) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H _inst_4))] (f : F), (forall (a : G), Eq.{succ u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : G) => H) (Inv.inv.{u3} G (DivInvMonoid.toInv.{u3} G _inst_3) a)) (FunLike.coe.{succ u1, succ u3, succ u2} F G (fun (_x : G) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : G) => H) _x) (MulHomClass.toFunLike.{u1, u3, u2} F G H (MulOneClass.toMul.{u3} G (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G _inst_3))) (MulOneClass.toMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H _inst_4))) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F G H (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G _inst_3)) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H _inst_4)) _inst_5)) f (Inv.inv.{u3} G (DivInvMonoid.toInv.{u3} G _inst_3) a)) (Inv.inv.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : G) => H) a) (DivInvMonoid.toInv.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : G) => H) a) _inst_4) (FunLike.coe.{succ u1, succ u3, succ u2} F G (fun (_x : G) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : G) => H) _x) (MulHomClass.toFunLike.{u1, u3, u2} F G H (MulOneClass.toMul.{u3} G (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G _inst_3))) (MulOneClass.toMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H _inst_4))) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F G H (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G _inst_3)) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H _inst_4)) _inst_5)) f a))) -> (forall (a : G) (b : G), Eq.{succ u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : G) => H) (HDiv.hDiv.{u3, u3, u3} G G G (instHDiv.{u3} G (DivInvMonoid.toDiv.{u3} G _inst_3)) a b)) (FunLike.coe.{succ u1, succ u3, succ u2} F G (fun (_x : G) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : G) => H) _x) (MulHomClass.toFunLike.{u1, u3, u2} F G H (MulOneClass.toMul.{u3} G (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G _inst_3))) (MulOneClass.toMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H _inst_4))) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F G H (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G _inst_3)) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H _inst_4)) _inst_5)) f (HDiv.hDiv.{u3, u3, u3} G G G (instHDiv.{u3} G (DivInvMonoid.toDiv.{u3} G _inst_3)) a b)) (HDiv.hDiv.{u2, u2, u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : G) => H) a) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : G) => H) b) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : G) => H) a) (instHDiv.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : G) => H) a) (DivInvMonoid.toDiv.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : G) => H) a) _inst_4)) (FunLike.coe.{succ u1, succ u3, succ u2} F G (fun (_x : G) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : G) => H) _x) (MulHomClass.toFunLike.{u1, u3, u2} F G H (MulOneClass.toMul.{u3} G (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G _inst_3))) (MulOneClass.toMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H _inst_4))) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F G H (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G _inst_3)) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H _inst_4)) _inst_5)) f a) (FunLike.coe.{succ u1, succ u3, succ u2} F G (fun (_x : G) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : G) => H) _x) (MulHomClass.toFunLike.{u1, u3, u2} F G H (MulOneClass.toMul.{u3} G (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G _inst_3))) (MulOneClass.toMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H _inst_4))) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F G H (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G _inst_3)) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H _inst_4)) _inst_5)) f b)))
+  forall {G : Type.{u3}} {H : Type.{u2}} {F : Type.{u1}} [_inst_3 : DivInvMonoid.{u3} G] [_inst_4 : DivInvMonoid.{u2} H] [_inst_5 : MonoidHomClass.{u1, u3, u2} F G H (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G _inst_3)) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H _inst_4))] (f : F), (forall (a : G), Eq.{succ u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : G) => H) (Inv.inv.{u3} G (DivInvMonoid.toInv.{u3} G _inst_3) a)) (FunLike.coe.{succ u1, succ u3, succ u2} F G (fun (_x : G) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : G) => H) _x) (MulHomClass.toFunLike.{u1, u3, u2} F G H (MulOneClass.toMul.{u3} G (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G _inst_3))) (MulOneClass.toMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H _inst_4))) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F G H (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G _inst_3)) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H _inst_4)) _inst_5)) f (Inv.inv.{u3} G (DivInvMonoid.toInv.{u3} G _inst_3) a)) (Inv.inv.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : G) => H) a) (DivInvMonoid.toInv.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : G) => H) a) _inst_4) (FunLike.coe.{succ u1, succ u3, succ u2} F G (fun (_x : G) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : G) => H) _x) (MulHomClass.toFunLike.{u1, u3, u2} F G H (MulOneClass.toMul.{u3} G (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G _inst_3))) (MulOneClass.toMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H _inst_4))) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F G H (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G _inst_3)) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H _inst_4)) _inst_5)) f a))) -> (forall (a : G) (b : G), Eq.{succ u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : G) => H) (HDiv.hDiv.{u3, u3, u3} G G G (instHDiv.{u3} G (DivInvMonoid.toDiv.{u3} G _inst_3)) a b)) (FunLike.coe.{succ u1, succ u3, succ u2} F G (fun (_x : G) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : G) => H) _x) (MulHomClass.toFunLike.{u1, u3, u2} F G H (MulOneClass.toMul.{u3} G (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G _inst_3))) (MulOneClass.toMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H _inst_4))) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F G H (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G _inst_3)) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H _inst_4)) _inst_5)) f (HDiv.hDiv.{u3, u3, u3} G G G (instHDiv.{u3} G (DivInvMonoid.toDiv.{u3} G _inst_3)) a b)) (HDiv.hDiv.{u2, u2, u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : G) => H) a) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : G) => H) b) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : G) => H) a) (instHDiv.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : G) => H) a) (DivInvMonoid.toDiv.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : G) => H) a) _inst_4)) (FunLike.coe.{succ u1, succ u3, succ u2} F G (fun (_x : G) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : G) => H) _x) (MulHomClass.toFunLike.{u1, u3, u2} F G H (MulOneClass.toMul.{u3} G (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G _inst_3))) (MulOneClass.toMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H _inst_4))) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F G H (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G _inst_3)) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H _inst_4)) _inst_5)) f a) (FunLike.coe.{succ u1, succ u3, succ u2} F G (fun (_x : G) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : G) => H) _x) (MulHomClass.toFunLike.{u1, u3, u2} F G H (MulOneClass.toMul.{u3} G (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G _inst_3))) (MulOneClass.toMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H _inst_4))) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F G H (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G _inst_3)) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H _inst_4)) _inst_5)) f b)))
 Case conversion may be inaccurate. Consider using '#align map_div' map_div'ₓ'. -/
 @[to_additive]
 theorem map_div' [DivInvMonoid G] [DivInvMonoid H] [MonoidHomClass F G H] (f : F)
@@ -495,7 +495,7 @@ theorem map_div' [DivInvMonoid G] [DivInvMonoid H] [MonoidHomClass F G H] (f : F
 lean 3 declaration is
   forall {G : Type.{u1}} {H : Type.{u2}} {F : Type.{u3}} [_inst_3 : Group.{u1} G] [_inst_4 : DivisionMonoid.{u2} H] [_inst_5 : MonoidHomClass.{u3, u1, u2} F G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4)))] (f : F) (a : G), Eq.{succ u2} H (coeFn.{succ u3, max (succ u1) (succ u2)} F (fun (_x : F) => G -> H) (FunLike.hasCoeToFun.{succ u3, succ u1, succ u2} F G (fun (_x : G) => H) (MulHomClass.toFunLike.{u3, u1, u2} F G H (MulOneClass.toHasMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (MulOneClass.toHasMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4)))) (MonoidHomClass.toMulHomClass.{u3, u1, u2} F G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4))) _inst_5))) f (Inv.inv.{u1} G (DivInvMonoid.toHasInv.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)) a)) (Inv.inv.{u2} H (DivInvMonoid.toHasInv.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4)) (coeFn.{succ u3, max (succ u1) (succ u2)} F (fun (_x : F) => G -> H) (FunLike.hasCoeToFun.{succ u3, succ u1, succ u2} F G (fun (_x : G) => H) (MulHomClass.toFunLike.{u3, u1, u2} F G H (MulOneClass.toHasMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (MulOneClass.toHasMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4)))) (MonoidHomClass.toMulHomClass.{u3, u1, u2} F G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4))) _inst_5))) f a))
 but is expected to have type
-  forall {G : Type.{u3}} {H : Type.{u2}} {F : Type.{u1}} [_inst_3 : Group.{u3} G] [_inst_4 : DivisionMonoid.{u2} H] [_inst_5 : MonoidHomClass.{u1, u3, u2} F G H (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4)))] (f : F) (a : G), Eq.{succ u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : G) => H) (Inv.inv.{u3} G (InvOneClass.toInv.{u3} G (DivInvOneMonoid.toInvOneClass.{u3} G (DivisionMonoid.toDivInvOneMonoid.{u3} G (Group.toDivisionMonoid.{u3} G _inst_3)))) a)) (FunLike.coe.{succ u1, succ u3, succ u2} F G (fun (_x : G) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : G) => H) _x) (MulHomClass.toFunLike.{u1, u3, u2} F G H (MulOneClass.toMul.{u3} G (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3)))) (MulOneClass.toMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4)))) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F G H (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4))) _inst_5)) f (Inv.inv.{u3} G (InvOneClass.toInv.{u3} G (DivInvOneMonoid.toInvOneClass.{u3} G (DivisionMonoid.toDivInvOneMonoid.{u3} G (Group.toDivisionMonoid.{u3} G _inst_3)))) a)) (Inv.inv.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : G) => H) a) (InvOneClass.toInv.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : G) => H) a) (DivInvOneMonoid.toInvOneClass.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : G) => H) a) (DivisionMonoid.toDivInvOneMonoid.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : G) => H) a) _inst_4))) (FunLike.coe.{succ u1, succ u3, succ u2} F G (fun (_x : G) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : G) => H) _x) (MulHomClass.toFunLike.{u1, u3, u2} F G H (MulOneClass.toMul.{u3} G (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3)))) (MulOneClass.toMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4)))) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F G H (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4))) _inst_5)) f a))
+  forall {G : Type.{u3}} {H : Type.{u2}} {F : Type.{u1}} [_inst_3 : Group.{u3} G] [_inst_4 : DivisionMonoid.{u2} H] [_inst_5 : MonoidHomClass.{u1, u3, u2} F G H (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4)))] (f : F) (a : G), Eq.{succ u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : G) => H) (Inv.inv.{u3} G (InvOneClass.toInv.{u3} G (DivInvOneMonoid.toInvOneClass.{u3} G (DivisionMonoid.toDivInvOneMonoid.{u3} G (Group.toDivisionMonoid.{u3} G _inst_3)))) a)) (FunLike.coe.{succ u1, succ u3, succ u2} F G (fun (_x : G) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : G) => H) _x) (MulHomClass.toFunLike.{u1, u3, u2} F G H (MulOneClass.toMul.{u3} G (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3)))) (MulOneClass.toMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4)))) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F G H (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4))) _inst_5)) f (Inv.inv.{u3} G (InvOneClass.toInv.{u3} G (DivInvOneMonoid.toInvOneClass.{u3} G (DivisionMonoid.toDivInvOneMonoid.{u3} G (Group.toDivisionMonoid.{u3} G _inst_3)))) a)) (Inv.inv.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : G) => H) a) (InvOneClass.toInv.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : G) => H) a) (DivInvOneMonoid.toInvOneClass.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : G) => H) a) (DivisionMonoid.toDivInvOneMonoid.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : G) => H) a) _inst_4))) (FunLike.coe.{succ u1, succ u3, succ u2} F G (fun (_x : G) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : G) => H) _x) (MulHomClass.toFunLike.{u1, u3, u2} F G H (MulOneClass.toMul.{u3} G (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3)))) (MulOneClass.toMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4)))) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F G H (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4))) _inst_5)) f a))
 Case conversion may be inaccurate. Consider using '#align map_inv map_invₓ'. -/
 /-- Group homomorphisms preserve inverse. -/
 @[simp, to_additive "Additive group homomorphisms preserve negation."]
@@ -509,7 +509,7 @@ theorem map_inv [Group G] [DivisionMonoid H] [MonoidHomClass F G H] (f : F) (a :
 lean 3 declaration is
   forall {G : Type.{u1}} {H : Type.{u2}} {F : Type.{u3}} [_inst_3 : Group.{u1} G] [_inst_4 : DivisionMonoid.{u2} H] [_inst_5 : MonoidHomClass.{u3, u1, u2} F G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4)))] (f : F) (a : G) (b : G), Eq.{succ u2} H (coeFn.{succ u3, max (succ u1) (succ u2)} F (fun (_x : F) => G -> H) (FunLike.hasCoeToFun.{succ u3, succ u1, succ u2} F G (fun (_x : G) => H) (MulHomClass.toFunLike.{u3, u1, u2} F G H (MulOneClass.toHasMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (MulOneClass.toHasMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4)))) (MonoidHomClass.toMulHomClass.{u3, u1, u2} F G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4))) _inst_5))) f (HMul.hMul.{u1, u1, u1} G G G (instHMul.{u1} G (MulOneClass.toHasMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3))))) a (Inv.inv.{u1} G (DivInvMonoid.toHasInv.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)) b))) (HMul.hMul.{u2, u2, u2} H H H (instHMul.{u2} H (MulOneClass.toHasMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4))))) (coeFn.{succ u3, max (succ u1) (succ u2)} F (fun (_x : F) => G -> H) (FunLike.hasCoeToFun.{succ u3, succ u1, succ u2} F G (fun (_x : G) => H) (MulHomClass.toFunLike.{u3, u1, u2} F G H (MulOneClass.toHasMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (MulOneClass.toHasMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4)))) (MonoidHomClass.toMulHomClass.{u3, u1, u2} F G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4))) _inst_5))) f a) (Inv.inv.{u2} H (DivInvMonoid.toHasInv.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4)) (coeFn.{succ u3, max (succ u1) (succ u2)} F (fun (_x : F) => G -> H) (FunLike.hasCoeToFun.{succ u3, succ u1, succ u2} F G (fun (_x : G) => H) (MulHomClass.toFunLike.{u3, u1, u2} F G H (MulOneClass.toHasMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (MulOneClass.toHasMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4)))) (MonoidHomClass.toMulHomClass.{u3, u1, u2} F G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4))) _inst_5))) f b)))
 but is expected to have type
-  forall {G : Type.{u3}} {H : Type.{u2}} {F : Type.{u1}} [_inst_3 : Group.{u3} G] [_inst_4 : DivisionMonoid.{u2} H] [_inst_5 : MonoidHomClass.{u1, u3, u2} F G H (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4)))] (f : F) (a : G) (b : G), Eq.{succ u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : G) => H) (HMul.hMul.{u3, u3, u3} G G G (instHMul.{u3} G (MulOneClass.toMul.{u3} G (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3))))) a (Inv.inv.{u3} G (InvOneClass.toInv.{u3} G (DivInvOneMonoid.toInvOneClass.{u3} G (DivisionMonoid.toDivInvOneMonoid.{u3} G (Group.toDivisionMonoid.{u3} G _inst_3)))) b))) (FunLike.coe.{succ u1, succ u3, succ u2} F G (fun (_x : G) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : G) => H) _x) (MulHomClass.toFunLike.{u1, u3, u2} F G H (MulOneClass.toMul.{u3} G (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3)))) (MulOneClass.toMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4)))) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F G H (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4))) _inst_5)) f (HMul.hMul.{u3, u3, u3} G G G (instHMul.{u3} G (MulOneClass.toMul.{u3} G (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3))))) a (Inv.inv.{u3} G (InvOneClass.toInv.{u3} G (DivInvOneMonoid.toInvOneClass.{u3} G (DivisionMonoid.toDivInvOneMonoid.{u3} G (Group.toDivisionMonoid.{u3} G _inst_3)))) b))) (HMul.hMul.{u2, u2, u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : G) => H) a) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : G) => H) b) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : G) => H) a) (instHMul.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : G) => H) a) (MulOneClass.toMul.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : G) => H) a) (Monoid.toMulOneClass.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : G) => H) a) (DivInvMonoid.toMonoid.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : G) => H) a) (DivisionMonoid.toDivInvMonoid.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : G) => H) a) _inst_4))))) (FunLike.coe.{succ u1, succ u3, succ u2} F G (fun (_x : G) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : G) => H) _x) (MulHomClass.toFunLike.{u1, u3, u2} F G H (MulOneClass.toMul.{u3} G (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3)))) (MulOneClass.toMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4)))) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F G H (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4))) _inst_5)) f a) (Inv.inv.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : G) => H) b) (InvOneClass.toInv.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : G) => H) b) (DivInvOneMonoid.toInvOneClass.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : G) => H) b) (DivisionMonoid.toDivInvOneMonoid.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : G) => H) b) _inst_4))) (FunLike.coe.{succ u1, succ u3, succ u2} F G (fun (_x : G) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : G) => H) _x) (MulHomClass.toFunLike.{u1, u3, u2} F G H (MulOneClass.toMul.{u3} G (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3)))) (MulOneClass.toMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4)))) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F G H (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4))) _inst_5)) f b)))
+  forall {G : Type.{u3}} {H : Type.{u2}} {F : Type.{u1}} [_inst_3 : Group.{u3} G] [_inst_4 : DivisionMonoid.{u2} H] [_inst_5 : MonoidHomClass.{u1, u3, u2} F G H (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4)))] (f : F) (a : G) (b : G), Eq.{succ u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : G) => H) (HMul.hMul.{u3, u3, u3} G G G (instHMul.{u3} G (MulOneClass.toMul.{u3} G (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3))))) a (Inv.inv.{u3} G (InvOneClass.toInv.{u3} G (DivInvOneMonoid.toInvOneClass.{u3} G (DivisionMonoid.toDivInvOneMonoid.{u3} G (Group.toDivisionMonoid.{u3} G _inst_3)))) b))) (FunLike.coe.{succ u1, succ u3, succ u2} F G (fun (_x : G) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : G) => H) _x) (MulHomClass.toFunLike.{u1, u3, u2} F G H (MulOneClass.toMul.{u3} G (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3)))) (MulOneClass.toMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4)))) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F G H (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4))) _inst_5)) f (HMul.hMul.{u3, u3, u3} G G G (instHMul.{u3} G (MulOneClass.toMul.{u3} G (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3))))) a (Inv.inv.{u3} G (InvOneClass.toInv.{u3} G (DivInvOneMonoid.toInvOneClass.{u3} G (DivisionMonoid.toDivInvOneMonoid.{u3} G (Group.toDivisionMonoid.{u3} G _inst_3)))) b))) (HMul.hMul.{u2, u2, u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : G) => H) a) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : G) => H) b) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : G) => H) a) (instHMul.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : G) => H) a) (MulOneClass.toMul.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : G) => H) a) (Monoid.toMulOneClass.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : G) => H) a) (DivInvMonoid.toMonoid.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : G) => H) a) (DivisionMonoid.toDivInvMonoid.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : G) => H) a) _inst_4))))) (FunLike.coe.{succ u1, succ u3, succ u2} F G (fun (_x : G) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : G) => H) _x) (MulHomClass.toFunLike.{u1, u3, u2} F G H (MulOneClass.toMul.{u3} G (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3)))) (MulOneClass.toMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4)))) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F G H (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4))) _inst_5)) f a) (Inv.inv.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : G) => H) b) (InvOneClass.toInv.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : G) => H) b) (DivInvOneMonoid.toInvOneClass.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : G) => H) b) (DivisionMonoid.toDivInvOneMonoid.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : G) => H) b) _inst_4))) (FunLike.coe.{succ u1, succ u3, succ u2} F G (fun (_x : G) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : G) => H) _x) (MulHomClass.toFunLike.{u1, u3, u2} F G H (MulOneClass.toMul.{u3} G (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3)))) (MulOneClass.toMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4)))) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F G H (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4))) _inst_5)) f b)))
 Case conversion may be inaccurate. Consider using '#align map_mul_inv map_mul_invₓ'. -/
 /-- Group homomorphisms preserve division. -/
 @[simp, to_additive "Additive group homomorphisms preserve subtraction."]
@@ -522,7 +522,7 @@ theorem map_mul_inv [Group G] [DivisionMonoid H] [MonoidHomClass F G H] (f : F)
 lean 3 declaration is
   forall {G : Type.{u1}} {H : Type.{u2}} {F : Type.{u3}} [_inst_3 : Group.{u1} G] [_inst_4 : DivisionMonoid.{u2} H] [_inst_5 : MonoidHomClass.{u3, u1, u2} F G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4)))] (f : F) (a : G) (b : G), Eq.{succ u2} H (coeFn.{succ u3, max (succ u1) (succ u2)} F (fun (_x : F) => G -> H) (FunLike.hasCoeToFun.{succ u3, succ u1, succ u2} F G (fun (_x : G) => H) (MulHomClass.toFunLike.{u3, u1, u2} F G H (MulOneClass.toHasMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (MulOneClass.toHasMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4)))) (MonoidHomClass.toMulHomClass.{u3, u1, u2} F G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4))) _inst_5))) f (HDiv.hDiv.{u1, u1, u1} G G G (instHDiv.{u1} G (DivInvMonoid.toHasDiv.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3))) a b)) (HDiv.hDiv.{u2, u2, u2} H H H (instHDiv.{u2} H (DivInvMonoid.toHasDiv.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4))) (coeFn.{succ u3, max (succ u1) (succ u2)} F (fun (_x : F) => G -> H) (FunLike.hasCoeToFun.{succ u3, succ u1, succ u2} F G (fun (_x : G) => H) (MulHomClass.toFunLike.{u3, u1, u2} F G H (MulOneClass.toHasMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (MulOneClass.toHasMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4)))) (MonoidHomClass.toMulHomClass.{u3, u1, u2} F G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4))) _inst_5))) f a) (coeFn.{succ u3, max (succ u1) (succ u2)} F (fun (_x : F) => G -> H) (FunLike.hasCoeToFun.{succ u3, succ u1, succ u2} F G (fun (_x : G) => H) (MulHomClass.toFunLike.{u3, u1, u2} F G H (MulOneClass.toHasMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (MulOneClass.toHasMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4)))) (MonoidHomClass.toMulHomClass.{u3, u1, u2} F G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4))) _inst_5))) f b))
 but is expected to have type
-  forall {G : Type.{u3}} {H : Type.{u2}} {F : Type.{u1}} [_inst_3 : Group.{u3} G] [_inst_4 : DivisionMonoid.{u2} H] [_inst_5 : MonoidHomClass.{u1, u3, u2} F G H (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4)))] (f : F) (a : G) (b : G), Eq.{succ u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : G) => H) (HDiv.hDiv.{u3, u3, u3} G G G (instHDiv.{u3} G (DivInvMonoid.toDiv.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3))) a b)) (FunLike.coe.{succ u1, succ u3, succ u2} F G (fun (_x : G) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : G) => H) _x) (MulHomClass.toFunLike.{u1, u3, u2} F G H (MulOneClass.toMul.{u3} G (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3)))) (MulOneClass.toMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4)))) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F G H (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4))) _inst_5)) f (HDiv.hDiv.{u3, u3, u3} G G G (instHDiv.{u3} G (DivInvMonoid.toDiv.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3))) a b)) (HDiv.hDiv.{u2, u2, u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : G) => H) a) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : G) => H) b) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : G) => H) a) (instHDiv.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : G) => H) a) (DivInvMonoid.toDiv.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : G) => H) a) (DivisionMonoid.toDivInvMonoid.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : G) => H) a) _inst_4))) (FunLike.coe.{succ u1, succ u3, succ u2} F G (fun (_x : G) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : G) => H) _x) (MulHomClass.toFunLike.{u1, u3, u2} F G H (MulOneClass.toMul.{u3} G (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3)))) (MulOneClass.toMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4)))) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F G H (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4))) _inst_5)) f a) (FunLike.coe.{succ u1, succ u3, succ u2} F G (fun (_x : G) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : G) => H) _x) (MulHomClass.toFunLike.{u1, u3, u2} F G H (MulOneClass.toMul.{u3} G (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3)))) (MulOneClass.toMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4)))) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F G H (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4))) _inst_5)) f b))
+  forall {G : Type.{u3}} {H : Type.{u2}} {F : Type.{u1}} [_inst_3 : Group.{u3} G] [_inst_4 : DivisionMonoid.{u2} H] [_inst_5 : MonoidHomClass.{u1, u3, u2} F G H (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4)))] (f : F) (a : G) (b : G), Eq.{succ u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : G) => H) (HDiv.hDiv.{u3, u3, u3} G G G (instHDiv.{u3} G (DivInvMonoid.toDiv.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3))) a b)) (FunLike.coe.{succ u1, succ u3, succ u2} F G (fun (_x : G) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : G) => H) _x) (MulHomClass.toFunLike.{u1, u3, u2} F G H (MulOneClass.toMul.{u3} G (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3)))) (MulOneClass.toMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4)))) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F G H (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4))) _inst_5)) f (HDiv.hDiv.{u3, u3, u3} G G G (instHDiv.{u3} G (DivInvMonoid.toDiv.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3))) a b)) (HDiv.hDiv.{u2, u2, u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : G) => H) a) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : G) => H) b) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : G) => H) a) (instHDiv.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : G) => H) a) (DivInvMonoid.toDiv.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : G) => H) a) (DivisionMonoid.toDivInvMonoid.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : G) => H) a) _inst_4))) (FunLike.coe.{succ u1, succ u3, succ u2} F G (fun (_x : G) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : G) => H) _x) (MulHomClass.toFunLike.{u1, u3, u2} F G H (MulOneClass.toMul.{u3} G (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3)))) (MulOneClass.toMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4)))) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F G H (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4))) _inst_5)) f a) (FunLike.coe.{succ u1, succ u3, succ u2} F G (fun (_x : G) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : G) => H) _x) (MulHomClass.toFunLike.{u1, u3, u2} F G H (MulOneClass.toMul.{u3} G (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3)))) (MulOneClass.toMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4)))) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F G H (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4))) _inst_5)) f b))
 Case conversion may be inaccurate. Consider using '#align map_div map_divₓ'. -/
 /-- Group homomorphisms preserve division. -/
 @[simp, to_additive "Additive group homomorphisms preserve subtraction."]
@@ -536,7 +536,7 @@ theorem map_div [Group G] [DivisionMonoid H] [MonoidHomClass F G H] (f : F) :
 lean 3 declaration is
   forall {G : Type.{u1}} {H : Type.{u2}} {F : Type.{u3}} [_inst_3 : Monoid.{u1} G] [_inst_4 : Monoid.{u2} H] [_inst_5 : MonoidHomClass.{u3, u1, u2} F G H (Monoid.toMulOneClass.{u1} G _inst_3) (Monoid.toMulOneClass.{u2} H _inst_4)] (f : F) (a : G) (n : Nat), Eq.{succ u2} H (coeFn.{succ u3, max (succ u1) (succ u2)} F (fun (_x : F) => G -> H) (FunLike.hasCoeToFun.{succ u3, succ u1, succ u2} F G (fun (_x : G) => H) (MulHomClass.toFunLike.{u3, u1, u2} F G H (MulOneClass.toHasMul.{u1} G (Monoid.toMulOneClass.{u1} G _inst_3)) (MulOneClass.toHasMul.{u2} H (Monoid.toMulOneClass.{u2} H _inst_4)) (MonoidHomClass.toMulHomClass.{u3, u1, u2} F G H (Monoid.toMulOneClass.{u1} G _inst_3) (Monoid.toMulOneClass.{u2} H _inst_4) _inst_5))) f (HPow.hPow.{u1, 0, u1} G Nat G (instHPow.{u1, 0} G Nat (Monoid.Pow.{u1} G _inst_3)) a n)) (HPow.hPow.{u2, 0, u2} H Nat H (instHPow.{u2, 0} H Nat (Monoid.Pow.{u2} H _inst_4)) (coeFn.{succ u3, max (succ u1) (succ u2)} F (fun (_x : F) => G -> H) (FunLike.hasCoeToFun.{succ u3, succ u1, succ u2} F G (fun (_x : G) => H) (MulHomClass.toFunLike.{u3, u1, u2} F G H (MulOneClass.toHasMul.{u1} G (Monoid.toMulOneClass.{u1} G _inst_3)) (MulOneClass.toHasMul.{u2} H (Monoid.toMulOneClass.{u2} H _inst_4)) (MonoidHomClass.toMulHomClass.{u3, u1, u2} F G H (Monoid.toMulOneClass.{u1} G _inst_3) (Monoid.toMulOneClass.{u2} H _inst_4) _inst_5))) f a) n)
 but is expected to have type
-  forall {G : Type.{u3}} {H : Type.{u2}} {F : Type.{u1}} [_inst_3 : Monoid.{u3} G] [_inst_4 : Monoid.{u2} H] [_inst_5 : MonoidHomClass.{u1, u3, u2} F G H (Monoid.toMulOneClass.{u3} G _inst_3) (Monoid.toMulOneClass.{u2} H _inst_4)] (f : F) (a : G) (n : Nat), Eq.{succ u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : G) => H) (HPow.hPow.{u3, 0, u3} G Nat G (instHPow.{u3, 0} G Nat (Monoid.Pow.{u3} G _inst_3)) a n)) (FunLike.coe.{succ u1, succ u3, succ u2} F G (fun (_x : G) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : G) => H) _x) (MulHomClass.toFunLike.{u1, u3, u2} F G H (MulOneClass.toMul.{u3} G (Monoid.toMulOneClass.{u3} G _inst_3)) (MulOneClass.toMul.{u2} H (Monoid.toMulOneClass.{u2} H _inst_4)) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F G H (Monoid.toMulOneClass.{u3} G _inst_3) (Monoid.toMulOneClass.{u2} H _inst_4) _inst_5)) f (HPow.hPow.{u3, 0, u3} G Nat G (instHPow.{u3, 0} G Nat (Monoid.Pow.{u3} G _inst_3)) a n)) (HPow.hPow.{u2, 0, u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : G) => H) a) Nat ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : G) => H) a) (instHPow.{u2, 0} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : G) => H) a) Nat (Monoid.Pow.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : G) => H) a) _inst_4)) (FunLike.coe.{succ u1, succ u3, succ u2} F G (fun (_x : G) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : G) => H) _x) (MulHomClass.toFunLike.{u1, u3, u2} F G H (MulOneClass.toMul.{u3} G (Monoid.toMulOneClass.{u3} G _inst_3)) (MulOneClass.toMul.{u2} H (Monoid.toMulOneClass.{u2} H _inst_4)) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F G H (Monoid.toMulOneClass.{u3} G _inst_3) (Monoid.toMulOneClass.{u2} H _inst_4) _inst_5)) f a) n)
+  forall {G : Type.{u3}} {H : Type.{u2}} {F : Type.{u1}} [_inst_3 : Monoid.{u3} G] [_inst_4 : Monoid.{u2} H] [_inst_5 : MonoidHomClass.{u1, u3, u2} F G H (Monoid.toMulOneClass.{u3} G _inst_3) (Monoid.toMulOneClass.{u2} H _inst_4)] (f : F) (a : G) (n : Nat), Eq.{succ u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : G) => H) (HPow.hPow.{u3, 0, u3} G Nat G (instHPow.{u3, 0} G Nat (Monoid.Pow.{u3} G _inst_3)) a n)) (FunLike.coe.{succ u1, succ u3, succ u2} F G (fun (_x : G) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : G) => H) _x) (MulHomClass.toFunLike.{u1, u3, u2} F G H (MulOneClass.toMul.{u3} G (Monoid.toMulOneClass.{u3} G _inst_3)) (MulOneClass.toMul.{u2} H (Monoid.toMulOneClass.{u2} H _inst_4)) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F G H (Monoid.toMulOneClass.{u3} G _inst_3) (Monoid.toMulOneClass.{u2} H _inst_4) _inst_5)) f (HPow.hPow.{u3, 0, u3} G Nat G (instHPow.{u3, 0} G Nat (Monoid.Pow.{u3} G _inst_3)) a n)) (HPow.hPow.{u2, 0, u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : G) => H) a) Nat ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : G) => H) a) (instHPow.{u2, 0} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : G) => H) a) Nat (Monoid.Pow.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : G) => H) a) _inst_4)) (FunLike.coe.{succ u1, succ u3, succ u2} F G (fun (_x : G) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : G) => H) _x) (MulHomClass.toFunLike.{u1, u3, u2} F G H (MulOneClass.toMul.{u3} G (Monoid.toMulOneClass.{u3} G _inst_3)) (MulOneClass.toMul.{u2} H (Monoid.toMulOneClass.{u2} H _inst_4)) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F G H (Monoid.toMulOneClass.{u3} G _inst_3) (Monoid.toMulOneClass.{u2} H _inst_4) _inst_5)) f a) n)
 Case conversion may be inaccurate. Consider using '#align map_pow map_powₓ'. -/
 -- to_additive puts the arguments in the wrong order, so generate an auxiliary lemma, then
 -- swap its arguments.
@@ -552,7 +552,7 @@ theorem map_pow [Monoid G] [Monoid H] [MonoidHomClass F G H] (f : F) (a : G) :
 lean 3 declaration is
   forall {G : Type.{u1}} {H : Type.{u2}} {F : Type.{u3}} [_inst_3 : AddMonoid.{u1} G] [_inst_4 : AddMonoid.{u2} H] [_inst_5 : AddMonoidHomClass.{u3, u1, u2} F G H (AddMonoid.toAddZeroClass.{u1} G _inst_3) (AddMonoid.toAddZeroClass.{u2} H _inst_4)] (f : F) (n : Nat) (a : G), Eq.{succ u2} H (coeFn.{succ u3, max (succ u1) (succ u2)} F (fun (_x : F) => G -> H) (FunLike.hasCoeToFun.{succ u3, succ u1, succ u2} F G (fun (_x : G) => H) (AddHomClass.toFunLike.{u3, u1, u2} F G H (AddZeroClass.toHasAdd.{u1} G (AddMonoid.toAddZeroClass.{u1} G _inst_3)) (AddZeroClass.toHasAdd.{u2} H (AddMonoid.toAddZeroClass.{u2} H _inst_4)) (AddMonoidHomClass.toAddHomClass.{u3, u1, u2} F G H (AddMonoid.toAddZeroClass.{u1} G _inst_3) (AddMonoid.toAddZeroClass.{u2} H _inst_4) _inst_5))) f (SMul.smul.{0, u1} Nat G (AddMonoid.SMul.{u1} G _inst_3) n a)) (SMul.smul.{0, u2} Nat H (AddMonoid.SMul.{u2} H _inst_4) n (coeFn.{succ u3, max (succ u1) (succ u2)} F (fun (_x : F) => G -> H) (FunLike.hasCoeToFun.{succ u3, succ u1, succ u2} F G (fun (_x : G) => H) (AddHomClass.toFunLike.{u3, u1, u2} F G H (AddZeroClass.toHasAdd.{u1} G (AddMonoid.toAddZeroClass.{u1} G _inst_3)) (AddZeroClass.toHasAdd.{u2} H (AddMonoid.toAddZeroClass.{u2} H _inst_4)) (AddMonoidHomClass.toAddHomClass.{u3, u1, u2} F G H (AddMonoid.toAddZeroClass.{u1} G _inst_3) (AddMonoid.toAddZeroClass.{u2} H _inst_4) _inst_5))) f a))
 but is expected to have type
-  forall {G : Type.{u3}} {H : Type.{u2}} {F : Type.{u1}} [_inst_3 : AddMonoid.{u3} G] [_inst_4 : AddMonoid.{u2} H] [_inst_5 : AddMonoidHomClass.{u1, u3, u2} F G H (AddMonoid.toAddZeroClass.{u3} G _inst_3) (AddMonoid.toAddZeroClass.{u2} H _inst_4)] (f : F) (n : Nat) (a : G), Eq.{succ u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : G) => H) (HSMul.hSMul.{0, u3, u3} Nat G G (instHSMul.{0, u3} Nat G (AddMonoid.SMul.{u3} G _inst_3)) n a)) (FunLike.coe.{succ u1, succ u3, succ u2} F G (fun (_x : G) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : G) => H) _x) (AddHomClass.toFunLike.{u1, u3, u2} F G H (AddZeroClass.toAdd.{u3} G (AddMonoid.toAddZeroClass.{u3} G _inst_3)) (AddZeroClass.toAdd.{u2} H (AddMonoid.toAddZeroClass.{u2} H _inst_4)) (AddMonoidHomClass.toAddHomClass.{u1, u3, u2} F G H (AddMonoid.toAddZeroClass.{u3} G _inst_3) (AddMonoid.toAddZeroClass.{u2} H _inst_4) _inst_5)) f (HSMul.hSMul.{0, u3, u3} Nat G G (instHSMul.{0, u3} Nat G (AddMonoid.SMul.{u3} G _inst_3)) n a)) (HSMul.hSMul.{0, u2, u2} Nat ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : G) => H) a) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : G) => H) a) (instHSMul.{0, u2} Nat ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : G) => H) a) (AddMonoid.SMul.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : G) => H) a) _inst_4)) n (FunLike.coe.{succ u1, succ u3, succ u2} F G (fun (_x : G) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : G) => H) _x) (AddHomClass.toFunLike.{u1, u3, u2} F G H (AddZeroClass.toAdd.{u3} G (AddMonoid.toAddZeroClass.{u3} G _inst_3)) (AddZeroClass.toAdd.{u2} H (AddMonoid.toAddZeroClass.{u2} H _inst_4)) (AddMonoidHomClass.toAddHomClass.{u1, u3, u2} F G H (AddMonoid.toAddZeroClass.{u3} G _inst_3) (AddMonoid.toAddZeroClass.{u2} H _inst_4) _inst_5)) f a))
+  forall {G : Type.{u3}} {H : Type.{u2}} {F : Type.{u1}} [_inst_3 : AddMonoid.{u3} G] [_inst_4 : AddMonoid.{u2} H] [_inst_5 : AddMonoidHomClass.{u1, u3, u2} F G H (AddMonoid.toAddZeroClass.{u3} G _inst_3) (AddMonoid.toAddZeroClass.{u2} H _inst_4)] (f : F) (n : Nat) (a : G), Eq.{succ u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : G) => H) (HSMul.hSMul.{0, u3, u3} Nat G G (instHSMul.{0, u3} Nat G (AddMonoid.SMul.{u3} G _inst_3)) n a)) (FunLike.coe.{succ u1, succ u3, succ u2} F G (fun (_x : G) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : G) => H) _x) (AddHomClass.toFunLike.{u1, u3, u2} F G H (AddZeroClass.toAdd.{u3} G (AddMonoid.toAddZeroClass.{u3} G _inst_3)) (AddZeroClass.toAdd.{u2} H (AddMonoid.toAddZeroClass.{u2} H _inst_4)) (AddMonoidHomClass.toAddHomClass.{u1, u3, u2} F G H (AddMonoid.toAddZeroClass.{u3} G _inst_3) (AddMonoid.toAddZeroClass.{u2} H _inst_4) _inst_5)) f (HSMul.hSMul.{0, u3, u3} Nat G G (instHSMul.{0, u3} Nat G (AddMonoid.SMul.{u3} G _inst_3)) n a)) (HSMul.hSMul.{0, u2, u2} Nat ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : G) => H) a) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : G) => H) a) (instHSMul.{0, u2} Nat ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : G) => H) a) (AddMonoid.SMul.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : G) => H) a) _inst_4)) n (FunLike.coe.{succ u1, succ u3, succ u2} F G (fun (_x : G) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : G) => H) _x) (AddHomClass.toFunLike.{u1, u3, u2} F G H (AddZeroClass.toAdd.{u3} G (AddMonoid.toAddZeroClass.{u3} G _inst_3)) (AddZeroClass.toAdd.{u2} H (AddMonoid.toAddZeroClass.{u2} H _inst_4)) (AddMonoidHomClass.toAddHomClass.{u1, u3, u2} F G H (AddMonoid.toAddZeroClass.{u3} G _inst_3) (AddMonoid.toAddZeroClass.{u2} H _inst_4) _inst_5)) f a))
 Case conversion may be inaccurate. Consider using '#align map_nsmul map_nsmulₓ'. -/
 @[simp]
 theorem map_nsmul [AddMonoid G] [AddMonoid H] [AddMonoidHomClass F G H] (f : F) (n : ℕ) (a : G) :
@@ -566,7 +566,7 @@ attribute [to_additive_reorder 8, to_additive] map_pow
 lean 3 declaration is
   forall {G : Type.{u1}} {H : Type.{u2}} {F : Type.{u3}} [_inst_3 : DivInvMonoid.{u1} G] [_inst_4 : DivInvMonoid.{u2} H] [_inst_5 : MonoidHomClass.{u3, u1, u2} F G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G _inst_3)) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H _inst_4))] (f : F), (forall (x : G), Eq.{succ u2} H (coeFn.{succ u3, max (succ u1) (succ u2)} F (fun (_x : F) => G -> H) (FunLike.hasCoeToFun.{succ u3, succ u1, succ u2} F G (fun (_x : G) => H) (MulHomClass.toFunLike.{u3, u1, u2} F G H (MulOneClass.toHasMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G _inst_3))) (MulOneClass.toHasMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H _inst_4))) (MonoidHomClass.toMulHomClass.{u3, u1, u2} F G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G _inst_3)) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H _inst_4)) _inst_5))) f (Inv.inv.{u1} G (DivInvMonoid.toHasInv.{u1} G _inst_3) x)) (Inv.inv.{u2} H (DivInvMonoid.toHasInv.{u2} H _inst_4) (coeFn.{succ u3, max (succ u1) (succ u2)} F (fun (_x : F) => G -> H) (FunLike.hasCoeToFun.{succ u3, succ u1, succ u2} F G (fun (_x : G) => H) (MulHomClass.toFunLike.{u3, u1, u2} F G H (MulOneClass.toHasMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G _inst_3))) (MulOneClass.toHasMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H _inst_4))) (MonoidHomClass.toMulHomClass.{u3, u1, u2} F G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G _inst_3)) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H _inst_4)) _inst_5))) f x))) -> (forall (a : G) (n : Int), Eq.{succ u2} H (coeFn.{succ u3, max (succ u1) (succ u2)} F (fun (_x : F) => G -> H) (FunLike.hasCoeToFun.{succ u3, succ u1, succ u2} F G (fun (_x : G) => H) (MulHomClass.toFunLike.{u3, u1, u2} F G H (MulOneClass.toHasMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G _inst_3))) (MulOneClass.toHasMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H _inst_4))) (MonoidHomClass.toMulHomClass.{u3, u1, u2} F G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G _inst_3)) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H _inst_4)) _inst_5))) f (HPow.hPow.{u1, 0, u1} G Int G (instHPow.{u1, 0} G Int (DivInvMonoid.Pow.{u1} G _inst_3)) a n)) (HPow.hPow.{u2, 0, u2} H Int H (instHPow.{u2, 0} H Int (DivInvMonoid.Pow.{u2} H _inst_4)) (coeFn.{succ u3, max (succ u1) (succ u2)} F (fun (_x : F) => G -> H) (FunLike.hasCoeToFun.{succ u3, succ u1, succ u2} F G (fun (_x : G) => H) (MulHomClass.toFunLike.{u3, u1, u2} F G H (MulOneClass.toHasMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G _inst_3))) (MulOneClass.toHasMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H _inst_4))) (MonoidHomClass.toMulHomClass.{u3, u1, u2} F G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G _inst_3)) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H _inst_4)) _inst_5))) f a) n))
 but is expected to have type
-  forall {G : Type.{u3}} {H : Type.{u2}} {F : Type.{u1}} [_inst_3 : DivInvMonoid.{u3} G] [_inst_4 : DivInvMonoid.{u2} H] [_inst_5 : MonoidHomClass.{u1, u3, u2} F G H (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G _inst_3)) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H _inst_4))] (f : F), (forall (x : G), Eq.{succ u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : G) => H) (Inv.inv.{u3} G (DivInvMonoid.toInv.{u3} G _inst_3) x)) (FunLike.coe.{succ u1, succ u3, succ u2} F G (fun (_x : G) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : G) => H) _x) (MulHomClass.toFunLike.{u1, u3, u2} F G H (MulOneClass.toMul.{u3} G (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G _inst_3))) (MulOneClass.toMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H _inst_4))) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F G H (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G _inst_3)) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H _inst_4)) _inst_5)) f (Inv.inv.{u3} G (DivInvMonoid.toInv.{u3} G _inst_3) x)) (Inv.inv.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : G) => H) x) (DivInvMonoid.toInv.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : G) => H) x) _inst_4) (FunLike.coe.{succ u1, succ u3, succ u2} F G (fun (_x : G) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : G) => H) _x) (MulHomClass.toFunLike.{u1, u3, u2} F G H (MulOneClass.toMul.{u3} G (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G _inst_3))) (MulOneClass.toMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H _inst_4))) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F G H (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G _inst_3)) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H _inst_4)) _inst_5)) f x))) -> (forall (a : G) (n : Int), Eq.{succ u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : G) => H) (HPow.hPow.{u3, 0, u3} G Int G (instHPow.{u3, 0} G Int (DivInvMonoid.Pow.{u3} G _inst_3)) a n)) (FunLike.coe.{succ u1, succ u3, succ u2} F G (fun (_x : G) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : G) => H) _x) (MulHomClass.toFunLike.{u1, u3, u2} F G H (MulOneClass.toMul.{u3} G (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G _inst_3))) (MulOneClass.toMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H _inst_4))) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F G H (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G _inst_3)) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H _inst_4)) _inst_5)) f (HPow.hPow.{u3, 0, u3} G Int G (instHPow.{u3, 0} G Int (DivInvMonoid.Pow.{u3} G _inst_3)) a n)) (HPow.hPow.{u2, 0, u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : G) => H) a) Int ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : G) => H) a) (instHPow.{u2, 0} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : G) => H) a) Int (DivInvMonoid.Pow.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : G) => H) a) _inst_4)) (FunLike.coe.{succ u1, succ u3, succ u2} F G (fun (_x : G) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : G) => H) _x) (MulHomClass.toFunLike.{u1, u3, u2} F G H (MulOneClass.toMul.{u3} G (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G _inst_3))) (MulOneClass.toMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H _inst_4))) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F G H (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G _inst_3)) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H _inst_4)) _inst_5)) f a) n))
+  forall {G : Type.{u3}} {H : Type.{u2}} {F : Type.{u1}} [_inst_3 : DivInvMonoid.{u3} G] [_inst_4 : DivInvMonoid.{u2} H] [_inst_5 : MonoidHomClass.{u1, u3, u2} F G H (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G _inst_3)) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H _inst_4))] (f : F), (forall (x : G), Eq.{succ u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : G) => H) (Inv.inv.{u3} G (DivInvMonoid.toInv.{u3} G _inst_3) x)) (FunLike.coe.{succ u1, succ u3, succ u2} F G (fun (_x : G) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : G) => H) _x) (MulHomClass.toFunLike.{u1, u3, u2} F G H (MulOneClass.toMul.{u3} G (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G _inst_3))) (MulOneClass.toMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H _inst_4))) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F G H (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G _inst_3)) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H _inst_4)) _inst_5)) f (Inv.inv.{u3} G (DivInvMonoid.toInv.{u3} G _inst_3) x)) (Inv.inv.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : G) => H) x) (DivInvMonoid.toInv.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : G) => H) x) _inst_4) (FunLike.coe.{succ u1, succ u3, succ u2} F G (fun (_x : G) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : G) => H) _x) (MulHomClass.toFunLike.{u1, u3, u2} F G H (MulOneClass.toMul.{u3} G (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G _inst_3))) (MulOneClass.toMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H _inst_4))) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F G H (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G _inst_3)) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H _inst_4)) _inst_5)) f x))) -> (forall (a : G) (n : Int), Eq.{succ u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : G) => H) (HPow.hPow.{u3, 0, u3} G Int G (instHPow.{u3, 0} G Int (DivInvMonoid.Pow.{u3} G _inst_3)) a n)) (FunLike.coe.{succ u1, succ u3, succ u2} F G (fun (_x : G) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : G) => H) _x) (MulHomClass.toFunLike.{u1, u3, u2} F G H (MulOneClass.toMul.{u3} G (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G _inst_3))) (MulOneClass.toMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H _inst_4))) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F G H (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G _inst_3)) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H _inst_4)) _inst_5)) f (HPow.hPow.{u3, 0, u3} G Int G (instHPow.{u3, 0} G Int (DivInvMonoid.Pow.{u3} G _inst_3)) a n)) (HPow.hPow.{u2, 0, u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : G) => H) a) Int ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : G) => H) a) (instHPow.{u2, 0} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : G) => H) a) Int (DivInvMonoid.Pow.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : G) => H) a) _inst_4)) (FunLike.coe.{succ u1, succ u3, succ u2} F G (fun (_x : G) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : G) => H) _x) (MulHomClass.toFunLike.{u1, u3, u2} F G H (MulOneClass.toMul.{u3} G (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G _inst_3))) (MulOneClass.toMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H _inst_4))) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F G H (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G _inst_3)) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H _inst_4)) _inst_5)) f a) n))
 Case conversion may be inaccurate. Consider using '#align map_zpow' map_zpow'ₓ'. -/
 @[to_additive]
 theorem map_zpow' [DivInvMonoid G] [DivInvMonoid H] [MonoidHomClass F G H] (f : F)
@@ -580,7 +580,7 @@ theorem map_zpow' [DivInvMonoid G] [DivInvMonoid H] [MonoidHomClass F G H] (f :
 lean 3 declaration is
   forall {G : Type.{u1}} {H : Type.{u2}} {F : Type.{u3}} [_inst_3 : Group.{u1} G] [_inst_4 : DivisionMonoid.{u2} H] [_inst_5 : MonoidHomClass.{u3, u1, u2} F G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4)))] (f : F) (g : G) (n : Int), Eq.{succ u2} H (coeFn.{succ u3, max (succ u1) (succ u2)} F (fun (_x : F) => G -> H) (FunLike.hasCoeToFun.{succ u3, succ u1, succ u2} F G (fun (_x : G) => H) (MulHomClass.toFunLike.{u3, u1, u2} F G H (MulOneClass.toHasMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (MulOneClass.toHasMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4)))) (MonoidHomClass.toMulHomClass.{u3, u1, u2} F G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4))) _inst_5))) f (HPow.hPow.{u1, 0, u1} G Int G (instHPow.{u1, 0} G Int (DivInvMonoid.Pow.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3))) g n)) (HPow.hPow.{u2, 0, u2} H Int H (instHPow.{u2, 0} H Int (DivInvMonoid.Pow.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4))) (coeFn.{succ u3, max (succ u1) (succ u2)} F (fun (_x : F) => G -> H) (FunLike.hasCoeToFun.{succ u3, succ u1, succ u2} F G (fun (_x : G) => H) (MulHomClass.toFunLike.{u3, u1, u2} F G H (MulOneClass.toHasMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (MulOneClass.toHasMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4)))) (MonoidHomClass.toMulHomClass.{u3, u1, u2} F G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4))) _inst_5))) f g) n)
 but is expected to have type
-  forall {G : Type.{u3}} {H : Type.{u2}} {F : Type.{u1}} [_inst_3 : Group.{u3} G] [_inst_4 : DivisionMonoid.{u2} H] [_inst_5 : MonoidHomClass.{u1, u3, u2} F G H (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4)))] (f : F) (g : G) (n : Int), Eq.{succ u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : G) => H) (HPow.hPow.{u3, 0, u3} G Int G (instHPow.{u3, 0} G Int (DivInvMonoid.Pow.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3))) g n)) (FunLike.coe.{succ u1, succ u3, succ u2} F G (fun (_x : G) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : G) => H) _x) (MulHomClass.toFunLike.{u1, u3, u2} F G H (MulOneClass.toMul.{u3} G (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3)))) (MulOneClass.toMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4)))) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F G H (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4))) _inst_5)) f (HPow.hPow.{u3, 0, u3} G Int G (instHPow.{u3, 0} G Int (DivInvMonoid.Pow.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3))) g n)) (HPow.hPow.{u2, 0, u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : G) => H) g) Int ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : G) => H) g) (instHPow.{u2, 0} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : G) => H) g) Int (DivInvMonoid.Pow.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : G) => H) g) (DivisionMonoid.toDivInvMonoid.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : G) => H) g) _inst_4))) (FunLike.coe.{succ u1, succ u3, succ u2} F G (fun (_x : G) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : G) => H) _x) (MulHomClass.toFunLike.{u1, u3, u2} F G H (MulOneClass.toMul.{u3} G (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3)))) (MulOneClass.toMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4)))) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F G H (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4))) _inst_5)) f g) n)
+  forall {G : Type.{u3}} {H : Type.{u2}} {F : Type.{u1}} [_inst_3 : Group.{u3} G] [_inst_4 : DivisionMonoid.{u2} H] [_inst_5 : MonoidHomClass.{u1, u3, u2} F G H (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4)))] (f : F) (g : G) (n : Int), Eq.{succ u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : G) => H) (HPow.hPow.{u3, 0, u3} G Int G (instHPow.{u3, 0} G Int (DivInvMonoid.Pow.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3))) g n)) (FunLike.coe.{succ u1, succ u3, succ u2} F G (fun (_x : G) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : G) => H) _x) (MulHomClass.toFunLike.{u1, u3, u2} F G H (MulOneClass.toMul.{u3} G (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3)))) (MulOneClass.toMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4)))) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F G H (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4))) _inst_5)) f (HPow.hPow.{u3, 0, u3} G Int G (instHPow.{u3, 0} G Int (DivInvMonoid.Pow.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3))) g n)) (HPow.hPow.{u2, 0, u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : G) => H) g) Int ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : G) => H) g) (instHPow.{u2, 0} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : G) => H) g) Int (DivInvMonoid.Pow.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : G) => H) g) (DivisionMonoid.toDivInvMonoid.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : G) => H) g) _inst_4))) (FunLike.coe.{succ u1, succ u3, succ u2} F G (fun (_x : G) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : G) => H) _x) (MulHomClass.toFunLike.{u1, u3, u2} F G H (MulOneClass.toMul.{u3} G (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3)))) (MulOneClass.toMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4)))) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F G H (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4))) _inst_5)) f g) n)
 Case conversion may be inaccurate. Consider using '#align map_zpow map_zpowₓ'. -/
 -- to_additive puts the arguments in the wrong order, so generate an auxiliary lemma, then
 -- swap its arguments.
@@ -596,7 +596,7 @@ theorem map_zpow [Group G] [DivisionMonoid H] [MonoidHomClass F G H] (f : F) (g
 lean 3 declaration is
   forall {G : Type.{u1}} {H : Type.{u2}} {F : Type.{u3}} [_inst_3 : AddGroup.{u1} G] [_inst_4 : SubtractionMonoid.{u2} H] [_inst_5 : AddMonoidHomClass.{u3, u1, u2} F G H (AddMonoid.toAddZeroClass.{u1} G (SubNegMonoid.toAddMonoid.{u1} G (AddGroup.toSubNegMonoid.{u1} G _inst_3))) (AddMonoid.toAddZeroClass.{u2} H (SubNegMonoid.toAddMonoid.{u2} H (SubtractionMonoid.toSubNegMonoid.{u2} H _inst_4)))] (f : F) (n : Int) (g : G), Eq.{succ u2} H (coeFn.{succ u3, max (succ u1) (succ u2)} F (fun (_x : F) => G -> H) (FunLike.hasCoeToFun.{succ u3, succ u1, succ u2} F G (fun (_x : G) => H) (AddHomClass.toFunLike.{u3, u1, u2} F G H (AddZeroClass.toHasAdd.{u1} G (AddMonoid.toAddZeroClass.{u1} G (SubNegMonoid.toAddMonoid.{u1} G (AddGroup.toSubNegMonoid.{u1} G _inst_3)))) (AddZeroClass.toHasAdd.{u2} H (AddMonoid.toAddZeroClass.{u2} H (SubNegMonoid.toAddMonoid.{u2} H (SubtractionMonoid.toSubNegMonoid.{u2} H _inst_4)))) (AddMonoidHomClass.toAddHomClass.{u3, u1, u2} F G H (AddMonoid.toAddZeroClass.{u1} G (SubNegMonoid.toAddMonoid.{u1} G (AddGroup.toSubNegMonoid.{u1} G _inst_3))) (AddMonoid.toAddZeroClass.{u2} H (SubNegMonoid.toAddMonoid.{u2} H (SubtractionMonoid.toSubNegMonoid.{u2} H _inst_4))) _inst_5))) f (SMul.smul.{0, u1} Int G (SubNegMonoid.SMulInt.{u1} G (AddGroup.toSubNegMonoid.{u1} G _inst_3)) n g)) (SMul.smul.{0, u2} Int H (SubNegMonoid.SMulInt.{u2} H (SubtractionMonoid.toSubNegMonoid.{u2} H _inst_4)) n (coeFn.{succ u3, max (succ u1) (succ u2)} F (fun (_x : F) => G -> H) (FunLike.hasCoeToFun.{succ u3, succ u1, succ u2} F G (fun (_x : G) => H) (AddHomClass.toFunLike.{u3, u1, u2} F G H (AddZeroClass.toHasAdd.{u1} G (AddMonoid.toAddZeroClass.{u1} G (SubNegMonoid.toAddMonoid.{u1} G (AddGroup.toSubNegMonoid.{u1} G _inst_3)))) (AddZeroClass.toHasAdd.{u2} H (AddMonoid.toAddZeroClass.{u2} H (SubNegMonoid.toAddMonoid.{u2} H (SubtractionMonoid.toSubNegMonoid.{u2} H _inst_4)))) (AddMonoidHomClass.toAddHomClass.{u3, u1, u2} F G H (AddMonoid.toAddZeroClass.{u1} G (SubNegMonoid.toAddMonoid.{u1} G (AddGroup.toSubNegMonoid.{u1} G _inst_3))) (AddMonoid.toAddZeroClass.{u2} H (SubNegMonoid.toAddMonoid.{u2} H (SubtractionMonoid.toSubNegMonoid.{u2} H _inst_4))) _inst_5))) f g))
 but is expected to have type
-  forall {G : Type.{u3}} {H : Type.{u2}} {F : Type.{u1}} [_inst_3 : AddGroup.{u3} G] [_inst_4 : SubtractionMonoid.{u2} H] [_inst_5 : AddMonoidHomClass.{u1, u3, u2} F G H (AddMonoid.toAddZeroClass.{u3} G (SubNegMonoid.toAddMonoid.{u3} G (AddGroup.toSubNegMonoid.{u3} G _inst_3))) (AddMonoid.toAddZeroClass.{u2} H (SubNegMonoid.toAddMonoid.{u2} H (SubtractionMonoid.toSubNegMonoid.{u2} H _inst_4)))] (f : F) (n : Int) (g : G), Eq.{succ u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : G) => H) (HSMul.hSMul.{0, u3, u3} Int G G (instHSMul.{0, u3} Int G (SubNegMonoid.SMulInt.{u3} G (AddGroup.toSubNegMonoid.{u3} G _inst_3))) n g)) (FunLike.coe.{succ u1, succ u3, succ u2} F G (fun (_x : G) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : G) => H) _x) (AddHomClass.toFunLike.{u1, u3, u2} F G H (AddZeroClass.toAdd.{u3} G (AddMonoid.toAddZeroClass.{u3} G (SubNegMonoid.toAddMonoid.{u3} G (AddGroup.toSubNegMonoid.{u3} G _inst_3)))) (AddZeroClass.toAdd.{u2} H (AddMonoid.toAddZeroClass.{u2} H (SubNegMonoid.toAddMonoid.{u2} H (SubtractionMonoid.toSubNegMonoid.{u2} H _inst_4)))) (AddMonoidHomClass.toAddHomClass.{u1, u3, u2} F G H (AddMonoid.toAddZeroClass.{u3} G (SubNegMonoid.toAddMonoid.{u3} G (AddGroup.toSubNegMonoid.{u3} G _inst_3))) (AddMonoid.toAddZeroClass.{u2} H (SubNegMonoid.toAddMonoid.{u2} H (SubtractionMonoid.toSubNegMonoid.{u2} H _inst_4))) _inst_5)) f (HSMul.hSMul.{0, u3, u3} Int G G (instHSMul.{0, u3} Int G (SubNegMonoid.SMulInt.{u3} G (AddGroup.toSubNegMonoid.{u3} G _inst_3))) n g)) (HSMul.hSMul.{0, u2, u2} Int ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : G) => H) g) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : G) => H) g) (instHSMul.{0, u2} Int ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : G) => H) g) (SubNegMonoid.SMulInt.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : G) => H) g) (SubtractionMonoid.toSubNegMonoid.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : G) => H) g) _inst_4))) n (FunLike.coe.{succ u1, succ u3, succ u2} F G (fun (_x : G) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : G) => H) _x) (AddHomClass.toFunLike.{u1, u3, u2} F G H (AddZeroClass.toAdd.{u3} G (AddMonoid.toAddZeroClass.{u3} G (SubNegMonoid.toAddMonoid.{u3} G (AddGroup.toSubNegMonoid.{u3} G _inst_3)))) (AddZeroClass.toAdd.{u2} H (AddMonoid.toAddZeroClass.{u2} H (SubNegMonoid.toAddMonoid.{u2} H (SubtractionMonoid.toSubNegMonoid.{u2} H _inst_4)))) (AddMonoidHomClass.toAddHomClass.{u1, u3, u2} F G H (AddMonoid.toAddZeroClass.{u3} G (SubNegMonoid.toAddMonoid.{u3} G (AddGroup.toSubNegMonoid.{u3} G _inst_3))) (AddMonoid.toAddZeroClass.{u2} H (SubNegMonoid.toAddMonoid.{u2} H (SubtractionMonoid.toSubNegMonoid.{u2} H _inst_4))) _inst_5)) f g))
+  forall {G : Type.{u3}} {H : Type.{u2}} {F : Type.{u1}} [_inst_3 : AddGroup.{u3} G] [_inst_4 : SubtractionMonoid.{u2} H] [_inst_5 : AddMonoidHomClass.{u1, u3, u2} F G H (AddMonoid.toAddZeroClass.{u3} G (SubNegMonoid.toAddMonoid.{u3} G (AddGroup.toSubNegMonoid.{u3} G _inst_3))) (AddMonoid.toAddZeroClass.{u2} H (SubNegMonoid.toAddMonoid.{u2} H (SubtractionMonoid.toSubNegMonoid.{u2} H _inst_4)))] (f : F) (n : Int) (g : G), Eq.{succ u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : G) => H) (HSMul.hSMul.{0, u3, u3} Int G G (instHSMul.{0, u3} Int G (SubNegMonoid.SMulInt.{u3} G (AddGroup.toSubNegMonoid.{u3} G _inst_3))) n g)) (FunLike.coe.{succ u1, succ u3, succ u2} F G (fun (_x : G) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : G) => H) _x) (AddHomClass.toFunLike.{u1, u3, u2} F G H (AddZeroClass.toAdd.{u3} G (AddMonoid.toAddZeroClass.{u3} G (SubNegMonoid.toAddMonoid.{u3} G (AddGroup.toSubNegMonoid.{u3} G _inst_3)))) (AddZeroClass.toAdd.{u2} H (AddMonoid.toAddZeroClass.{u2} H (SubNegMonoid.toAddMonoid.{u2} H (SubtractionMonoid.toSubNegMonoid.{u2} H _inst_4)))) (AddMonoidHomClass.toAddHomClass.{u1, u3, u2} F G H (AddMonoid.toAddZeroClass.{u3} G (SubNegMonoid.toAddMonoid.{u3} G (AddGroup.toSubNegMonoid.{u3} G _inst_3))) (AddMonoid.toAddZeroClass.{u2} H (SubNegMonoid.toAddMonoid.{u2} H (SubtractionMonoid.toSubNegMonoid.{u2} H _inst_4))) _inst_5)) f (HSMul.hSMul.{0, u3, u3} Int G G (instHSMul.{0, u3} Int G (SubNegMonoid.SMulInt.{u3} G (AddGroup.toSubNegMonoid.{u3} G _inst_3))) n g)) (HSMul.hSMul.{0, u2, u2} Int ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : G) => H) g) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : G) => H) g) (instHSMul.{0, u2} Int ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : G) => H) g) (SubNegMonoid.SMulInt.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : G) => H) g) (SubtractionMonoid.toSubNegMonoid.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : G) => H) g) _inst_4))) n (FunLike.coe.{succ u1, succ u3, succ u2} F G (fun (_x : G) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : G) => H) _x) (AddHomClass.toFunLike.{u1, u3, u2} F G H (AddZeroClass.toAdd.{u3} G (AddMonoid.toAddZeroClass.{u3} G (SubNegMonoid.toAddMonoid.{u3} G (AddGroup.toSubNegMonoid.{u3} G _inst_3)))) (AddZeroClass.toAdd.{u2} H (AddMonoid.toAddZeroClass.{u2} H (SubNegMonoid.toAddMonoid.{u2} H (SubtractionMonoid.toSubNegMonoid.{u2} H _inst_4)))) (AddMonoidHomClass.toAddHomClass.{u1, u3, u2} F G H (AddMonoid.toAddZeroClass.{u3} G (SubNegMonoid.toAddMonoid.{u3} G (AddGroup.toSubNegMonoid.{u3} G _inst_3))) (AddMonoid.toAddZeroClass.{u2} H (SubNegMonoid.toAddMonoid.{u2} H (SubtractionMonoid.toSubNegMonoid.{u2} H _inst_4))) _inst_5)) f g))
 Case conversion may be inaccurate. Consider using '#align map_zsmul map_zsmulₓ'. -/
 /-- Additive group homomorphisms preserve integer scaling. -/
 theorem map_zsmul [AddGroup G] [SubtractionMonoid H] [AddMonoidHomClass F G H] (f : F) (n : ℤ)
@@ -668,7 +668,7 @@ instance [MonoidWithZeroHomClass F M N] : CoeTC F (M →*₀ N) :=
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} {F : Type.{u3}} [_inst_1 : MulZeroOneClass.{u1} M] [_inst_2 : MulZeroOneClass.{u2} N] [_inst_3 : MonoidWithZeroHomClass.{u3, u1, u2} F M N _inst_1 _inst_2] (f : F), Eq.{max (succ u1) (succ u2)} ((fun (_x : MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) ((fun (a : Type.{u3}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{succ u3, max (succ u2) (succ u1)} a b] => self.0) F (MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) (HasLiftT.mk.{succ u3, max (succ u2) (succ u1)} F (MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) (CoeTCₓ.coe.{succ u3, max (succ u2) (succ u1)} F (MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) (MonoidWithZeroHom.hasCoeT.{u1, u2, u3} M N F _inst_1 _inst_2 _inst_3))) f)) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (FunLike.hasCoeToFun.{max (succ u2) (succ u1), succ u1, succ u2} (MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) M (fun (_x : M) => N) (MulHomClass.toFunLike.{max u2 u1, u1, u2} (MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) M N (MulOneClass.toHasMul.{u1} M (MulZeroOneClass.toMulOneClass.{u1} M _inst_1)) (MulOneClass.toHasMul.{u2} N (MulZeroOneClass.toMulOneClass.{u2} N _inst_2)) (MonoidHomClass.toMulHomClass.{max u2 u1, u1, u2} (MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) M N (MulZeroOneClass.toMulOneClass.{u1} M _inst_1) (MulZeroOneClass.toMulOneClass.{u2} N _inst_2) (MonoidWithZeroHomClass.toMonoidHomClass.{max u2 u1, u1, u2} (MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidWithZeroHom.monoidWithZeroHomClass.{u1, u2} M N _inst_1 _inst_2))))) ((fun (a : Type.{u3}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{succ u3, max (succ u2) (succ u1)} a b] => self.0) F (MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) (HasLiftT.mk.{succ u3, max (succ u2) (succ u1)} F (MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) (CoeTCₓ.coe.{succ u3, max (succ u2) (succ u1)} F (MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) (MonoidWithZeroHom.hasCoeT.{u1, u2, u3} M N F _inst_1 _inst_2 _inst_3))) f)) (coeFn.{succ u3, max (succ u1) (succ u2)} F (fun (_x : F) => M -> N) (FunLike.hasCoeToFun.{succ u3, succ u1, succ u2} F M (fun (_x : M) => N) (MulHomClass.toFunLike.{u3, u1, u2} F M N (MulOneClass.toHasMul.{u1} M (MulZeroOneClass.toMulOneClass.{u1} M _inst_1)) (MulOneClass.toHasMul.{u2} N (MulZeroOneClass.toMulOneClass.{u2} N _inst_2)) (MonoidHomClass.toMulHomClass.{u3, u1, u2} F M N (MulZeroOneClass.toMulOneClass.{u1} M _inst_1) (MulZeroOneClass.toMulOneClass.{u2} N _inst_2) (MonoidWithZeroHomClass.toMonoidHomClass.{u3, u1, u2} F M N _inst_1 _inst_2 _inst_3)))) f)
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} {F : Type.{u3}} [_inst_1 : MulZeroOneClass.{u2} M] [_inst_2 : MulZeroOneClass.{u1} N] [_inst_3 : MonoidWithZeroHomClass.{u3, u2, u1} F M N _inst_1 _inst_2] (f : F), Eq.{max (succ u2) (succ u1)} (forall (a : M), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) a) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M (MulZeroOneClass.toMulOneClass.{u2} M _inst_1)) (MulOneClass.toMul.{u1} N (MulZeroOneClass.toMulOneClass.{u1} N _inst_2)) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulZeroOneClass.toMulOneClass.{u2} M _inst_1) (MulZeroOneClass.toMulOneClass.{u1} N _inst_2) (MonoidWithZeroHomClass.toMonoidHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidWithZeroHom.monoidWithZeroHomClass.{u2, u1} M N _inst_1 _inst_2)))) (MonoidWithZeroHomClass.toMonoidWithZeroHom.{u2, u1, u3} M N F _inst_1 _inst_2 _inst_3 f)) (FunLike.coe.{succ u3, succ u2, succ u1} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{u3, u2, u1} F M N (MulOneClass.toMul.{u2} M (MulZeroOneClass.toMulOneClass.{u2} M _inst_1)) (MulOneClass.toMul.{u1} N (MulZeroOneClass.toMulOneClass.{u1} N _inst_2)) (MonoidHomClass.toMulHomClass.{u3, u2, u1} F M N (MulZeroOneClass.toMulOneClass.{u2} M _inst_1) (MulZeroOneClass.toMulOneClass.{u1} N _inst_2) (MonoidWithZeroHomClass.toMonoidHomClass.{u3, u2, u1} F M N _inst_1 _inst_2 _inst_3))) f)
+  forall {M : Type.{u2}} {N : Type.{u1}} {F : Type.{u3}} [_inst_1 : MulZeroOneClass.{u2} M] [_inst_2 : MulZeroOneClass.{u1} N] [_inst_3 : MonoidWithZeroHomClass.{u3, u2, u1} F M N _inst_1 _inst_2] (f : F), Eq.{max (succ u2) (succ u1)} (forall (a : M), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) a) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M (MulZeroOneClass.toMulOneClass.{u2} M _inst_1)) (MulOneClass.toMul.{u1} N (MulZeroOneClass.toMulOneClass.{u1} N _inst_2)) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulZeroOneClass.toMulOneClass.{u2} M _inst_1) (MulZeroOneClass.toMulOneClass.{u1} N _inst_2) (MonoidWithZeroHomClass.toMonoidHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidWithZeroHom.monoidWithZeroHomClass.{u2, u1} M N _inst_1 _inst_2)))) (MonoidWithZeroHomClass.toMonoidWithZeroHom.{u2, u1, u3} M N F _inst_1 _inst_2 _inst_3 f)) (FunLike.coe.{succ u3, succ u2, succ u1} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{u3, u2, u1} F M N (MulOneClass.toMul.{u2} M (MulZeroOneClass.toMulOneClass.{u2} M _inst_1)) (MulOneClass.toMul.{u1} N (MulZeroOneClass.toMulOneClass.{u1} N _inst_2)) (MonoidHomClass.toMulHomClass.{u3, u2, u1} F M N (MulZeroOneClass.toMulOneClass.{u2} M _inst_1) (MulZeroOneClass.toMulOneClass.{u1} N _inst_2) (MonoidWithZeroHomClass.toMonoidHomClass.{u3, u2, u1} F M N _inst_1 _inst_2 _inst_3))) f)
 Case conversion may be inaccurate. Consider using '#align monoid_with_zero_hom.coe_coe MonoidWithZeroHom.coe_coeₓ'. -/
 @[simp]
 theorem MonoidWithZeroHom.coe_coe [MonoidWithZeroHomClass F M N] (f : F) :
@@ -793,7 +793,7 @@ initialize_simps_projections MonoidWithZeroHom (toFun → apply)
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : One.{u1} M] [_inst_2 : One.{u2} N] (f : OneHom.{u1, u2} M N _inst_1 _inst_2), Eq.{max (succ u1) (succ u2)} (M -> N) (OneHom.toFun.{u1, u2} M N _inst_1 _inst_2 f) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (OneHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : OneHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (OneHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f)
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : One.{u2} M] [_inst_2 : One.{u1} N] (f : OneHom.{u2, u1} M N _inst_1 _inst_2), Eq.{max (succ u2) (succ u1)} (M -> N) (OneHom.toFun.{u2, u1} M N _inst_1 _inst_2 f) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (OneHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1254 : M) => N) _x) (OneHomClass.toFunLike.{max u2 u1, u2, u1} (OneHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (OneHom.oneHomClass.{u2, u1} M N _inst_1 _inst_2)) f)
+  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : One.{u2} M] [_inst_2 : One.{u1} N] (f : OneHom.{u2, u1} M N _inst_1 _inst_2), Eq.{max (succ u2) (succ u1)} (M -> N) (OneHom.toFun.{u2, u1} M N _inst_1 _inst_2 f) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (OneHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1262 : M) => N) _x) (OneHomClass.toFunLike.{max u2 u1, u2, u1} (OneHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (OneHom.oneHomClass.{u2, u1} M N _inst_1 _inst_2)) f)
 Case conversion may be inaccurate. Consider using '#align one_hom.to_fun_eq_coe OneHom.toFun_eq_coeₓ'. -/
 @[simp, to_additive]
 theorem OneHom.toFun_eq_coe [One M] [One N] (f : OneHom M N) : f.toFun = f :=
@@ -805,7 +805,7 @@ theorem OneHom.toFun_eq_coe [One M] [One N] (f : OneHom M N) : f.toFun = f :=
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] (f : MulHom.{u1, u2} M N _inst_1 _inst_2), Eq.{max (succ u1) (succ u2)} (M -> N) (MulHom.toFun.{u1, u2} M N _inst_1 _inst_2 f) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MulHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MulHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MulHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f)
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : Mul.{u2} M] [_inst_2 : Mul.{u1} N] (f : MulHom.{u2, u1} M N _inst_1 _inst_2), Eq.{max (succ u2) (succ u1)} (M -> N) (MulHom.toFun.{u2, u1} M N _inst_1 _inst_2 f) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) f)
+  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : Mul.{u2} M] [_inst_2 : Mul.{u1} N] (f : MulHom.{u2, u1} M N _inst_1 _inst_2), Eq.{max (succ u2) (succ u1)} (M -> N) (MulHom.toFun.{u2, u1} M N _inst_1 _inst_2 f) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) f)
 Case conversion may be inaccurate. Consider using '#align mul_hom.to_fun_eq_coe MulHom.toFun_eq_coeₓ'. -/
 @[simp, to_additive]
 theorem MulHom.toFun_eq_coe [Mul M] [Mul N] (f : M →ₙ* N) : f.toFun = f :=
@@ -817,7 +817,7 @@ theorem MulHom.toFun_eq_coe [Mul M] [Mul N] (f : M →ₙ* N) : f.toFun = f :=
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N] (f : MonoidHom.{u1, u2} M N _inst_1 _inst_2), Eq.{max (succ u1) (succ u2)} (M -> N) (MonoidHom.toFun.{u1, u2} M N _inst_1 _inst_2 f) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MonoidHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MonoidHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f)
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u1} N] (f : MonoidHom.{u2, u1} M N _inst_1 _inst_2), Eq.{max (succ u2) (succ u1)} (M -> N) (OneHom.toFun.{u2, u1} M N (MulOneClass.toOne.{u2} M _inst_1) (MulOneClass.toOne.{u1} N _inst_2) (MonoidHom.toOneHom.{u2, u1} M N _inst_1 _inst_2 f)) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2))) f)
+  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u1} N] (f : MonoidHom.{u2, u1} M N _inst_1 _inst_2), Eq.{max (succ u2) (succ u1)} (M -> N) (OneHom.toFun.{u2, u1} M N (MulOneClass.toOne.{u2} M _inst_1) (MulOneClass.toOne.{u1} N _inst_2) (MonoidHom.toOneHom.{u2, u1} M N _inst_1 _inst_2 f)) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2))) f)
 Case conversion may be inaccurate. Consider using '#align monoid_hom.to_fun_eq_coe MonoidHom.toFun_eq_coeₓ'. -/
 @[simp, to_additive]
 theorem MonoidHom.toFun_eq_coe [MulOneClass M] [MulOneClass N] (f : M →* N) : f.toFun = f :=
@@ -835,7 +835,7 @@ theorem MonoidWithZeroHom.toFun_eq_coe [MulZeroOneClass M] [MulZeroOneClass N] (
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : One.{u1} M] [_inst_2 : One.{u2} N] (f : M -> N) (h1 : Eq.{succ u2} N (f (OfNat.ofNat.{u1} M 1 (OfNat.mk.{u1} M 1 (One.one.{u1} M _inst_1)))) (OfNat.ofNat.{u2} N 1 (OfNat.mk.{u2} N 1 (One.one.{u2} N _inst_2)))), Eq.{max (succ u1) (succ u2)} ((fun (_x : OneHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (OneHom.mk.{u1, u2} M N _inst_1 _inst_2 f h1)) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (OneHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : OneHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (OneHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) (OneHom.mk.{u1, u2} M N _inst_1 _inst_2 f h1)) f
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : One.{u2} M] [_inst_2 : One.{u1} N] (f : M -> N) (h1 : Eq.{succ u1} N (f (OfNat.ofNat.{u2} M 1 (One.toOfNat1.{u2} M _inst_1))) (OfNat.ofNat.{u1} N 1 (One.toOfNat1.{u1} N _inst_2))), Eq.{max (succ u2) (succ u1)} (forall (a : M), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1254 : M) => N) a) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (OneHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1254 : M) => N) _x) (OneHomClass.toFunLike.{max u2 u1, u2, u1} (OneHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (OneHom.oneHomClass.{u2, u1} M N _inst_1 _inst_2)) (OneHom.mk.{u2, u1} M N _inst_1 _inst_2 f h1)) f
+  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : One.{u2} M] [_inst_2 : One.{u1} N] (f : M -> N) (h1 : Eq.{succ u1} N (f (OfNat.ofNat.{u2} M 1 (One.toOfNat1.{u2} M _inst_1))) (OfNat.ofNat.{u1} N 1 (One.toOfNat1.{u1} N _inst_2))), Eq.{max (succ u2) (succ u1)} (forall (a : M), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1262 : M) => N) a) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (OneHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1262 : M) => N) _x) (OneHomClass.toFunLike.{max u2 u1, u2, u1} (OneHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (OneHom.oneHomClass.{u2, u1} M N _inst_1 _inst_2)) (OneHom.mk.{u2, u1} M N _inst_1 _inst_2 f h1)) f
 Case conversion may be inaccurate. Consider using '#align one_hom.coe_mk OneHom.coe_mkₓ'. -/
 @[simp, to_additive]
 theorem OneHom.coe_mk [One M] [One N] (f : M → N) (h1) : (OneHom.mk f h1 : M → N) = f :=
@@ -847,7 +847,7 @@ theorem OneHom.coe_mk [One M] [One N] (f : M → N) (h1) : (OneHom.mk f h1 : M 
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] (f : M -> N) (hmul : forall (x : M) (y : M), Eq.{succ u2} N (f (HMul.hMul.{u1, u1, u1} M M M (instHMul.{u1} M _inst_1) x y)) (HMul.hMul.{u2, u2, u2} N N N (instHMul.{u2} N _inst_2) (f x) (f y))), Eq.{max (succ u1) (succ u2)} ((fun (_x : MulHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MulHom.mk.{u1, u2} M N _inst_1 _inst_2 f hmul)) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MulHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MulHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MulHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) (MulHom.mk.{u1, u2} M N _inst_1 _inst_2 f hmul)) f
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : Mul.{u2} M] [_inst_2 : Mul.{u1} N] (f : M -> N) (hmul : forall (x : M) (y : M), Eq.{succ u1} N (f (HMul.hMul.{u2, u2, u2} M M M (instHMul.{u2} M _inst_1) x y)) (HMul.hMul.{u1, u1, u1} N N N (instHMul.{u1} N _inst_2) (f x) (f y))), Eq.{max (succ u2) (succ u1)} (forall (a : M), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) a) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) (MulHom.mk.{u2, u1} M N _inst_1 _inst_2 f hmul)) f
+  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : Mul.{u2} M] [_inst_2 : Mul.{u1} N] (f : M -> N) (hmul : forall (x : M) (y : M), Eq.{succ u1} N (f (HMul.hMul.{u2, u2, u2} M M M (instHMul.{u2} M _inst_1) x y)) (HMul.hMul.{u1, u1, u1} N N N (instHMul.{u1} N _inst_2) (f x) (f y))), Eq.{max (succ u2) (succ u1)} (forall (a : M), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) a) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) (MulHom.mk.{u2, u1} M N _inst_1 _inst_2 f hmul)) f
 Case conversion may be inaccurate. Consider using '#align mul_hom.coe_mk MulHom.coe_mkₓ'. -/
 @[simp, to_additive]
 theorem MulHom.coe_mk [Mul M] [Mul N] (f : M → N) (hmul) : (MulHom.mk f hmul : M → N) = f :=
@@ -859,7 +859,7 @@ theorem MulHom.coe_mk [Mul M] [Mul N] (f : M → N) (hmul) : (MulHom.mk f hmul :
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N] (f : M -> N) (h1 : Eq.{succ u2} N (f (OfNat.ofNat.{u1} M 1 (OfNat.mk.{u1} M 1 (One.one.{u1} M (MulOneClass.toHasOne.{u1} M _inst_1))))) (OfNat.ofNat.{u2} N 1 (OfNat.mk.{u2} N 1 (One.one.{u2} N (MulOneClass.toHasOne.{u2} N _inst_2))))) (hmul : forall (x : M) (y : M), Eq.{succ u2} N (f (HMul.hMul.{u1, u1, u1} M M M (instHMul.{u1} M (MulOneClass.toHasMul.{u1} M _inst_1)) x y)) (HMul.hMul.{u2, u2, u2} N N N (instHMul.{u2} N (MulOneClass.toHasMul.{u2} N _inst_2)) (f x) (f y))), Eq.{max (succ u1) (succ u2)} ((fun (_x : MonoidHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MonoidHom.mk.{u1, u2} M N _inst_1 _inst_2 f h1 hmul)) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MonoidHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MonoidHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.mk.{u1, u2} M N _inst_1 _inst_2 f h1 hmul)) f
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u1} N] (f : OneHom.{u2, u1} M N (MulOneClass.toOne.{u2} M _inst_1) (MulOneClass.toOne.{u1} N _inst_2)) (h1 : forall (x : M) (y : M), Eq.{succ u1} N (OneHom.toFun.{u2, u1} M N (MulOneClass.toOne.{u2} M _inst_1) (MulOneClass.toOne.{u1} N _inst_2) f (HMul.hMul.{u2, u2, u2} M M M (instHMul.{u2} M (MulOneClass.toMul.{u2} M _inst_1)) x y)) (HMul.hMul.{u1, u1, u1} N N N (instHMul.{u1} N (MulOneClass.toMul.{u1} N _inst_2)) (OneHom.toFun.{u2, u1} M N (MulOneClass.toOne.{u2} M _inst_1) (MulOneClass.toOne.{u1} N _inst_2) f x) (OneHom.toFun.{u2, u1} M N (MulOneClass.toOne.{u2} M _inst_1) (MulOneClass.toOne.{u1} N _inst_2) f y))), Eq.{max (succ u2) (succ u1)} (forall (a : M), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) a) (FunLike.coe.{max (succ u1) (succ u2), succ u2, succ u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M (fun (a : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) a) (MulHomClass.toFunLike.{max u1 u2, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2) (MonoidHomClass.toMulHomClass.{max u1 u2, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2))) (MonoidHom.mk.{u2, u1} M N _inst_1 _inst_2 f h1)) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (OneHom.{u2, u1} M N (MulOneClass.toOne.{u2} M _inst_1) (MulOneClass.toOne.{u1} N _inst_2)) M (fun (a : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1254 : M) => N) a) (OneHomClass.toFunLike.{max u2 u1, u2, u1} (OneHom.{u2, u1} M N (MulOneClass.toOne.{u2} M _inst_1) (MulOneClass.toOne.{u1} N _inst_2)) M N (MulOneClass.toOne.{u2} M _inst_1) (MulOneClass.toOne.{u1} N _inst_2) (OneHom.oneHomClass.{u2, u1} M N (MulOneClass.toOne.{u2} M _inst_1) (MulOneClass.toOne.{u1} N _inst_2))) f)
+  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u1} N] (f : OneHom.{u2, u1} M N (MulOneClass.toOne.{u2} M _inst_1) (MulOneClass.toOne.{u1} N _inst_2)) (h1 : forall (x : M) (y : M), Eq.{succ u1} N (OneHom.toFun.{u2, u1} M N (MulOneClass.toOne.{u2} M _inst_1) (MulOneClass.toOne.{u1} N _inst_2) f (HMul.hMul.{u2, u2, u2} M M M (instHMul.{u2} M (MulOneClass.toMul.{u2} M _inst_1)) x y)) (HMul.hMul.{u1, u1, u1} N N N (instHMul.{u1} N (MulOneClass.toMul.{u1} N _inst_2)) (OneHom.toFun.{u2, u1} M N (MulOneClass.toOne.{u2} M _inst_1) (MulOneClass.toOne.{u1} N _inst_2) f x) (OneHom.toFun.{u2, u1} M N (MulOneClass.toOne.{u2} M _inst_1) (MulOneClass.toOne.{u1} N _inst_2) f y))), Eq.{max (succ u2) (succ u1)} (forall (a : M), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) a) (FunLike.coe.{max (succ u1) (succ u2), succ u2, succ u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M (fun (a : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) a) (MulHomClass.toFunLike.{max u1 u2, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2) (MonoidHomClass.toMulHomClass.{max u1 u2, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2))) (MonoidHom.mk.{u2, u1} M N _inst_1 _inst_2 f h1)) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (OneHom.{u2, u1} M N (MulOneClass.toOne.{u2} M _inst_1) (MulOneClass.toOne.{u1} N _inst_2)) M (fun (a : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1262 : M) => N) a) (OneHomClass.toFunLike.{max u2 u1, u2, u1} (OneHom.{u2, u1} M N (MulOneClass.toOne.{u2} M _inst_1) (MulOneClass.toOne.{u1} N _inst_2)) M N (MulOneClass.toOne.{u2} M _inst_1) (MulOneClass.toOne.{u1} N _inst_2) (OneHom.oneHomClass.{u2, u1} M N (MulOneClass.toOne.{u2} M _inst_1) (MulOneClass.toOne.{u1} N _inst_2))) f)
 Case conversion may be inaccurate. Consider using '#align monoid_hom.coe_mk MonoidHom.coe_mkₓ'. -/
 @[simp, to_additive]
 theorem MonoidHom.coe_mk [MulOneClass M] [MulOneClass N] (f : M → N) (h1 hmul) :
@@ -872,7 +872,7 @@ theorem MonoidHom.coe_mk [MulOneClass M] [MulOneClass N] (f : M → N) (h1 hmul)
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulZeroOneClass.{u1} M] [_inst_2 : MulZeroOneClass.{u2} N] (f : M -> N) (h0 : Eq.{succ u2} N (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} N 0 (OfNat.mk.{u2} N 0 (Zero.zero.{u2} N (MulZeroClass.toHasZero.{u2} N (MulZeroOneClass.toMulZeroClass.{u2} N _inst_2)))))) (h1 : Eq.{succ u2} N (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} N 1 (OfNat.mk.{u2} N 1 (One.one.{u2} N (MulOneClass.toHasOne.{u2} N (MulZeroOneClass.toMulOneClass.{u2} N _inst_2)))))) (hmul : forall (x : M) (y : M), Eq.{succ u2} N (f (HMul.hMul.{u1, u1, u1} M M M (instHMul.{u1} M (MulOneClass.toHasMul.{u1} M (MulZeroOneClass.toMulOneClass.{u1} M _inst_1))) x y)) (HMul.hMul.{u2, u2, u2} N N N (instHMul.{u2} N (MulOneClass.toHasMul.{u2} N (MulZeroOneClass.toMulOneClass.{u2} N _inst_2))) (f x) (f y))), Eq.{max (succ u1) (succ u2)} ((fun (_x : MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MonoidWithZeroHom.mk.{u1, u2} M N _inst_1 _inst_2 f h0 h1 hmul)) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MonoidWithZeroHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) (MonoidWithZeroHom.mk.{u1, u2} M N _inst_1 _inst_2 f h0 h1 hmul)) f
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : MulZeroOneClass.{u2} M] [_inst_2 : MulZeroOneClass.{u1} N] (f : ZeroHom.{u2, u1} M N (MulZeroOneClass.toZero.{u2} M _inst_1) (MulZeroOneClass.toZero.{u1} N _inst_2)) (h0 : Eq.{succ u1} N (ZeroHom.toFun.{u2, u1} M N (MulZeroOneClass.toZero.{u2} M _inst_1) (MulZeroOneClass.toZero.{u1} N _inst_2) f (OfNat.ofNat.{u2} M 1 (One.toOfNat1.{u2} M (MulOneClass.toOne.{u2} M (MulZeroOneClass.toMulOneClass.{u2} M _inst_1))))) (OfNat.ofNat.{u1} N 1 (One.toOfNat1.{u1} N (MulOneClass.toOne.{u1} N (MulZeroOneClass.toMulOneClass.{u1} N _inst_2))))) (h1 : forall (x : M) (y : M), Eq.{succ u1} N (ZeroHom.toFun.{u2, u1} M N (MulZeroOneClass.toZero.{u2} M _inst_1) (MulZeroOneClass.toZero.{u1} N _inst_2) f (HMul.hMul.{u2, u2, u2} M M M (instHMul.{u2} M (MulOneClass.toMul.{u2} M (MulZeroOneClass.toMulOneClass.{u2} M _inst_1))) x y)) (HMul.hMul.{u1, u1, u1} N N N (instHMul.{u1} N (MulOneClass.toMul.{u1} N (MulZeroOneClass.toMulOneClass.{u1} N _inst_2))) (ZeroHom.toFun.{u2, u1} M N (MulZeroOneClass.toZero.{u2} M _inst_1) (MulZeroOneClass.toZero.{u1} N _inst_2) f x) (ZeroHom.toFun.{u2, u1} M N (MulZeroOneClass.toZero.{u2} M _inst_1) (MulZeroOneClass.toZero.{u1} N _inst_2) f y))), Eq.{max (succ u2) (succ u1)} (forall (a : M), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) a) (FunLike.coe.{max (succ u1) (succ u2), succ u2, succ u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M (fun (a : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) a) (MulHomClass.toFunLike.{max u1 u2, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M (MulZeroOneClass.toMulOneClass.{u2} M _inst_1)) (MulOneClass.toMul.{u1} N (MulZeroOneClass.toMulOneClass.{u1} N _inst_2)) (MonoidHomClass.toMulHomClass.{max u1 u2, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulZeroOneClass.toMulOneClass.{u2} M _inst_1) (MulZeroOneClass.toMulOneClass.{u1} N _inst_2) (MonoidWithZeroHomClass.toMonoidHomClass.{max u1 u2, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidWithZeroHom.monoidWithZeroHomClass.{u2, u1} M N _inst_1 _inst_2)))) (MonoidWithZeroHom.mk.{u2, u1} M N _inst_1 _inst_2 f h0 h1)) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (ZeroHom.{u2, u1} M N (MulZeroOneClass.toZero.{u2} M _inst_1) (MulZeroOneClass.toZero.{u1} N _inst_2)) M (fun (a : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.124 : M) => N) a) (ZeroHomClass.toFunLike.{max u2 u1, u2, u1} (ZeroHom.{u2, u1} M N (MulZeroOneClass.toZero.{u2} M _inst_1) (MulZeroOneClass.toZero.{u1} N _inst_2)) M N (MulZeroOneClass.toZero.{u2} M _inst_1) (MulZeroOneClass.toZero.{u1} N _inst_2) (ZeroHom.zeroHomClass.{u2, u1} M N (MulZeroOneClass.toZero.{u2} M _inst_1) (MulZeroOneClass.toZero.{u1} N _inst_2))) f)
+  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : MulZeroOneClass.{u2} M] [_inst_2 : MulZeroOneClass.{u1} N] (f : ZeroHom.{u2, u1} M N (MulZeroOneClass.toZero.{u2} M _inst_1) (MulZeroOneClass.toZero.{u1} N _inst_2)) (h0 : Eq.{succ u1} N (ZeroHom.toFun.{u2, u1} M N (MulZeroOneClass.toZero.{u2} M _inst_1) (MulZeroOneClass.toZero.{u1} N _inst_2) f (OfNat.ofNat.{u2} M 1 (One.toOfNat1.{u2} M (MulOneClass.toOne.{u2} M (MulZeroOneClass.toMulOneClass.{u2} M _inst_1))))) (OfNat.ofNat.{u1} N 1 (One.toOfNat1.{u1} N (MulOneClass.toOne.{u1} N (MulZeroOneClass.toMulOneClass.{u1} N _inst_2))))) (h1 : forall (x : M) (y : M), Eq.{succ u1} N (ZeroHom.toFun.{u2, u1} M N (MulZeroOneClass.toZero.{u2} M _inst_1) (MulZeroOneClass.toZero.{u1} N _inst_2) f (HMul.hMul.{u2, u2, u2} M M M (instHMul.{u2} M (MulOneClass.toMul.{u2} M (MulZeroOneClass.toMulOneClass.{u2} M _inst_1))) x y)) (HMul.hMul.{u1, u1, u1} N N N (instHMul.{u1} N (MulOneClass.toMul.{u1} N (MulZeroOneClass.toMulOneClass.{u1} N _inst_2))) (ZeroHom.toFun.{u2, u1} M N (MulZeroOneClass.toZero.{u2} M _inst_1) (MulZeroOneClass.toZero.{u1} N _inst_2) f x) (ZeroHom.toFun.{u2, u1} M N (MulZeroOneClass.toZero.{u2} M _inst_1) (MulZeroOneClass.toZero.{u1} N _inst_2) f y))), Eq.{max (succ u2) (succ u1)} (forall (a : M), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) a) (FunLike.coe.{max (succ u1) (succ u2), succ u2, succ u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M (fun (a : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) a) (MulHomClass.toFunLike.{max u1 u2, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M (MulZeroOneClass.toMulOneClass.{u2} M _inst_1)) (MulOneClass.toMul.{u1} N (MulZeroOneClass.toMulOneClass.{u1} N _inst_2)) (MonoidHomClass.toMulHomClass.{max u1 u2, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulZeroOneClass.toMulOneClass.{u2} M _inst_1) (MulZeroOneClass.toMulOneClass.{u1} N _inst_2) (MonoidWithZeroHomClass.toMonoidHomClass.{max u1 u2, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidWithZeroHom.monoidWithZeroHomClass.{u2, u1} M N _inst_1 _inst_2)))) (MonoidWithZeroHom.mk.{u2, u1} M N _inst_1 _inst_2 f h0 h1)) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (ZeroHom.{u2, u1} M N (MulZeroOneClass.toZero.{u2} M _inst_1) (MulZeroOneClass.toZero.{u1} N _inst_2)) M (fun (a : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.124 : M) => N) a) (ZeroHomClass.toFunLike.{max u2 u1, u2, u1} (ZeroHom.{u2, u1} M N (MulZeroOneClass.toZero.{u2} M _inst_1) (MulZeroOneClass.toZero.{u1} N _inst_2)) M N (MulZeroOneClass.toZero.{u2} M _inst_1) (MulZeroOneClass.toZero.{u1} N _inst_2) (ZeroHom.zeroHomClass.{u2, u1} M N (MulZeroOneClass.toZero.{u2} M _inst_1) (MulZeroOneClass.toZero.{u1} N _inst_2))) f)
 Case conversion may be inaccurate. Consider using '#align monoid_with_zero_hom.coe_mk MonoidWithZeroHom.coe_mkₓ'. -/
 @[simp]
 theorem MonoidWithZeroHom.coe_mk [MulZeroOneClass M] [MulZeroOneClass N] (f : M → N) (h0 h1 hmul) :
@@ -884,7 +884,7 @@ theorem MonoidWithZeroHom.coe_mk [MulZeroOneClass M] [MulZeroOneClass N] (f : M
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N] (f : MonoidHom.{u1, u2} M N _inst_1 _inst_2), Eq.{max (succ u1) (succ u2)} ((fun (_x : OneHom.{u1, u2} M N (MulOneClass.toHasOne.{u1} M _inst_1) (MulOneClass.toHasOne.{u2} N _inst_2)) => M -> N) (MonoidHom.toOneHom.{u1, u2} M N _inst_1 _inst_2 f)) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (OneHom.{u1, u2} M N (MulOneClass.toHasOne.{u1} M _inst_1) (MulOneClass.toHasOne.{u2} N _inst_2)) (fun (_x : OneHom.{u1, u2} M N (MulOneClass.toHasOne.{u1} M _inst_1) (MulOneClass.toHasOne.{u2} N _inst_2)) => M -> N) (OneHom.hasCoeToFun.{u1, u2} M N (MulOneClass.toHasOne.{u1} M _inst_1) (MulOneClass.toHasOne.{u2} N _inst_2)) (MonoidHom.toOneHom.{u1, u2} M N _inst_1 _inst_2 f)) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MonoidHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MonoidHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f)
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u1} N] (f : MonoidHom.{u2, u1} M N _inst_1 _inst_2), Eq.{max (succ u2) (succ u1)} (forall (a : M), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1254 : M) => N) a) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (OneHom.{u2, u1} M N (MulOneClass.toOne.{u2} M _inst_1) (MulOneClass.toOne.{u1} N _inst_2)) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1254 : M) => N) _x) (OneHomClass.toFunLike.{max u2 u1, u2, u1} (OneHom.{u2, u1} M N (MulOneClass.toOne.{u2} M _inst_1) (MulOneClass.toOne.{u1} N _inst_2)) M N (MulOneClass.toOne.{u2} M _inst_1) (MulOneClass.toOne.{u1} N _inst_2) (OneHom.oneHomClass.{u2, u1} M N (MulOneClass.toOne.{u2} M _inst_1) (MulOneClass.toOne.{u1} N _inst_2))) (MonoidHom.toOneHom.{u2, u1} M N _inst_1 _inst_2 f)) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2))) f)
+  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u1} N] (f : MonoidHom.{u2, u1} M N _inst_1 _inst_2), Eq.{max (succ u2) (succ u1)} (forall (a : M), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1262 : M) => N) a) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (OneHom.{u2, u1} M N (MulOneClass.toOne.{u2} M _inst_1) (MulOneClass.toOne.{u1} N _inst_2)) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1262 : M) => N) _x) (OneHomClass.toFunLike.{max u2 u1, u2, u1} (OneHom.{u2, u1} M N (MulOneClass.toOne.{u2} M _inst_1) (MulOneClass.toOne.{u1} N _inst_2)) M N (MulOneClass.toOne.{u2} M _inst_1) (MulOneClass.toOne.{u1} N _inst_2) (OneHom.oneHomClass.{u2, u1} M N (MulOneClass.toOne.{u2} M _inst_1) (MulOneClass.toOne.{u1} N _inst_2))) (MonoidHom.toOneHom.{u2, u1} M N _inst_1 _inst_2 f)) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2))) f)
 Case conversion may be inaccurate. Consider using '#align monoid_hom.to_one_hom_coe MonoidHom.toOneHom_coeₓ'. -/
 @[simp, to_additive]
 theorem MonoidHom.toOneHom_coe [MulOneClass M] [MulOneClass N] (f : M →* N) :
@@ -897,7 +897,7 @@ theorem MonoidHom.toOneHom_coe [MulOneClass M] [MulOneClass N] (f : M →* N) :
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N] (f : MonoidHom.{u1, u2} M N _inst_1 _inst_2), Eq.{max (succ u1) (succ u2)} ((fun (_x : MulHom.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) => M -> N) (MonoidHom.toMulHom.{u1, u2} M N _inst_1 _inst_2 f)) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MulHom.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (fun (_x : MulHom.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) => M -> N) (MulHom.hasCoeToFun.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.toMulHom.{u1, u2} M N _inst_1 _inst_2 f)) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MonoidHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MonoidHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f)
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u1} N] (f : MonoidHom.{u2, u1} M N _inst_1 _inst_2), Eq.{max (succ u2) (succ u1)} (M -> N) (MulHom.toFun.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2) (MonoidHom.toMulHom.{u2, u1} M N _inst_1 _inst_2 f)) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2))) f)
+  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u1} N] (f : MonoidHom.{u2, u1} M N _inst_1 _inst_2), Eq.{max (succ u2) (succ u1)} (M -> N) (MulHom.toFun.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2) (MonoidHom.toMulHom.{u2, u1} M N _inst_1 _inst_2 f)) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2))) f)
 Case conversion may be inaccurate. Consider using '#align monoid_hom.to_mul_hom_coe MonoidHom.toMulHom_coeₓ'. -/
 @[simp, to_additive]
 theorem MonoidHom.toMulHom_coe [MulOneClass M] [MulOneClass N] (f : M →* N) :
@@ -910,7 +910,7 @@ theorem MonoidHom.toMulHom_coe [MulOneClass M] [MulOneClass N] (f : M →* N) :
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulZeroOneClass.{u1} M] [_inst_2 : MulZeroOneClass.{u2} N] (f : MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2), Eq.{max (succ u1) (succ u2)} ((fun (_x : ZeroHom.{u1, u2} M N (MulZeroClass.toHasZero.{u1} M (MulZeroOneClass.toMulZeroClass.{u1} M _inst_1)) (MulZeroClass.toHasZero.{u2} N (MulZeroOneClass.toMulZeroClass.{u2} N _inst_2))) => M -> N) (MonoidWithZeroHom.toZeroHom.{u1, u2} M N _inst_1 _inst_2 f)) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (ZeroHom.{u1, u2} M N (MulZeroClass.toHasZero.{u1} M (MulZeroOneClass.toMulZeroClass.{u1} M _inst_1)) (MulZeroClass.toHasZero.{u2} N (MulZeroOneClass.toMulZeroClass.{u2} N _inst_2))) (fun (_x : ZeroHom.{u1, u2} M N (MulZeroClass.toHasZero.{u1} M (MulZeroOneClass.toMulZeroClass.{u1} M _inst_1)) (MulZeroClass.toHasZero.{u2} N (MulZeroOneClass.toMulZeroClass.{u2} N _inst_2))) => M -> N) (ZeroHom.hasCoeToFun.{u1, u2} M N (MulZeroClass.toHasZero.{u1} M (MulZeroOneClass.toMulZeroClass.{u1} M _inst_1)) (MulZeroClass.toHasZero.{u2} N (MulZeroOneClass.toMulZeroClass.{u2} N _inst_2))) (MonoidWithZeroHom.toZeroHom.{u1, u2} M N _inst_1 _inst_2 f)) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MonoidWithZeroHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f)
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : MulZeroOneClass.{u2} M] [_inst_2 : MulZeroOneClass.{u1} N] (f : MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2), Eq.{max (succ u2) (succ u1)} (forall (a : M), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.124 : M) => N) a) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (ZeroHom.{u2, u1} M N (MulZeroOneClass.toZero.{u2} M _inst_1) (MulZeroOneClass.toZero.{u1} N _inst_2)) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.124 : M) => N) _x) (ZeroHomClass.toFunLike.{max u2 u1, u2, u1} (ZeroHom.{u2, u1} M N (MulZeroOneClass.toZero.{u2} M _inst_1) (MulZeroOneClass.toZero.{u1} N _inst_2)) M N (MulZeroOneClass.toZero.{u2} M _inst_1) (MulZeroOneClass.toZero.{u1} N _inst_2) (ZeroHom.zeroHomClass.{u2, u1} M N (MulZeroOneClass.toZero.{u2} M _inst_1) (MulZeroOneClass.toZero.{u1} N _inst_2))) (MonoidWithZeroHom.toZeroHom.{u2, u1} M N _inst_1 _inst_2 f)) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M (MulZeroOneClass.toMulOneClass.{u2} M _inst_1)) (MulOneClass.toMul.{u1} N (MulZeroOneClass.toMulOneClass.{u1} N _inst_2)) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulZeroOneClass.toMulOneClass.{u2} M _inst_1) (MulZeroOneClass.toMulOneClass.{u1} N _inst_2) (MonoidWithZeroHomClass.toMonoidHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidWithZeroHom.monoidWithZeroHomClass.{u2, u1} M N _inst_1 _inst_2)))) f)
+  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : MulZeroOneClass.{u2} M] [_inst_2 : MulZeroOneClass.{u1} N] (f : MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2), Eq.{max (succ u2) (succ u1)} (forall (a : M), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.124 : M) => N) a) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (ZeroHom.{u2, u1} M N (MulZeroOneClass.toZero.{u2} M _inst_1) (MulZeroOneClass.toZero.{u1} N _inst_2)) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.124 : M) => N) _x) (ZeroHomClass.toFunLike.{max u2 u1, u2, u1} (ZeroHom.{u2, u1} M N (MulZeroOneClass.toZero.{u2} M _inst_1) (MulZeroOneClass.toZero.{u1} N _inst_2)) M N (MulZeroOneClass.toZero.{u2} M _inst_1) (MulZeroOneClass.toZero.{u1} N _inst_2) (ZeroHom.zeroHomClass.{u2, u1} M N (MulZeroOneClass.toZero.{u2} M _inst_1) (MulZeroOneClass.toZero.{u1} N _inst_2))) (MonoidWithZeroHom.toZeroHom.{u2, u1} M N _inst_1 _inst_2 f)) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M (MulZeroOneClass.toMulOneClass.{u2} M _inst_1)) (MulOneClass.toMul.{u1} N (MulZeroOneClass.toMulOneClass.{u1} N _inst_2)) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulZeroOneClass.toMulOneClass.{u2} M _inst_1) (MulZeroOneClass.toMulOneClass.{u1} N _inst_2) (MonoidWithZeroHomClass.toMonoidHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidWithZeroHom.monoidWithZeroHomClass.{u2, u1} M N _inst_1 _inst_2)))) f)
 Case conversion may be inaccurate. Consider using '#align monoid_with_zero_hom.to_zero_hom_coe MonoidWithZeroHom.toZeroHom_coeₓ'. -/
 @[simp]
 theorem MonoidWithZeroHom.toZeroHom_coe [MulZeroOneClass M] [MulZeroOneClass N] (f : M →*₀ N) :
@@ -922,7 +922,7 @@ theorem MonoidWithZeroHom.toZeroHom_coe [MulZeroOneClass M] [MulZeroOneClass N]
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulZeroOneClass.{u1} M] [_inst_2 : MulZeroOneClass.{u2} N] (f : MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2), Eq.{max (succ u1) (succ u2)} ((fun (_x : MonoidHom.{u1, u2} M N (MulZeroOneClass.toMulOneClass.{u1} M _inst_1) (MulZeroOneClass.toMulOneClass.{u2} N _inst_2)) => M -> N) (MonoidWithZeroHom.toMonoidHom.{u1, u2} M N _inst_1 _inst_2 f)) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} M N (MulZeroOneClass.toMulOneClass.{u1} M _inst_1) (MulZeroOneClass.toMulOneClass.{u2} N _inst_2)) (fun (_x : MonoidHom.{u1, u2} M N (MulZeroOneClass.toMulOneClass.{u1} M _inst_1) (MulZeroOneClass.toMulOneClass.{u2} N _inst_2)) => M -> N) (MonoidHom.hasCoeToFun.{u1, u2} M N (MulZeroOneClass.toMulOneClass.{u1} M _inst_1) (MulZeroOneClass.toMulOneClass.{u2} N _inst_2)) (MonoidWithZeroHom.toMonoidHom.{u1, u2} M N _inst_1 _inst_2 f)) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MonoidWithZeroHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f)
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : MulZeroOneClass.{u2} M] [_inst_2 : MulZeroOneClass.{u1} N] (f : MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2), Eq.{max (succ u2) (succ u1)} (M -> N) (OneHom.toFun.{u2, u1} M N (MulOneClass.toOne.{u2} M (MulZeroOneClass.toMulOneClass.{u2} M _inst_1)) (MulOneClass.toOne.{u1} N (MulZeroOneClass.toMulOneClass.{u1} N _inst_2)) (MonoidHom.toOneHom.{u2, u1} M N (MulZeroOneClass.toMulOneClass.{u2} M _inst_1) (MulZeroOneClass.toMulOneClass.{u1} N _inst_2) (MonoidWithZeroHom.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 f))) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M (MulZeroOneClass.toMulOneClass.{u2} M _inst_1)) (MulOneClass.toMul.{u1} N (MulZeroOneClass.toMulOneClass.{u1} N _inst_2)) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulZeroOneClass.toMulOneClass.{u2} M _inst_1) (MulZeroOneClass.toMulOneClass.{u1} N _inst_2) (MonoidWithZeroHomClass.toMonoidHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidWithZeroHom.monoidWithZeroHomClass.{u2, u1} M N _inst_1 _inst_2)))) f)
+  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : MulZeroOneClass.{u2} M] [_inst_2 : MulZeroOneClass.{u1} N] (f : MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2), Eq.{max (succ u2) (succ u1)} (M -> N) (OneHom.toFun.{u2, u1} M N (MulOneClass.toOne.{u2} M (MulZeroOneClass.toMulOneClass.{u2} M _inst_1)) (MulOneClass.toOne.{u1} N (MulZeroOneClass.toMulOneClass.{u1} N _inst_2)) (MonoidHom.toOneHom.{u2, u1} M N (MulZeroOneClass.toMulOneClass.{u2} M _inst_1) (MulZeroOneClass.toMulOneClass.{u1} N _inst_2) (MonoidWithZeroHom.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 f))) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M (MulZeroOneClass.toMulOneClass.{u2} M _inst_1)) (MulOneClass.toMul.{u1} N (MulZeroOneClass.toMulOneClass.{u1} N _inst_2)) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulZeroOneClass.toMulOneClass.{u2} M _inst_1) (MulZeroOneClass.toMulOneClass.{u1} N _inst_2) (MonoidWithZeroHomClass.toMonoidHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidWithZeroHom.monoidWithZeroHomClass.{u2, u1} M N _inst_1 _inst_2)))) f)
 Case conversion may be inaccurate. Consider using '#align monoid_with_zero_hom.to_monoid_hom_coe MonoidWithZeroHom.toMonoidHom_coeₓ'. -/
 @[simp]
 theorem MonoidWithZeroHom.toMonoidHom_coe [MulZeroOneClass M] [MulZeroOneClass N] (f : M →*₀ N) :
@@ -934,7 +934,7 @@ theorem MonoidWithZeroHom.toMonoidHom_coe [MulZeroOneClass M] [MulZeroOneClass N
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : One.{u1} M] [_inst_2 : One.{u2} N] {{f : OneHom.{u1, u2} M N _inst_1 _inst_2}} {{g : OneHom.{u1, u2} M N _inst_1 _inst_2}}, (forall (x : M), Eq.{succ u2} N (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (OneHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : OneHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (OneHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f x) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (OneHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : OneHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (OneHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) g x)) -> (Eq.{max (succ u2) (succ u1)} (OneHom.{u1, u2} M N _inst_1 _inst_2) f g)
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : One.{u2} M] [_inst_2 : One.{u1} N] {{f : OneHom.{u2, u1} M N _inst_1 _inst_2}} {{g : OneHom.{u2, u1} M N _inst_1 _inst_2}}, (forall (x : M), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1254 : M) => N) x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (OneHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1254 : M) => N) _x) (OneHomClass.toFunLike.{max u2 u1, u2, u1} (OneHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (OneHom.oneHomClass.{u2, u1} M N _inst_1 _inst_2)) f x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (OneHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1254 : M) => N) _x) (OneHomClass.toFunLike.{max u2 u1, u2, u1} (OneHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (OneHom.oneHomClass.{u2, u1} M N _inst_1 _inst_2)) g x)) -> (Eq.{max (succ u2) (succ u1)} (OneHom.{u2, u1} M N _inst_1 _inst_2) f g)
+  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : One.{u2} M] [_inst_2 : One.{u1} N] {{f : OneHom.{u2, u1} M N _inst_1 _inst_2}} {{g : OneHom.{u2, u1} M N _inst_1 _inst_2}}, (forall (x : M), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1262 : M) => N) x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (OneHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1262 : M) => N) _x) (OneHomClass.toFunLike.{max u2 u1, u2, u1} (OneHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (OneHom.oneHomClass.{u2, u1} M N _inst_1 _inst_2)) f x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (OneHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1262 : M) => N) _x) (OneHomClass.toFunLike.{max u2 u1, u2, u1} (OneHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (OneHom.oneHomClass.{u2, u1} M N _inst_1 _inst_2)) g x)) -> (Eq.{max (succ u2) (succ u1)} (OneHom.{u2, u1} M N _inst_1 _inst_2) f g)
 Case conversion may be inaccurate. Consider using '#align one_hom.ext OneHom.extₓ'. -/
 @[ext, to_additive]
 theorem OneHom.ext [One M] [One N] ⦃f g : OneHom M N⦄ (h : ∀ x, f x = g x) : f = g :=
@@ -946,7 +946,7 @@ theorem OneHom.ext [One M] [One N] ⦃f g : OneHom M N⦄ (h : ∀ x, f x = g x)
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] {{f : MulHom.{u1, u2} M N _inst_1 _inst_2}} {{g : MulHom.{u1, u2} M N _inst_1 _inst_2}}, (forall (x : M), Eq.{succ u2} N (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MulHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MulHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MulHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f x) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MulHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MulHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MulHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) g x)) -> (Eq.{max (succ u2) (succ u1)} (MulHom.{u1, u2} M N _inst_1 _inst_2) f g)
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : Mul.{u2} M] [_inst_2 : Mul.{u1} N] {{f : MulHom.{u2, u1} M N _inst_1 _inst_2}} {{g : MulHom.{u2, u1} M N _inst_1 _inst_2}}, (forall (x : M), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) f x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) g x)) -> (Eq.{max (succ u2) (succ u1)} (MulHom.{u2, u1} M N _inst_1 _inst_2) f g)
+  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : Mul.{u2} M] [_inst_2 : Mul.{u1} N] {{f : MulHom.{u2, u1} M N _inst_1 _inst_2}} {{g : MulHom.{u2, u1} M N _inst_1 _inst_2}}, (forall (x : M), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) f x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) g x)) -> (Eq.{max (succ u2) (succ u1)} (MulHom.{u2, u1} M N _inst_1 _inst_2) f g)
 Case conversion may be inaccurate. Consider using '#align mul_hom.ext MulHom.extₓ'. -/
 @[ext, to_additive]
 theorem MulHom.ext [Mul M] [Mul N] ⦃f g : M →ₙ* N⦄ (h : ∀ x, f x = g x) : f = g :=
@@ -958,7 +958,7 @@ theorem MulHom.ext [Mul M] [Mul N] ⦃f g : M →ₙ* N⦄ (h : ∀ x, f x = g x
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N] {{f : MonoidHom.{u1, u2} M N _inst_1 _inst_2}} {{g : MonoidHom.{u1, u2} M N _inst_1 _inst_2}}, (forall (x : M), Eq.{succ u2} N (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MonoidHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MonoidHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f x) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MonoidHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MonoidHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) g x)) -> (Eq.{max (succ u2) (succ u1)} (MonoidHom.{u1, u2} M N _inst_1 _inst_2) f g)
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u1} N] {{f : MonoidHom.{u2, u1} M N _inst_1 _inst_2}} {{g : MonoidHom.{u2, u1} M N _inst_1 _inst_2}}, (forall (x : M), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2))) f x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2))) g x)) -> (Eq.{max (succ u2) (succ u1)} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) f g)
+  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u1} N] {{f : MonoidHom.{u2, u1} M N _inst_1 _inst_2}} {{g : MonoidHom.{u2, u1} M N _inst_1 _inst_2}}, (forall (x : M), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2))) f x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2))) g x)) -> (Eq.{max (succ u2) (succ u1)} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) f g)
 Case conversion may be inaccurate. Consider using '#align monoid_hom.ext MonoidHom.extₓ'. -/
 @[ext, to_additive]
 theorem MonoidHom.ext [MulOneClass M] [MulOneClass N] ⦃f g : M →* N⦄ (h : ∀ x, f x = g x) : f = g :=
@@ -970,7 +970,7 @@ theorem MonoidHom.ext [MulOneClass M] [MulOneClass N] ⦃f g : M →* N⦄ (h :
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulZeroOneClass.{u1} M] [_inst_2 : MulZeroOneClass.{u2} N] {{f : MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2}} {{g : MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2}}, (forall (x : M), Eq.{succ u2} N (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MonoidWithZeroHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f x) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MonoidWithZeroHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) g x)) -> (Eq.{max (succ u2) (succ u1)} (MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) f g)
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : MulZeroOneClass.{u2} M] [_inst_2 : MulZeroOneClass.{u1} N] {{f : MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2}} {{g : MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2}}, (forall (x : M), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M (MulZeroOneClass.toMulOneClass.{u2} M _inst_1)) (MulOneClass.toMul.{u1} N (MulZeroOneClass.toMulOneClass.{u1} N _inst_2)) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulZeroOneClass.toMulOneClass.{u2} M _inst_1) (MulZeroOneClass.toMulOneClass.{u1} N _inst_2) (MonoidWithZeroHomClass.toMonoidHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidWithZeroHom.monoidWithZeroHomClass.{u2, u1} M N _inst_1 _inst_2)))) f x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M (MulZeroOneClass.toMulOneClass.{u2} M _inst_1)) (MulOneClass.toMul.{u1} N (MulZeroOneClass.toMulOneClass.{u1} N _inst_2)) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulZeroOneClass.toMulOneClass.{u2} M _inst_1) (MulZeroOneClass.toMulOneClass.{u1} N _inst_2) (MonoidWithZeroHomClass.toMonoidHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidWithZeroHom.monoidWithZeroHomClass.{u2, u1} M N _inst_1 _inst_2)))) g x)) -> (Eq.{max (succ u2) (succ u1)} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) f g)
+  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : MulZeroOneClass.{u2} M] [_inst_2 : MulZeroOneClass.{u1} N] {{f : MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2}} {{g : MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2}}, (forall (x : M), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M (MulZeroOneClass.toMulOneClass.{u2} M _inst_1)) (MulOneClass.toMul.{u1} N (MulZeroOneClass.toMulOneClass.{u1} N _inst_2)) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulZeroOneClass.toMulOneClass.{u2} M _inst_1) (MulZeroOneClass.toMulOneClass.{u1} N _inst_2) (MonoidWithZeroHomClass.toMonoidHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidWithZeroHom.monoidWithZeroHomClass.{u2, u1} M N _inst_1 _inst_2)))) f x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M (MulZeroOneClass.toMulOneClass.{u2} M _inst_1)) (MulOneClass.toMul.{u1} N (MulZeroOneClass.toMulOneClass.{u1} N _inst_2)) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulZeroOneClass.toMulOneClass.{u2} M _inst_1) (MulZeroOneClass.toMulOneClass.{u1} N _inst_2) (MonoidWithZeroHomClass.toMonoidHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidWithZeroHom.monoidWithZeroHomClass.{u2, u1} M N _inst_1 _inst_2)))) g x)) -> (Eq.{max (succ u2) (succ u1)} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) f g)
 Case conversion may be inaccurate. Consider using '#align monoid_with_zero_hom.ext MonoidWithZeroHom.extₓ'. -/
 @[ext]
 theorem MonoidWithZeroHom.ext [MulZeroOneClass M] [MulZeroOneClass N] ⦃f g : M →*₀ N⦄
@@ -984,7 +984,7 @@ section Deprecated
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : One.{u1} M] [_inst_2 : One.{u2} N] {f : OneHom.{u1, u2} M N _inst_1 _inst_2} {g : OneHom.{u1, u2} M N _inst_1 _inst_2}, (Eq.{max (succ u2) (succ u1)} (OneHom.{u1, u2} M N _inst_1 _inst_2) f g) -> (forall (x : M), Eq.{succ u2} N (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (OneHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : OneHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (OneHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f x) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (OneHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : OneHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (OneHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) g x))
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : One.{u2} M] [_inst_2 : One.{u1} N] {f : OneHom.{u2, u1} M N _inst_1 _inst_2} {g : OneHom.{u2, u1} M N _inst_1 _inst_2}, (Eq.{max (succ u2) (succ u1)} (OneHom.{u2, u1} M N _inst_1 _inst_2) f g) -> (forall (x : M), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1254 : M) => N) x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (OneHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1254 : M) => N) _x) (OneHomClass.toFunLike.{max u2 u1, u2, u1} (OneHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (OneHom.oneHomClass.{u2, u1} M N _inst_1 _inst_2)) f x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (OneHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1254 : M) => N) _x) (OneHomClass.toFunLike.{max u2 u1, u2, u1} (OneHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (OneHom.oneHomClass.{u2, u1} M N _inst_1 _inst_2)) g x))
+  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : One.{u2} M] [_inst_2 : One.{u1} N] {f : OneHom.{u2, u1} M N _inst_1 _inst_2} {g : OneHom.{u2, u1} M N _inst_1 _inst_2}, (Eq.{max (succ u2) (succ u1)} (OneHom.{u2, u1} M N _inst_1 _inst_2) f g) -> (forall (x : M), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1262 : M) => N) x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (OneHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1262 : M) => N) _x) (OneHomClass.toFunLike.{max u2 u1, u2, u1} (OneHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (OneHom.oneHomClass.{u2, u1} M N _inst_1 _inst_2)) f x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (OneHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1262 : M) => N) _x) (OneHomClass.toFunLike.{max u2 u1, u2, u1} (OneHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (OneHom.oneHomClass.{u2, u1} M N _inst_1 _inst_2)) g x))
 Case conversion may be inaccurate. Consider using '#align one_hom.congr_fun OneHom.congr_funₓ'. -/
 /-- Deprecated: use `fun_like.congr_fun` instead. -/
 @[to_additive "Deprecated: use `fun_like.congr_fun` instead."]
@@ -997,7 +997,7 @@ theorem OneHom.congr_fun [One M] [One N] {f g : OneHom M N} (h : f = g) (x : M)
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] {f : MulHom.{u1, u2} M N _inst_1 _inst_2} {g : MulHom.{u1, u2} M N _inst_1 _inst_2}, (Eq.{max (succ u2) (succ u1)} (MulHom.{u1, u2} M N _inst_1 _inst_2) f g) -> (forall (x : M), Eq.{succ u2} N (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MulHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MulHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MulHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f x) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MulHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MulHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MulHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) g x))
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : Mul.{u2} M] [_inst_2 : Mul.{u1} N] {f : MulHom.{u2, u1} M N _inst_1 _inst_2} {g : MulHom.{u2, u1} M N _inst_1 _inst_2}, (Eq.{max (succ u2) (succ u1)} (MulHom.{u2, u1} M N _inst_1 _inst_2) f g) -> (forall (x : M), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) f x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) g x))
+  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : Mul.{u2} M] [_inst_2 : Mul.{u1} N] {f : MulHom.{u2, u1} M N _inst_1 _inst_2} {g : MulHom.{u2, u1} M N _inst_1 _inst_2}, (Eq.{max (succ u2) (succ u1)} (MulHom.{u2, u1} M N _inst_1 _inst_2) f g) -> (forall (x : M), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) f x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) g x))
 Case conversion may be inaccurate. Consider using '#align mul_hom.congr_fun MulHom.congr_funₓ'. -/
 /-- Deprecated: use `fun_like.congr_fun` instead. -/
 @[to_additive "Deprecated: use `fun_like.congr_fun` instead."]
@@ -1010,7 +1010,7 @@ theorem MulHom.congr_fun [Mul M] [Mul N] {f g : M →ₙ* N} (h : f = g) (x : M)
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N] {f : MonoidHom.{u1, u2} M N _inst_1 _inst_2} {g : MonoidHom.{u1, u2} M N _inst_1 _inst_2}, (Eq.{max (succ u2) (succ u1)} (MonoidHom.{u1, u2} M N _inst_1 _inst_2) f g) -> (forall (x : M), Eq.{succ u2} N (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MonoidHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MonoidHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f x) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MonoidHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MonoidHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) g x))
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u1} N] {f : MonoidHom.{u2, u1} M N _inst_1 _inst_2} {g : MonoidHom.{u2, u1} M N _inst_1 _inst_2}, (Eq.{max (succ u2) (succ u1)} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) f g) -> (forall (x : M), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2))) f x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2))) g x))
+  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u1} N] {f : MonoidHom.{u2, u1} M N _inst_1 _inst_2} {g : MonoidHom.{u2, u1} M N _inst_1 _inst_2}, (Eq.{max (succ u2) (succ u1)} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) f g) -> (forall (x : M), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2))) f x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2))) g x))
 Case conversion may be inaccurate. Consider using '#align monoid_hom.congr_fun MonoidHom.congr_funₓ'. -/
 /-- Deprecated: use `fun_like.congr_fun` instead. -/
 @[to_additive "Deprecated: use `fun_like.congr_fun` instead."]
@@ -1024,7 +1024,7 @@ theorem MonoidHom.congr_fun [MulOneClass M] [MulOneClass N] {f g : M →* N} (h
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulZeroOneClass.{u1} M] [_inst_2 : MulZeroOneClass.{u2} N] {f : MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2} {g : MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2}, (Eq.{max (succ u2) (succ u1)} (MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) f g) -> (forall (x : M), Eq.{succ u2} N (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MonoidWithZeroHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f x) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MonoidWithZeroHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) g x))
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : MulZeroOneClass.{u2} M] [_inst_2 : MulZeroOneClass.{u1} N] {f : MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2} {g : MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2}, (Eq.{max (succ u2) (succ u1)} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) f g) -> (forall (x : M), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M (MulZeroOneClass.toMulOneClass.{u2} M _inst_1)) (MulOneClass.toMul.{u1} N (MulZeroOneClass.toMulOneClass.{u1} N _inst_2)) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulZeroOneClass.toMulOneClass.{u2} M _inst_1) (MulZeroOneClass.toMulOneClass.{u1} N _inst_2) (MonoidWithZeroHomClass.toMonoidHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidWithZeroHom.monoidWithZeroHomClass.{u2, u1} M N _inst_1 _inst_2)))) f x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M (MulZeroOneClass.toMulOneClass.{u2} M _inst_1)) (MulOneClass.toMul.{u1} N (MulZeroOneClass.toMulOneClass.{u1} N _inst_2)) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulZeroOneClass.toMulOneClass.{u2} M _inst_1) (MulZeroOneClass.toMulOneClass.{u1} N _inst_2) (MonoidWithZeroHomClass.toMonoidHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidWithZeroHom.monoidWithZeroHomClass.{u2, u1} M N _inst_1 _inst_2)))) g x))
+  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : MulZeroOneClass.{u2} M] [_inst_2 : MulZeroOneClass.{u1} N] {f : MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2} {g : MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2}, (Eq.{max (succ u2) (succ u1)} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) f g) -> (forall (x : M), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M (MulZeroOneClass.toMulOneClass.{u2} M _inst_1)) (MulOneClass.toMul.{u1} N (MulZeroOneClass.toMulOneClass.{u1} N _inst_2)) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulZeroOneClass.toMulOneClass.{u2} M _inst_1) (MulZeroOneClass.toMulOneClass.{u1} N _inst_2) (MonoidWithZeroHomClass.toMonoidHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidWithZeroHom.monoidWithZeroHomClass.{u2, u1} M N _inst_1 _inst_2)))) f x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M (MulZeroOneClass.toMulOneClass.{u2} M _inst_1)) (MulOneClass.toMul.{u1} N (MulZeroOneClass.toMulOneClass.{u1} N _inst_2)) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulZeroOneClass.toMulOneClass.{u2} M _inst_1) (MulZeroOneClass.toMulOneClass.{u1} N _inst_2) (MonoidWithZeroHomClass.toMonoidHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidWithZeroHom.monoidWithZeroHomClass.{u2, u1} M N _inst_1 _inst_2)))) g x))
 Case conversion may be inaccurate. Consider using '#align monoid_with_zero_hom.congr_fun MonoidWithZeroHom.congr_funₓ'. -/
 /-- Deprecated: use `fun_like.congr_fun` instead. -/
 theorem MonoidWithZeroHom.congr_fun [MulZeroOneClass M] [MulZeroOneClass N] {f g : M →*₀ N}
@@ -1036,7 +1036,7 @@ theorem MonoidWithZeroHom.congr_fun [MulZeroOneClass M] [MulZeroOneClass N] {f g
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : One.{u1} M] [_inst_2 : One.{u2} N] (f : OneHom.{u1, u2} M N _inst_1 _inst_2) {x : M} {y : M}, (Eq.{succ u1} M x y) -> (Eq.{succ u2} N (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (OneHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : OneHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (OneHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f x) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (OneHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : OneHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (OneHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f y))
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : One.{u2} M] [_inst_2 : One.{u1} N] (f : OneHom.{u2, u1} M N _inst_1 _inst_2) {x : M} {y : M}, (Eq.{succ u2} M x y) -> (Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1254 : M) => N) x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (OneHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1254 : M) => N) _x) (OneHomClass.toFunLike.{max u2 u1, u2, u1} (OneHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (OneHom.oneHomClass.{u2, u1} M N _inst_1 _inst_2)) f x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (OneHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1254 : M) => N) _x) (OneHomClass.toFunLike.{max u2 u1, u2, u1} (OneHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (OneHom.oneHomClass.{u2, u1} M N _inst_1 _inst_2)) f y))
+  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : One.{u2} M] [_inst_2 : One.{u1} N] (f : OneHom.{u2, u1} M N _inst_1 _inst_2) {x : M} {y : M}, (Eq.{succ u2} M x y) -> (Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1262 : M) => N) x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (OneHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1262 : M) => N) _x) (OneHomClass.toFunLike.{max u2 u1, u2, u1} (OneHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (OneHom.oneHomClass.{u2, u1} M N _inst_1 _inst_2)) f x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (OneHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1262 : M) => N) _x) (OneHomClass.toFunLike.{max u2 u1, u2, u1} (OneHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (OneHom.oneHomClass.{u2, u1} M N _inst_1 _inst_2)) f y))
 Case conversion may be inaccurate. Consider using '#align one_hom.congr_arg OneHom.congr_argₓ'. -/
 /-- Deprecated: use `fun_like.congr_arg` instead. -/
 @[to_additive "Deprecated: use `fun_like.congr_arg` instead."]
@@ -1049,7 +1049,7 @@ theorem OneHom.congr_arg [One M] [One N] (f : OneHom M N) {x y : M} (h : x = y)
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] (f : MulHom.{u1, u2} M N _inst_1 _inst_2) {x : M} {y : M}, (Eq.{succ u1} M x y) -> (Eq.{succ u2} N (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MulHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MulHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MulHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f x) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MulHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MulHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MulHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f y))
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : Mul.{u2} M] [_inst_2 : Mul.{u1} N] (f : MulHom.{u2, u1} M N _inst_1 _inst_2) {x : M} {y : M}, (Eq.{succ u2} M x y) -> (Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) f x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) f y))
+  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : Mul.{u2} M] [_inst_2 : Mul.{u1} N] (f : MulHom.{u2, u1} M N _inst_1 _inst_2) {x : M} {y : M}, (Eq.{succ u2} M x y) -> (Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) f x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) f y))
 Case conversion may be inaccurate. Consider using '#align mul_hom.congr_arg MulHom.congr_argₓ'. -/
 /-- Deprecated: use `fun_like.congr_arg` instead. -/
 @[to_additive "Deprecated: use `fun_like.congr_arg` instead."]
@@ -1062,7 +1062,7 @@ theorem MulHom.congr_arg [Mul M] [Mul N] (f : M →ₙ* N) {x y : M} (h : x = y)
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N] (f : MonoidHom.{u1, u2} M N _inst_1 _inst_2) {x : M} {y : M}, (Eq.{succ u1} M x y) -> (Eq.{succ u2} N (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MonoidHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MonoidHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f x) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MonoidHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MonoidHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f y))
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u1} N] (f : MonoidHom.{u2, u1} M N _inst_1 _inst_2) {x : M} {y : M}, (Eq.{succ u2} M x y) -> (Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2))) f x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2))) f y))
+  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u1} N] (f : MonoidHom.{u2, u1} M N _inst_1 _inst_2) {x : M} {y : M}, (Eq.{succ u2} M x y) -> (Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2))) f x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2))) f y))
 Case conversion may be inaccurate. Consider using '#align monoid_hom.congr_arg MonoidHom.congr_argₓ'. -/
 /-- Deprecated: use `fun_like.congr_arg` instead. -/
 @[to_additive "Deprecated: use `fun_like.congr_arg` instead."]
@@ -1076,7 +1076,7 @@ theorem MonoidHom.congr_arg [MulOneClass M] [MulOneClass N] (f : M →* N) {x y
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulZeroOneClass.{u1} M] [_inst_2 : MulZeroOneClass.{u2} N] (f : MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) {x : M} {y : M}, (Eq.{succ u1} M x y) -> (Eq.{succ u2} N (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MonoidWithZeroHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f x) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MonoidWithZeroHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f y))
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : MulZeroOneClass.{u2} M] [_inst_2 : MulZeroOneClass.{u1} N] (f : MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) {x : M} {y : M}, (Eq.{succ u2} M x y) -> (Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M (MulZeroOneClass.toMulOneClass.{u2} M _inst_1)) (MulOneClass.toMul.{u1} N (MulZeroOneClass.toMulOneClass.{u1} N _inst_2)) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulZeroOneClass.toMulOneClass.{u2} M _inst_1) (MulZeroOneClass.toMulOneClass.{u1} N _inst_2) (MonoidWithZeroHomClass.toMonoidHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidWithZeroHom.monoidWithZeroHomClass.{u2, u1} M N _inst_1 _inst_2)))) f x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M (MulZeroOneClass.toMulOneClass.{u2} M _inst_1)) (MulOneClass.toMul.{u1} N (MulZeroOneClass.toMulOneClass.{u1} N _inst_2)) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulZeroOneClass.toMulOneClass.{u2} M _inst_1) (MulZeroOneClass.toMulOneClass.{u1} N _inst_2) (MonoidWithZeroHomClass.toMonoidHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidWithZeroHom.monoidWithZeroHomClass.{u2, u1} M N _inst_1 _inst_2)))) f y))
+  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : MulZeroOneClass.{u2} M] [_inst_2 : MulZeroOneClass.{u1} N] (f : MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) {x : M} {y : M}, (Eq.{succ u2} M x y) -> (Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M (MulZeroOneClass.toMulOneClass.{u2} M _inst_1)) (MulOneClass.toMul.{u1} N (MulZeroOneClass.toMulOneClass.{u1} N _inst_2)) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulZeroOneClass.toMulOneClass.{u2} M _inst_1) (MulZeroOneClass.toMulOneClass.{u1} N _inst_2) (MonoidWithZeroHomClass.toMonoidHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidWithZeroHom.monoidWithZeroHomClass.{u2, u1} M N _inst_1 _inst_2)))) f x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M (MulZeroOneClass.toMulOneClass.{u2} M _inst_1)) (MulOneClass.toMul.{u1} N (MulZeroOneClass.toMulOneClass.{u1} N _inst_2)) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulZeroOneClass.toMulOneClass.{u2} M _inst_1) (MulZeroOneClass.toMulOneClass.{u1} N _inst_2) (MonoidWithZeroHomClass.toMonoidHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidWithZeroHom.monoidWithZeroHomClass.{u2, u1} M N _inst_1 _inst_2)))) f y))
 Case conversion may be inaccurate. Consider using '#align monoid_with_zero_hom.congr_arg MonoidWithZeroHom.congr_argₓ'. -/
 /-- Deprecated: use `fun_like.congr_arg` instead. -/
 theorem MonoidWithZeroHom.congr_arg [MulZeroOneClass M] [MulZeroOneClass N] (f : M →*₀ N) {x y : M}
@@ -1088,7 +1088,7 @@ theorem MonoidWithZeroHom.congr_arg [MulZeroOneClass M] [MulZeroOneClass N] (f :
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : One.{u1} M] [_inst_2 : One.{u2} N] {{f : OneHom.{u1, u2} M N _inst_1 _inst_2}} {{g : OneHom.{u1, u2} M N _inst_1 _inst_2}}, (Eq.{max (succ u1) (succ u2)} ((fun (_x : OneHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) f) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (OneHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : OneHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (OneHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (OneHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : OneHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (OneHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) g)) -> (Eq.{max (succ u2) (succ u1)} (OneHom.{u1, u2} M N _inst_1 _inst_2) f g)
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : One.{u2} M] [_inst_2 : One.{u1} N] {{f : OneHom.{u2, u1} M N _inst_1 _inst_2}} {{g : OneHom.{u2, u1} M N _inst_1 _inst_2}}, (Eq.{max (succ u2) (succ u1)} (forall (a : M), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1254 : M) => N) a) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (OneHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1254 : M) => N) _x) (OneHomClass.toFunLike.{max u2 u1, u2, u1} (OneHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (OneHom.oneHomClass.{u2, u1} M N _inst_1 _inst_2)) f) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (OneHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1254 : M) => N) _x) (OneHomClass.toFunLike.{max u2 u1, u2, u1} (OneHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (OneHom.oneHomClass.{u2, u1} M N _inst_1 _inst_2)) g)) -> (Eq.{max (succ u2) (succ u1)} (OneHom.{u2, u1} M N _inst_1 _inst_2) f g)
+  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : One.{u2} M] [_inst_2 : One.{u1} N] {{f : OneHom.{u2, u1} M N _inst_1 _inst_2}} {{g : OneHom.{u2, u1} M N _inst_1 _inst_2}}, (Eq.{max (succ u2) (succ u1)} (forall (a : M), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1262 : M) => N) a) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (OneHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1262 : M) => N) _x) (OneHomClass.toFunLike.{max u2 u1, u2, u1} (OneHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (OneHom.oneHomClass.{u2, u1} M N _inst_1 _inst_2)) f) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (OneHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1262 : M) => N) _x) (OneHomClass.toFunLike.{max u2 u1, u2, u1} (OneHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (OneHom.oneHomClass.{u2, u1} M N _inst_1 _inst_2)) g)) -> (Eq.{max (succ u2) (succ u1)} (OneHom.{u2, u1} M N _inst_1 _inst_2) f g)
 Case conversion may be inaccurate. Consider using '#align one_hom.coe_inj OneHom.coe_injₓ'. -/
 /-- Deprecated: use `fun_like.coe_injective` instead. -/
 @[to_additive "Deprecated: use `fun_like.coe_injective` instead."]
@@ -1101,7 +1101,7 @@ theorem OneHom.coe_inj [One M] [One N] ⦃f g : OneHom M N⦄ (h : (f : M → N)
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] {{f : MulHom.{u1, u2} M N _inst_1 _inst_2}} {{g : MulHom.{u1, u2} M N _inst_1 _inst_2}}, (Eq.{max (succ u1) (succ u2)} ((fun (_x : MulHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) f) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MulHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MulHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MulHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MulHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MulHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MulHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) g)) -> (Eq.{max (succ u2) (succ u1)} (MulHom.{u1, u2} M N _inst_1 _inst_2) f g)
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : Mul.{u2} M] [_inst_2 : Mul.{u1} N] {{f : MulHom.{u2, u1} M N _inst_1 _inst_2}} {{g : MulHom.{u2, u1} M N _inst_1 _inst_2}}, (Eq.{max (succ u2) (succ u1)} (forall (a : M), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) a) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) f) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) g)) -> (Eq.{max (succ u2) (succ u1)} (MulHom.{u2, u1} M N _inst_1 _inst_2) f g)
+  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : Mul.{u2} M] [_inst_2 : Mul.{u1} N] {{f : MulHom.{u2, u1} M N _inst_1 _inst_2}} {{g : MulHom.{u2, u1} M N _inst_1 _inst_2}}, (Eq.{max (succ u2) (succ u1)} (forall (a : M), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) a) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) f) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) g)) -> (Eq.{max (succ u2) (succ u1)} (MulHom.{u2, u1} M N _inst_1 _inst_2) f g)
 Case conversion may be inaccurate. Consider using '#align mul_hom.coe_inj MulHom.coe_injₓ'. -/
 /-- Deprecated: use `fun_like.coe_injective` instead. -/
 @[to_additive "Deprecated: use `fun_like.coe_injective` instead."]
@@ -1114,7 +1114,7 @@ theorem MulHom.coe_inj [Mul M] [Mul N] ⦃f g : M →ₙ* N⦄ (h : (f : M → N
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N] {{f : MonoidHom.{u1, u2} M N _inst_1 _inst_2}} {{g : MonoidHom.{u1, u2} M N _inst_1 _inst_2}}, (Eq.{max (succ u1) (succ u2)} ((fun (_x : MonoidHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) f) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MonoidHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MonoidHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MonoidHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MonoidHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) g)) -> (Eq.{max (succ u2) (succ u1)} (MonoidHom.{u1, u2} M N _inst_1 _inst_2) f g)
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u1} N] {{f : MonoidHom.{u2, u1} M N _inst_1 _inst_2}} {{g : MonoidHom.{u2, u1} M N _inst_1 _inst_2}}, (Eq.{max (succ u2) (succ u1)} (forall (a : M), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) a) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2))) f) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2))) g)) -> (Eq.{max (succ u2) (succ u1)} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) f g)
+  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u1} N] {{f : MonoidHom.{u2, u1} M N _inst_1 _inst_2}} {{g : MonoidHom.{u2, u1} M N _inst_1 _inst_2}}, (Eq.{max (succ u2) (succ u1)} (forall (a : M), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) a) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2))) f) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2))) g)) -> (Eq.{max (succ u2) (succ u1)} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) f g)
 Case conversion may be inaccurate. Consider using '#align monoid_hom.coe_inj MonoidHom.coe_injₓ'. -/
 /-- Deprecated: use `fun_like.coe_injective` instead. -/
 @[to_additive "Deprecated: use `fun_like.coe_injective` instead."]
@@ -1128,7 +1128,7 @@ theorem MonoidHom.coe_inj [MulOneClass M] [MulOneClass N] ⦃f g : M →* N⦄ (
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulZeroOneClass.{u1} M] [_inst_2 : MulZeroOneClass.{u2} N] {{f : MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2}} {{g : MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2}}, (Eq.{max (succ u1) (succ u2)} ((fun (_x : MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) f) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MonoidWithZeroHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MonoidWithZeroHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) g)) -> (Eq.{max (succ u2) (succ u1)} (MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) f g)
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : MulZeroOneClass.{u2} M] [_inst_2 : MulZeroOneClass.{u1} N] {{f : MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2}} {{g : MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2}}, (Eq.{max (succ u2) (succ u1)} (forall (a : M), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) a) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M (MulZeroOneClass.toMulOneClass.{u2} M _inst_1)) (MulOneClass.toMul.{u1} N (MulZeroOneClass.toMulOneClass.{u1} N _inst_2)) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulZeroOneClass.toMulOneClass.{u2} M _inst_1) (MulZeroOneClass.toMulOneClass.{u1} N _inst_2) (MonoidWithZeroHomClass.toMonoidHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidWithZeroHom.monoidWithZeroHomClass.{u2, u1} M N _inst_1 _inst_2)))) f) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M (MulZeroOneClass.toMulOneClass.{u2} M _inst_1)) (MulOneClass.toMul.{u1} N (MulZeroOneClass.toMulOneClass.{u1} N _inst_2)) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulZeroOneClass.toMulOneClass.{u2} M _inst_1) (MulZeroOneClass.toMulOneClass.{u1} N _inst_2) (MonoidWithZeroHomClass.toMonoidHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidWithZeroHom.monoidWithZeroHomClass.{u2, u1} M N _inst_1 _inst_2)))) g)) -> (Eq.{max (succ u2) (succ u1)} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) f g)
+  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : MulZeroOneClass.{u2} M] [_inst_2 : MulZeroOneClass.{u1} N] {{f : MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2}} {{g : MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2}}, (Eq.{max (succ u2) (succ u1)} (forall (a : M), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) a) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M (MulZeroOneClass.toMulOneClass.{u2} M _inst_1)) (MulOneClass.toMul.{u1} N (MulZeroOneClass.toMulOneClass.{u1} N _inst_2)) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulZeroOneClass.toMulOneClass.{u2} M _inst_1) (MulZeroOneClass.toMulOneClass.{u1} N _inst_2) (MonoidWithZeroHomClass.toMonoidHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidWithZeroHom.monoidWithZeroHomClass.{u2, u1} M N _inst_1 _inst_2)))) f) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M (MulZeroOneClass.toMulOneClass.{u2} M _inst_1)) (MulOneClass.toMul.{u1} N (MulZeroOneClass.toMulOneClass.{u1} N _inst_2)) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulZeroOneClass.toMulOneClass.{u2} M _inst_1) (MulZeroOneClass.toMulOneClass.{u1} N _inst_2) (MonoidWithZeroHomClass.toMonoidHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidWithZeroHom.monoidWithZeroHomClass.{u2, u1} M N _inst_1 _inst_2)))) g)) -> (Eq.{max (succ u2) (succ u1)} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) f g)
 Case conversion may be inaccurate. Consider using '#align monoid_with_zero_hom.coe_inj MonoidWithZeroHom.coe_injₓ'. -/
 /-- Deprecated: use `fun_like.coe_injective` instead. -/
 theorem MonoidWithZeroHom.coe_inj [MulZeroOneClass M] [MulZeroOneClass N] ⦃f g : M →*₀ N⦄
@@ -1140,7 +1140,7 @@ theorem MonoidWithZeroHom.coe_inj [MulZeroOneClass M] [MulZeroOneClass N] ⦃f g
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : One.{u1} M] [_inst_2 : One.{u2} N] {f : OneHom.{u1, u2} M N _inst_1 _inst_2} {g : OneHom.{u1, u2} M N _inst_1 _inst_2}, Iff (Eq.{max (succ u2) (succ u1)} (OneHom.{u1, u2} M N _inst_1 _inst_2) f g) (forall (x : M), Eq.{succ u2} N (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (OneHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : OneHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (OneHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f x) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (OneHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : OneHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (OneHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) g x))
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : One.{u2} M] [_inst_2 : One.{u1} N] {f : OneHom.{u2, u1} M N _inst_1 _inst_2} {g : OneHom.{u2, u1} M N _inst_1 _inst_2}, Iff (Eq.{max (succ u2) (succ u1)} (OneHom.{u2, u1} M N _inst_1 _inst_2) f g) (forall (x : M), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1254 : M) => N) x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (OneHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1254 : M) => N) _x) (OneHomClass.toFunLike.{max u2 u1, u2, u1} (OneHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (OneHom.oneHomClass.{u2, u1} M N _inst_1 _inst_2)) f x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (OneHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1254 : M) => N) _x) (OneHomClass.toFunLike.{max u2 u1, u2, u1} (OneHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (OneHom.oneHomClass.{u2, u1} M N _inst_1 _inst_2)) g x))
+  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : One.{u2} M] [_inst_2 : One.{u1} N] {f : OneHom.{u2, u1} M N _inst_1 _inst_2} {g : OneHom.{u2, u1} M N _inst_1 _inst_2}, Iff (Eq.{max (succ u2) (succ u1)} (OneHom.{u2, u1} M N _inst_1 _inst_2) f g) (forall (x : M), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1262 : M) => N) x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (OneHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1262 : M) => N) _x) (OneHomClass.toFunLike.{max u2 u1, u2, u1} (OneHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (OneHom.oneHomClass.{u2, u1} M N _inst_1 _inst_2)) f x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (OneHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1262 : M) => N) _x) (OneHomClass.toFunLike.{max u2 u1, u2, u1} (OneHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (OneHom.oneHomClass.{u2, u1} M N _inst_1 _inst_2)) g x))
 Case conversion may be inaccurate. Consider using '#align one_hom.ext_iff OneHom.ext_iffₓ'. -/
 /-- Deprecated: use `fun_like.ext_iff` instead. -/
 @[to_additive "Deprecated: use `fun_like.ext_iff` instead."]
@@ -1153,7 +1153,7 @@ theorem OneHom.ext_iff [One M] [One N] {f g : OneHom M N} : f = g ↔ ∀ x, f x
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] {f : MulHom.{u1, u2} M N _inst_1 _inst_2} {g : MulHom.{u1, u2} M N _inst_1 _inst_2}, Iff (Eq.{max (succ u2) (succ u1)} (MulHom.{u1, u2} M N _inst_1 _inst_2) f g) (forall (x : M), Eq.{succ u2} N (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MulHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MulHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MulHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f x) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MulHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MulHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MulHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) g x))
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : Mul.{u2} M] [_inst_2 : Mul.{u1} N] {f : MulHom.{u2, u1} M N _inst_1 _inst_2} {g : MulHom.{u2, u1} M N _inst_1 _inst_2}, Iff (Eq.{max (succ u2) (succ u1)} (MulHom.{u2, u1} M N _inst_1 _inst_2) f g) (forall (x : M), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) f x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) g x))
+  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : Mul.{u2} M] [_inst_2 : Mul.{u1} N] {f : MulHom.{u2, u1} M N _inst_1 _inst_2} {g : MulHom.{u2, u1} M N _inst_1 _inst_2}, Iff (Eq.{max (succ u2) (succ u1)} (MulHom.{u2, u1} M N _inst_1 _inst_2) f g) (forall (x : M), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) f x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) g x))
 Case conversion may be inaccurate. Consider using '#align mul_hom.ext_iff MulHom.ext_iffₓ'. -/
 /-- Deprecated: use `fun_like.ext_iff` instead. -/
 @[to_additive "Deprecated: use `fun_like.ext_iff` instead."]
@@ -1166,7 +1166,7 @@ theorem MulHom.ext_iff [Mul M] [Mul N] {f g : M →ₙ* N} : f = g ↔ ∀ x, f
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N] {f : MonoidHom.{u1, u2} M N _inst_1 _inst_2} {g : MonoidHom.{u1, u2} M N _inst_1 _inst_2}, Iff (Eq.{max (succ u2) (succ u1)} (MonoidHom.{u1, u2} M N _inst_1 _inst_2) f g) (forall (x : M), Eq.{succ u2} N (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MonoidHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MonoidHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f x) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MonoidHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MonoidHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) g x))
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u1} N] {f : MonoidHom.{u2, u1} M N _inst_1 _inst_2} {g : MonoidHom.{u2, u1} M N _inst_1 _inst_2}, Iff (Eq.{max (succ u2) (succ u1)} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) f g) (forall (x : M), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2))) f x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2))) g x))
+  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u1} N] {f : MonoidHom.{u2, u1} M N _inst_1 _inst_2} {g : MonoidHom.{u2, u1} M N _inst_1 _inst_2}, Iff (Eq.{max (succ u2) (succ u1)} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) f g) (forall (x : M), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2))) f x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2))) g x))
 Case conversion may be inaccurate. Consider using '#align monoid_hom.ext_iff MonoidHom.ext_iffₓ'. -/
 /-- Deprecated: use `fun_like.ext_iff` instead. -/
 @[to_additive "Deprecated: use `fun_like.ext_iff` instead."]
@@ -1179,7 +1179,7 @@ theorem MonoidHom.ext_iff [MulOneClass M] [MulOneClass N] {f g : M →* N} : f =
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulZeroOneClass.{u1} M] [_inst_2 : MulZeroOneClass.{u2} N] {f : MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2} {g : MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2}, Iff (Eq.{max (succ u2) (succ u1)} (MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) f g) (forall (x : M), Eq.{succ u2} N (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MonoidWithZeroHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f x) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MonoidWithZeroHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) g x))
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : MulZeroOneClass.{u2} M] [_inst_2 : MulZeroOneClass.{u1} N] {f : MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2} {g : MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2}, Iff (Eq.{max (succ u2) (succ u1)} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) f g) (forall (x : M), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M (MulZeroOneClass.toMulOneClass.{u2} M _inst_1)) (MulOneClass.toMul.{u1} N (MulZeroOneClass.toMulOneClass.{u1} N _inst_2)) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulZeroOneClass.toMulOneClass.{u2} M _inst_1) (MulZeroOneClass.toMulOneClass.{u1} N _inst_2) (MonoidWithZeroHomClass.toMonoidHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidWithZeroHom.monoidWithZeroHomClass.{u2, u1} M N _inst_1 _inst_2)))) f x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M (MulZeroOneClass.toMulOneClass.{u2} M _inst_1)) (MulOneClass.toMul.{u1} N (MulZeroOneClass.toMulOneClass.{u1} N _inst_2)) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulZeroOneClass.toMulOneClass.{u2} M _inst_1) (MulZeroOneClass.toMulOneClass.{u1} N _inst_2) (MonoidWithZeroHomClass.toMonoidHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidWithZeroHom.monoidWithZeroHomClass.{u2, u1} M N _inst_1 _inst_2)))) g x))
+  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : MulZeroOneClass.{u2} M] [_inst_2 : MulZeroOneClass.{u1} N] {f : MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2} {g : MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2}, Iff (Eq.{max (succ u2) (succ u1)} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) f g) (forall (x : M), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M (MulZeroOneClass.toMulOneClass.{u2} M _inst_1)) (MulOneClass.toMul.{u1} N (MulZeroOneClass.toMulOneClass.{u1} N _inst_2)) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulZeroOneClass.toMulOneClass.{u2} M _inst_1) (MulZeroOneClass.toMulOneClass.{u1} N _inst_2) (MonoidWithZeroHomClass.toMonoidHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidWithZeroHom.monoidWithZeroHomClass.{u2, u1} M N _inst_1 _inst_2)))) f x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M (MulZeroOneClass.toMulOneClass.{u2} M _inst_1)) (MulOneClass.toMul.{u1} N (MulZeroOneClass.toMulOneClass.{u1} N _inst_2)) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulZeroOneClass.toMulOneClass.{u2} M _inst_1) (MulZeroOneClass.toMulOneClass.{u1} N _inst_2) (MonoidWithZeroHomClass.toMonoidHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidWithZeroHom.monoidWithZeroHomClass.{u2, u1} M N _inst_1 _inst_2)))) g x))
 Case conversion may be inaccurate. Consider using '#align monoid_with_zero_hom.ext_iff MonoidWithZeroHom.ext_iffₓ'. -/
 /-- Deprecated: use `fun_like.ext_iff` instead. -/
 theorem MonoidWithZeroHom.ext_iff [MulZeroOneClass M] [MulZeroOneClass N] {f g : M →*₀ N} :
@@ -1193,7 +1193,7 @@ end Deprecated
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : One.{u1} M] [_inst_2 : One.{u2} N] (f : OneHom.{u1, u2} M N _inst_1 _inst_2) (h1 : Eq.{succ u2} N (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (OneHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : OneHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (OneHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f (OfNat.ofNat.{u1} M 1 (OfNat.mk.{u1} M 1 (One.one.{u1} M _inst_1)))) (OfNat.ofNat.{u2} N 1 (OfNat.mk.{u2} N 1 (One.one.{u2} N _inst_2)))), Eq.{max (succ u2) (succ u1)} (OneHom.{u1, u2} M N _inst_1 _inst_2) (OneHom.mk.{u1, u2} M N _inst_1 _inst_2 (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (OneHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : OneHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (OneHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f) h1) f
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : One.{u2} M] [_inst_2 : One.{u1} N] (f : OneHom.{u2, u1} M N _inst_1 _inst_2) (h1 : Eq.{succ u1} N (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (OneHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1254 : M) => N) _x) (OneHomClass.toFunLike.{max u2 u1, u2, u1} (OneHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (OneHom.oneHomClass.{u2, u1} M N _inst_1 _inst_2)) f (OfNat.ofNat.{u2} M 1 (One.toOfNat1.{u2} M _inst_1))) (OfNat.ofNat.{u1} N 1 (One.toOfNat1.{u1} N _inst_2))), Eq.{max (succ u2) (succ u1)} (OneHom.{u2, u1} M N _inst_1 _inst_2) (OneHom.mk.{u2, u1} M N _inst_1 _inst_2 (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (OneHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1254 : M) => N) _x) (OneHomClass.toFunLike.{max u2 u1, u2, u1} (OneHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (OneHom.oneHomClass.{u2, u1} M N _inst_1 _inst_2)) f) h1) f
+  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : One.{u2} M] [_inst_2 : One.{u1} N] (f : OneHom.{u2, u1} M N _inst_1 _inst_2) (h1 : Eq.{succ u1} N (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (OneHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1262 : M) => N) _x) (OneHomClass.toFunLike.{max u2 u1, u2, u1} (OneHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (OneHom.oneHomClass.{u2, u1} M N _inst_1 _inst_2)) f (OfNat.ofNat.{u2} M 1 (One.toOfNat1.{u2} M _inst_1))) (OfNat.ofNat.{u1} N 1 (One.toOfNat1.{u1} N _inst_2))), Eq.{max (succ u2) (succ u1)} (OneHom.{u2, u1} M N _inst_1 _inst_2) (OneHom.mk.{u2, u1} M N _inst_1 _inst_2 (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (OneHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1262 : M) => N) _x) (OneHomClass.toFunLike.{max u2 u1, u2, u1} (OneHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (OneHom.oneHomClass.{u2, u1} M N _inst_1 _inst_2)) f) h1) f
 Case conversion may be inaccurate. Consider using '#align one_hom.mk_coe OneHom.mk_coeₓ'. -/
 @[simp, to_additive]
 theorem OneHom.mk_coe [One M] [One N] (f : OneHom M N) (h1) : OneHom.mk f h1 = f :=
@@ -1205,7 +1205,7 @@ theorem OneHom.mk_coe [One M] [One N] (f : OneHom M N) (h1) : OneHom.mk f h1 = f
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] (f : MulHom.{u1, u2} M N _inst_1 _inst_2) (hmul : forall (x : M) (y : M), Eq.{succ u2} N (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MulHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MulHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MulHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f (HMul.hMul.{u1, u1, u1} M M M (instHMul.{u1} M _inst_1) x y)) (HMul.hMul.{u2, u2, u2} N N N (instHMul.{u2} N _inst_2) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MulHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MulHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MulHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f x) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MulHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MulHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MulHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f y))), Eq.{max (succ u2) (succ u1)} (MulHom.{u1, u2} M N _inst_1 _inst_2) (MulHom.mk.{u1, u2} M N _inst_1 _inst_2 (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MulHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MulHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MulHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f) hmul) f
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : Mul.{u2} M] [_inst_2 : Mul.{u1} N] (f : MulHom.{u2, u1} M N _inst_1 _inst_2) (hmul : forall (x : M) (y : M), Eq.{succ u1} N (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) f (HMul.hMul.{u2, u2, u2} M M M (instHMul.{u2} M _inst_1) x y)) (HMul.hMul.{u1, u1, u1} N N N (instHMul.{u1} N _inst_2) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) f x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) f y))), Eq.{max (succ u2) (succ u1)} (MulHom.{u2, u1} M N _inst_1 _inst_2) (MulHom.mk.{u2, u1} M N _inst_1 _inst_2 (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) f) hmul) f
+  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : Mul.{u2} M] [_inst_2 : Mul.{u1} N] (f : MulHom.{u2, u1} M N _inst_1 _inst_2) (hmul : forall (x : M) (y : M), Eq.{succ u1} N (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) f (HMul.hMul.{u2, u2, u2} M M M (instHMul.{u2} M _inst_1) x y)) (HMul.hMul.{u1, u1, u1} N N N (instHMul.{u1} N _inst_2) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) f x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) f y))), Eq.{max (succ u2) (succ u1)} (MulHom.{u2, u1} M N _inst_1 _inst_2) (MulHom.mk.{u2, u1} M N _inst_1 _inst_2 (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) f) hmul) f
 Case conversion may be inaccurate. Consider using '#align mul_hom.mk_coe MulHom.mk_coeₓ'. -/
 @[simp, to_additive]
 theorem MulHom.mk_coe [Mul M] [Mul N] (f : M →ₙ* N) (hmul) : MulHom.mk f hmul = f :=
@@ -1298,7 +1298,7 @@ theorem MulHom.coe_copy_eq {hM : Mul M} {hN : Mul N} (f : M →ₙ* N) (f' : M 
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} {hM : MulOneClass.{u1} M} {hN : MulOneClass.{u2} N} (f : MonoidHom.{u1, u2} M N hM hN) (f' : M -> N), (Eq.{max (succ u1) (succ u2)} (M -> N) f' (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} M N hM hN) (fun (_x : MonoidHom.{u1, u2} M N hM hN) => M -> N) (MonoidHom.hasCoeToFun.{u1, u2} M N hM hN) f)) -> (MonoidHom.{u1, u2} M N hM hN)
 but is expected to have type
-  forall {M : Type.{u1}} {N : Type.{u2}} {hM : MulOneClass.{u1} M} {hN : MulOneClass.{u2} N} (f : MonoidHom.{u1, u2} M N hM hN) (f' : M -> N), (Eq.{max (succ u1) (succ u2)} (M -> N) f' (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (MonoidHom.{u1, u2} M N hM hN) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{max u1 u2, u1, u2} (MonoidHom.{u1, u2} M N hM hN) M N (MulOneClass.toMul.{u1} M hM) (MulOneClass.toMul.{u2} N hN) (MonoidHomClass.toMulHomClass.{max u1 u2, u1, u2} (MonoidHom.{u1, u2} M N hM hN) M N hM hN (MonoidHom.monoidHomClass.{u1, u2} M N hM hN))) f)) -> (MonoidHom.{u1, u2} M N hM hN)
+  forall {M : Type.{u1}} {N : Type.{u2}} {hM : MulOneClass.{u1} M} {hN : MulOneClass.{u2} N} (f : MonoidHom.{u1, u2} M N hM hN) (f' : M -> N), (Eq.{max (succ u1) (succ u2)} (M -> N) f' (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (MonoidHom.{u1, u2} M N hM hN) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{max u1 u2, u1, u2} (MonoidHom.{u1, u2} M N hM hN) M N (MulOneClass.toMul.{u1} M hM) (MulOneClass.toMul.{u2} N hN) (MonoidHomClass.toMulHomClass.{max u1 u2, u1, u2} (MonoidHom.{u1, u2} M N hM hN) M N hM hN (MonoidHom.monoidHomClass.{u1, u2} M N hM hN))) f)) -> (MonoidHom.{u1, u2} M N hM hN)
 Case conversion may be inaccurate. Consider using '#align monoid_hom.copy MonoidHom.copyₓ'. -/
 /-- Copy of a `monoid_hom` with a new `to_fun` equal to the old one. Useful to fix
 definitional equalities. -/
@@ -1328,7 +1328,7 @@ theorem MonoidHom.copy_eq {hM : MulOneClass M} {hN : MulOneClass N} (f : M →*
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} {hM : MulZeroOneClass.{u1} M} {hN : MulZeroOneClass.{u2} N} (f : MonoidWithZeroHom.{u1, u2} M N hM hN) (f' : M -> N), (Eq.{max (succ u1) (succ u2)} (M -> N) f' (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidWithZeroHom.{u1, u2} M N hM hN) (fun (_x : MonoidWithZeroHom.{u1, u2} M N hM hN) => M -> N) (MonoidWithZeroHom.hasCoeToFun.{u1, u2} M N hM hN) f)) -> (MonoidHom.{u1, u2} M N (MulZeroOneClass.toMulOneClass.{u1} M hM) (MulZeroOneClass.toMulOneClass.{u2} N hN))
 but is expected to have type
-  forall {M : Type.{u1}} {N : Type.{u2}} {hM : MulZeroOneClass.{u1} M} {hN : MulZeroOneClass.{u2} N} (f : MonoidWithZeroHom.{u1, u2} M N hM hN) (f' : M -> N), (Eq.{max (succ u1) (succ u2)} (M -> N) f' (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (MonoidWithZeroHom.{u1, u2} M N hM hN) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{max u1 u2, u1, u2} (MonoidWithZeroHom.{u1, u2} M N hM hN) M N (MulOneClass.toMul.{u1} M (MulZeroOneClass.toMulOneClass.{u1} M hM)) (MulOneClass.toMul.{u2} N (MulZeroOneClass.toMulOneClass.{u2} N hN)) (MonoidHomClass.toMulHomClass.{max u1 u2, u1, u2} (MonoidWithZeroHom.{u1, u2} M N hM hN) M N (MulZeroOneClass.toMulOneClass.{u1} M hM) (MulZeroOneClass.toMulOneClass.{u2} N hN) (MonoidWithZeroHomClass.toMonoidHomClass.{max u1 u2, u1, u2} (MonoidWithZeroHom.{u1, u2} M N hM hN) M N hM hN (MonoidWithZeroHom.monoidWithZeroHomClass.{u1, u2} M N hM hN)))) f)) -> (MonoidHom.{u1, u2} M N (MulZeroOneClass.toMulOneClass.{u1} M hM) (MulZeroOneClass.toMulOneClass.{u2} N hN))
+  forall {M : Type.{u1}} {N : Type.{u2}} {hM : MulZeroOneClass.{u1} M} {hN : MulZeroOneClass.{u2} N} (f : MonoidWithZeroHom.{u1, u2} M N hM hN) (f' : M -> N), (Eq.{max (succ u1) (succ u2)} (M -> N) f' (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (MonoidWithZeroHom.{u1, u2} M N hM hN) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{max u1 u2, u1, u2} (MonoidWithZeroHom.{u1, u2} M N hM hN) M N (MulOneClass.toMul.{u1} M (MulZeroOneClass.toMulOneClass.{u1} M hM)) (MulOneClass.toMul.{u2} N (MulZeroOneClass.toMulOneClass.{u2} N hN)) (MonoidHomClass.toMulHomClass.{max u1 u2, u1, u2} (MonoidWithZeroHom.{u1, u2} M N hM hN) M N (MulZeroOneClass.toMulOneClass.{u1} M hM) (MulZeroOneClass.toMulOneClass.{u2} N hN) (MonoidWithZeroHomClass.toMonoidHomClass.{max u1 u2, u1, u2} (MonoidWithZeroHom.{u1, u2} M N hM hN) M N hM hN (MonoidWithZeroHom.monoidWithZeroHomClass.{u1, u2} M N hM hN)))) f)) -> (MonoidHom.{u1, u2} M N (MulZeroOneClass.toMulOneClass.{u1} M hM) (MulZeroOneClass.toMulOneClass.{u2} N hN))
 Case conversion may be inaccurate. Consider using '#align monoid_with_zero_hom.copy MonoidWithZeroHom.copyₓ'. -/
 /-- Copy of a `monoid_hom` with a new `to_fun` equal to the old one. Useful to fix
 definitional equalities. -/
@@ -1352,7 +1352,7 @@ theorem MonoidWithZeroHom.copy_eq {hM : MulZeroOneClass M} {hN : MulZeroOneClass
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : One.{u1} M] [_inst_2 : One.{u2} N] (f : OneHom.{u1, u2} M N _inst_1 _inst_2), Eq.{succ u2} N (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (OneHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : OneHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (OneHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f (OfNat.ofNat.{u1} M 1 (OfNat.mk.{u1} M 1 (One.one.{u1} M _inst_1)))) (OfNat.ofNat.{u2} N 1 (OfNat.mk.{u2} N 1 (One.one.{u2} N _inst_2)))
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : One.{u2} M] [_inst_2 : One.{u1} N] (f : OneHom.{u2, u1} M N _inst_1 _inst_2), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1254 : M) => N) (OfNat.ofNat.{u2} M 1 (One.toOfNat1.{u2} M _inst_1))) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (OneHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1254 : M) => N) _x) (OneHomClass.toFunLike.{max u2 u1, u2, u1} (OneHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (OneHom.oneHomClass.{u2, u1} M N _inst_1 _inst_2)) f (OfNat.ofNat.{u2} M 1 (One.toOfNat1.{u2} M _inst_1))) (OfNat.ofNat.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1254 : M) => N) (OfNat.ofNat.{u2} M 1 (One.toOfNat1.{u2} M _inst_1))) 1 (One.toOfNat1.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1254 : M) => N) (OfNat.ofNat.{u2} M 1 (One.toOfNat1.{u2} M _inst_1))) _inst_2))
+  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : One.{u2} M] [_inst_2 : One.{u1} N] (f : OneHom.{u2, u1} M N _inst_1 _inst_2), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1262 : M) => N) (OfNat.ofNat.{u2} M 1 (One.toOfNat1.{u2} M _inst_1))) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (OneHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1262 : M) => N) _x) (OneHomClass.toFunLike.{max u2 u1, u2, u1} (OneHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (OneHom.oneHomClass.{u2, u1} M N _inst_1 _inst_2)) f (OfNat.ofNat.{u2} M 1 (One.toOfNat1.{u2} M _inst_1))) (OfNat.ofNat.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1262 : M) => N) (OfNat.ofNat.{u2} M 1 (One.toOfNat1.{u2} M _inst_1))) 1 (One.toOfNat1.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1262 : M) => N) (OfNat.ofNat.{u2} M 1 (One.toOfNat1.{u2} M _inst_1))) _inst_2))
 Case conversion may be inaccurate. Consider using '#align one_hom.map_one OneHom.map_oneₓ'. -/
 @[to_additive]
 protected theorem OneHom.map_one [One M] [One N] (f : OneHom M N) : f 1 = 1 :=
@@ -1364,7 +1364,7 @@ protected theorem OneHom.map_one [One M] [One N] (f : OneHom M N) : f 1 = 1 :=
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N] (f : MonoidHom.{u1, u2} M N _inst_1 _inst_2), Eq.{succ u2} N (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MonoidHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MonoidHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f (OfNat.ofNat.{u1} M 1 (OfNat.mk.{u1} M 1 (One.one.{u1} M (MulOneClass.toHasOne.{u1} M _inst_1))))) (OfNat.ofNat.{u2} N 1 (OfNat.mk.{u2} N 1 (One.one.{u2} N (MulOneClass.toHasOne.{u2} N _inst_2))))
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u1} N] (f : MonoidHom.{u2, u1} M N _inst_1 _inst_2), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) (OfNat.ofNat.{u2} M 1 (One.toOfNat1.{u2} M (MulOneClass.toOne.{u2} M _inst_1)))) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2))) f (OfNat.ofNat.{u2} M 1 (One.toOfNat1.{u2} M (MulOneClass.toOne.{u2} M _inst_1)))) (OfNat.ofNat.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) (OfNat.ofNat.{u2} M 1 (One.toOfNat1.{u2} M (MulOneClass.toOne.{u2} M _inst_1)))) 1 (One.toOfNat1.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) (OfNat.ofNat.{u2} M 1 (One.toOfNat1.{u2} M (MulOneClass.toOne.{u2} M _inst_1)))) (MulOneClass.toOne.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) (OfNat.ofNat.{u2} M 1 (One.toOfNat1.{u2} M (MulOneClass.toOne.{u2} M _inst_1)))) _inst_2)))
+  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u1} N] (f : MonoidHom.{u2, u1} M N _inst_1 _inst_2), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) (OfNat.ofNat.{u2} M 1 (One.toOfNat1.{u2} M (MulOneClass.toOne.{u2} M _inst_1)))) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2))) f (OfNat.ofNat.{u2} M 1 (One.toOfNat1.{u2} M (MulOneClass.toOne.{u2} M _inst_1)))) (OfNat.ofNat.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) (OfNat.ofNat.{u2} M 1 (One.toOfNat1.{u2} M (MulOneClass.toOne.{u2} M _inst_1)))) 1 (One.toOfNat1.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) (OfNat.ofNat.{u2} M 1 (One.toOfNat1.{u2} M (MulOneClass.toOne.{u2} M _inst_1)))) (MulOneClass.toOne.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) (OfNat.ofNat.{u2} M 1 (One.toOfNat1.{u2} M (MulOneClass.toOne.{u2} M _inst_1)))) _inst_2)))
 Case conversion may be inaccurate. Consider using '#align monoid_hom.map_one MonoidHom.map_oneₓ'. -/
 /-- If `f` is a monoid homomorphism then `f 1 = 1`. -/
 @[to_additive]
@@ -1377,7 +1377,7 @@ protected theorem MonoidHom.map_one [MulOneClass M] [MulOneClass N] (f : M →*
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulZeroOneClass.{u1} M] [_inst_2 : MulZeroOneClass.{u2} N] (f : MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2), Eq.{succ u2} N (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MonoidWithZeroHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) 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} N 1 (OfNat.mk.{u2} N 1 (One.one.{u2} N (MulOneClass.toHasOne.{u2} N (MulZeroOneClass.toMulOneClass.{u2} N _inst_2)))))
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : MulZeroOneClass.{u2} M] [_inst_2 : MulZeroOneClass.{u1} N] (f : MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) (OfNat.ofNat.{u2} M 1 (One.toOfNat1.{u2} M (MulOneClass.toOne.{u2} M (MulZeroOneClass.toMulOneClass.{u2} M _inst_1))))) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M (MulZeroOneClass.toMulOneClass.{u2} M _inst_1)) (MulOneClass.toMul.{u1} N (MulZeroOneClass.toMulOneClass.{u1} N _inst_2)) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulZeroOneClass.toMulOneClass.{u2} M _inst_1) (MulZeroOneClass.toMulOneClass.{u1} N _inst_2) (MonoidWithZeroHomClass.toMonoidHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidWithZeroHom.monoidWithZeroHomClass.{u2, u1} M N _inst_1 _inst_2)))) f (OfNat.ofNat.{u2} M 1 (One.toOfNat1.{u2} M (MulOneClass.toOne.{u2} M (MulZeroOneClass.toMulOneClass.{u2} M _inst_1))))) (OfNat.ofNat.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) (OfNat.ofNat.{u2} M 1 (One.toOfNat1.{u2} M (MulOneClass.toOne.{u2} M (MulZeroOneClass.toMulOneClass.{u2} M _inst_1))))) 1 (One.toOfNat1.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) (OfNat.ofNat.{u2} M 1 (One.toOfNat1.{u2} M (MulOneClass.toOne.{u2} M (MulZeroOneClass.toMulOneClass.{u2} M _inst_1))))) (MulOneClass.toOne.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) (OfNat.ofNat.{u2} M 1 (One.toOfNat1.{u2} M (MulOneClass.toOne.{u2} M (MulZeroOneClass.toMulOneClass.{u2} M _inst_1))))) (MulZeroOneClass.toMulOneClass.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) (OfNat.ofNat.{u2} M 1 (One.toOfNat1.{u2} M (MulOneClass.toOne.{u2} M (MulZeroOneClass.toMulOneClass.{u2} M _inst_1))))) _inst_2))))
+  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : MulZeroOneClass.{u2} M] [_inst_2 : MulZeroOneClass.{u1} N] (f : MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) (OfNat.ofNat.{u2} M 1 (One.toOfNat1.{u2} M (MulOneClass.toOne.{u2} M (MulZeroOneClass.toMulOneClass.{u2} M _inst_1))))) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M (MulZeroOneClass.toMulOneClass.{u2} M _inst_1)) (MulOneClass.toMul.{u1} N (MulZeroOneClass.toMulOneClass.{u1} N _inst_2)) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulZeroOneClass.toMulOneClass.{u2} M _inst_1) (MulZeroOneClass.toMulOneClass.{u1} N _inst_2) (MonoidWithZeroHomClass.toMonoidHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidWithZeroHom.monoidWithZeroHomClass.{u2, u1} M N _inst_1 _inst_2)))) f (OfNat.ofNat.{u2} M 1 (One.toOfNat1.{u2} M (MulOneClass.toOne.{u2} M (MulZeroOneClass.toMulOneClass.{u2} M _inst_1))))) (OfNat.ofNat.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) (OfNat.ofNat.{u2} M 1 (One.toOfNat1.{u2} M (MulOneClass.toOne.{u2} M (MulZeroOneClass.toMulOneClass.{u2} M _inst_1))))) 1 (One.toOfNat1.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) (OfNat.ofNat.{u2} M 1 (One.toOfNat1.{u2} M (MulOneClass.toOne.{u2} M (MulZeroOneClass.toMulOneClass.{u2} M _inst_1))))) (MulOneClass.toOne.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) (OfNat.ofNat.{u2} M 1 (One.toOfNat1.{u2} M (MulOneClass.toOne.{u2} M (MulZeroOneClass.toMulOneClass.{u2} M _inst_1))))) (MulZeroOneClass.toMulOneClass.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) (OfNat.ofNat.{u2} M 1 (One.toOfNat1.{u2} M (MulOneClass.toOne.{u2} M (MulZeroOneClass.toMulOneClass.{u2} M _inst_1))))) _inst_2))))
 Case conversion may be inaccurate. Consider using '#align monoid_with_zero_hom.map_one MonoidWithZeroHom.map_oneₓ'. -/
 protected theorem MonoidWithZeroHom.map_one [MulZeroOneClass M] [MulZeroOneClass N] (f : M →*₀ N) :
     f 1 = 1 :=
@@ -1391,7 +1391,7 @@ add_decl_doc AddMonoidHom.map_zero
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulZeroOneClass.{u1} M] [_inst_2 : MulZeroOneClass.{u2} N] (f : MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2), Eq.{succ u2} N (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MonoidWithZeroHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) 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} N 0 (OfNat.mk.{u2} N 0 (Zero.zero.{u2} N (MulZeroClass.toHasZero.{u2} N (MulZeroOneClass.toMulZeroClass.{u2} N _inst_2)))))
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : MulZeroOneClass.{u2} M] [_inst_2 : MulZeroOneClass.{u1} N] (f : MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) (OfNat.ofNat.{u2} M 0 (Zero.toOfNat0.{u2} M (MulZeroOneClass.toZero.{u2} M _inst_1)))) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M (MulZeroOneClass.toMulOneClass.{u2} M _inst_1)) (MulOneClass.toMul.{u1} N (MulZeroOneClass.toMulOneClass.{u1} N _inst_2)) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulZeroOneClass.toMulOneClass.{u2} M _inst_1) (MulZeroOneClass.toMulOneClass.{u1} N _inst_2) (MonoidWithZeroHomClass.toMonoidHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidWithZeroHom.monoidWithZeroHomClass.{u2, u1} M N _inst_1 _inst_2)))) f (OfNat.ofNat.{u2} M 0 (Zero.toOfNat0.{u2} M (MulZeroOneClass.toZero.{u2} M _inst_1)))) (OfNat.ofNat.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) (OfNat.ofNat.{u2} M 0 (Zero.toOfNat0.{u2} M (MulZeroOneClass.toZero.{u2} M _inst_1)))) 0 (Zero.toOfNat0.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) (OfNat.ofNat.{u2} M 0 (Zero.toOfNat0.{u2} M (MulZeroOneClass.toZero.{u2} M _inst_1)))) (MulZeroOneClass.toZero.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) (OfNat.ofNat.{u2} M 0 (Zero.toOfNat0.{u2} M (MulZeroOneClass.toZero.{u2} M _inst_1)))) _inst_2)))
+  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : MulZeroOneClass.{u2} M] [_inst_2 : MulZeroOneClass.{u1} N] (f : MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) (OfNat.ofNat.{u2} M 0 (Zero.toOfNat0.{u2} M (MulZeroOneClass.toZero.{u2} M _inst_1)))) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M (MulZeroOneClass.toMulOneClass.{u2} M _inst_1)) (MulOneClass.toMul.{u1} N (MulZeroOneClass.toMulOneClass.{u1} N _inst_2)) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulZeroOneClass.toMulOneClass.{u2} M _inst_1) (MulZeroOneClass.toMulOneClass.{u1} N _inst_2) (MonoidWithZeroHomClass.toMonoidHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidWithZeroHom.monoidWithZeroHomClass.{u2, u1} M N _inst_1 _inst_2)))) f (OfNat.ofNat.{u2} M 0 (Zero.toOfNat0.{u2} M (MulZeroOneClass.toZero.{u2} M _inst_1)))) (OfNat.ofNat.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) (OfNat.ofNat.{u2} M 0 (Zero.toOfNat0.{u2} M (MulZeroOneClass.toZero.{u2} M _inst_1)))) 0 (Zero.toOfNat0.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) (OfNat.ofNat.{u2} M 0 (Zero.toOfNat0.{u2} M (MulZeroOneClass.toZero.{u2} M _inst_1)))) (MulZeroOneClass.toZero.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) (OfNat.ofNat.{u2} M 0 (Zero.toOfNat0.{u2} M (MulZeroOneClass.toZero.{u2} M _inst_1)))) _inst_2)))
 Case conversion may be inaccurate. Consider using '#align monoid_with_zero_hom.map_zero MonoidWithZeroHom.map_zeroₓ'. -/
 protected theorem MonoidWithZeroHom.map_zero [MulZeroOneClass M] [MulZeroOneClass N] (f : M →*₀ N) :
     f 0 = 0 :=
@@ -1402,7 +1402,7 @@ protected theorem MonoidWithZeroHom.map_zero [MulZeroOneClass M] [MulZeroOneClas
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] (f : MulHom.{u1, u2} M N _inst_1 _inst_2) (a : M) (b : M), Eq.{succ u2} N (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MulHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MulHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MulHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f (HMul.hMul.{u1, u1, u1} M M M (instHMul.{u1} M _inst_1) a b)) (HMul.hMul.{u2, u2, u2} N N N (instHMul.{u2} N _inst_2) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MulHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MulHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MulHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f a) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MulHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MulHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MulHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f b))
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : Mul.{u2} M] [_inst_2 : Mul.{u1} N] (f : MulHom.{u2, u1} M N _inst_1 _inst_2) (a : M) (b : M), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) (HMul.hMul.{u2, u2, u2} M M M (instHMul.{u2} M _inst_1) a b)) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) f (HMul.hMul.{u2, u2, u2} M M M (instHMul.{u2} M _inst_1) a b)) (HMul.hMul.{u1, u1, u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) a) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) b) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) a) (instHMul.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) a) _inst_2) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) f a) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) f b))
+  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : Mul.{u2} M] [_inst_2 : Mul.{u1} N] (f : MulHom.{u2, u1} M N _inst_1 _inst_2) (a : M) (b : M), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) (HMul.hMul.{u2, u2, u2} M M M (instHMul.{u2} M _inst_1) a b)) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) f (HMul.hMul.{u2, u2, u2} M M M (instHMul.{u2} M _inst_1) a b)) (HMul.hMul.{u1, u1, u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) a) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) b) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) a) (instHMul.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) a) _inst_2) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) f a) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) f b))
 Case conversion may be inaccurate. Consider using '#align mul_hom.map_mul MulHom.map_mulₓ'. -/
 @[to_additive]
 protected theorem MulHom.map_mul [Mul M] [Mul N] (f : M →ₙ* N) (a b : M) : f (a * b) = f a * f b :=
@@ -1414,7 +1414,7 @@ protected theorem MulHom.map_mul [Mul M] [Mul N] (f : M →ₙ* N) (a b : M) : f
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N] (f : MonoidHom.{u1, u2} M N _inst_1 _inst_2) (a : M) (b : M), Eq.{succ u2} N (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MonoidHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MonoidHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f (HMul.hMul.{u1, u1, u1} M M M (instHMul.{u1} M (MulOneClass.toHasMul.{u1} M _inst_1)) a b)) (HMul.hMul.{u2, u2, u2} N N N (instHMul.{u2} N (MulOneClass.toHasMul.{u2} N _inst_2)) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MonoidHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MonoidHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f a) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MonoidHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MonoidHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f b))
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u1} N] (f : MonoidHom.{u2, u1} M N _inst_1 _inst_2) (a : M) (b : M), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) (HMul.hMul.{u2, u2, u2} M M M (instHMul.{u2} M (MulOneClass.toMul.{u2} M _inst_1)) a b)) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2))) f (HMul.hMul.{u2, u2, u2} M M M (instHMul.{u2} M (MulOneClass.toMul.{u2} M _inst_1)) a b)) (HMul.hMul.{u1, u1, u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) a) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) b) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) a) (instHMul.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) a) (MulOneClass.toMul.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) a) _inst_2)) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2))) f a) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2))) f b))
+  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u1} N] (f : MonoidHom.{u2, u1} M N _inst_1 _inst_2) (a : M) (b : M), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) (HMul.hMul.{u2, u2, u2} M M M (instHMul.{u2} M (MulOneClass.toMul.{u2} M _inst_1)) a b)) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2))) f (HMul.hMul.{u2, u2, u2} M M M (instHMul.{u2} M (MulOneClass.toMul.{u2} M _inst_1)) a b)) (HMul.hMul.{u1, u1, u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) a) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) b) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) a) (instHMul.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) a) (MulOneClass.toMul.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) a) _inst_2)) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2))) f a) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2))) f b))
 Case conversion may be inaccurate. Consider using '#align monoid_hom.map_mul MonoidHom.map_mulₓ'. -/
 /-- If `f` is a monoid homomorphism then `f (a * b) = f a * f b`. -/
 @[to_additive]
@@ -1428,7 +1428,7 @@ protected theorem MonoidHom.map_mul [MulOneClass M] [MulOneClass N] (f : M →*
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulZeroOneClass.{u1} M] [_inst_2 : MulZeroOneClass.{u2} N] (f : MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) (a : M) (b : M), Eq.{succ u2} N (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MonoidWithZeroHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) 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} N N N (instHMul.{u2} N (MulZeroClass.toHasMul.{u2} N (MulZeroOneClass.toMulZeroClass.{u2} N _inst_2))) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MonoidWithZeroHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f a) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MonoidWithZeroHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f b))
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : MulZeroOneClass.{u2} M] [_inst_2 : MulZeroOneClass.{u1} N] (f : MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) (a : M) (b : M), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) (HMul.hMul.{u2, u2, u2} M M M (instHMul.{u2} M (MulZeroClass.toMul.{u2} M (MulZeroOneClass.toMulZeroClass.{u2} M _inst_1))) a b)) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M (MulZeroOneClass.toMulOneClass.{u2} M _inst_1)) (MulOneClass.toMul.{u1} N (MulZeroOneClass.toMulOneClass.{u1} N _inst_2)) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulZeroOneClass.toMulOneClass.{u2} M _inst_1) (MulZeroOneClass.toMulOneClass.{u1} N _inst_2) (MonoidWithZeroHomClass.toMonoidHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidWithZeroHom.monoidWithZeroHomClass.{u2, u1} M N _inst_1 _inst_2)))) f (HMul.hMul.{u2, u2, u2} M M M (instHMul.{u2} M (MulZeroClass.toMul.{u2} M (MulZeroOneClass.toMulZeroClass.{u2} M _inst_1))) a b)) (HMul.hMul.{u1, u1, u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) a) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) b) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) a) (instHMul.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) a) (MulZeroClass.toMul.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) a) (MulZeroOneClass.toMulZeroClass.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) a) _inst_2))) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M (MulZeroOneClass.toMulOneClass.{u2} M _inst_1)) (MulOneClass.toMul.{u1} N (MulZeroOneClass.toMulOneClass.{u1} N _inst_2)) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulZeroOneClass.toMulOneClass.{u2} M _inst_1) (MulZeroOneClass.toMulOneClass.{u1} N _inst_2) (MonoidWithZeroHomClass.toMonoidHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidWithZeroHom.monoidWithZeroHomClass.{u2, u1} M N _inst_1 _inst_2)))) f a) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M (MulZeroOneClass.toMulOneClass.{u2} M _inst_1)) (MulOneClass.toMul.{u1} N (MulZeroOneClass.toMulOneClass.{u1} N _inst_2)) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulZeroOneClass.toMulOneClass.{u2} M _inst_1) (MulZeroOneClass.toMulOneClass.{u1} N _inst_2) (MonoidWithZeroHomClass.toMonoidHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidWithZeroHom.monoidWithZeroHomClass.{u2, u1} M N _inst_1 _inst_2)))) f b))
+  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : MulZeroOneClass.{u2} M] [_inst_2 : MulZeroOneClass.{u1} N] (f : MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) (a : M) (b : M), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) (HMul.hMul.{u2, u2, u2} M M M (instHMul.{u2} M (MulZeroClass.toMul.{u2} M (MulZeroOneClass.toMulZeroClass.{u2} M _inst_1))) a b)) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M (MulZeroOneClass.toMulOneClass.{u2} M _inst_1)) (MulOneClass.toMul.{u1} N (MulZeroOneClass.toMulOneClass.{u1} N _inst_2)) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulZeroOneClass.toMulOneClass.{u2} M _inst_1) (MulZeroOneClass.toMulOneClass.{u1} N _inst_2) (MonoidWithZeroHomClass.toMonoidHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidWithZeroHom.monoidWithZeroHomClass.{u2, u1} M N _inst_1 _inst_2)))) f (HMul.hMul.{u2, u2, u2} M M M (instHMul.{u2} M (MulZeroClass.toMul.{u2} M (MulZeroOneClass.toMulZeroClass.{u2} M _inst_1))) a b)) (HMul.hMul.{u1, u1, u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) a) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) b) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) a) (instHMul.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) a) (MulZeroClass.toMul.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) a) (MulZeroOneClass.toMulZeroClass.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) a) _inst_2))) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M (MulZeroOneClass.toMulOneClass.{u2} M _inst_1)) (MulOneClass.toMul.{u1} N (MulZeroOneClass.toMulOneClass.{u1} N _inst_2)) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulZeroOneClass.toMulOneClass.{u2} M _inst_1) (MulZeroOneClass.toMulOneClass.{u1} N _inst_2) (MonoidWithZeroHomClass.toMonoidHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidWithZeroHom.monoidWithZeroHomClass.{u2, u1} M N _inst_1 _inst_2)))) f a) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M (MulZeroOneClass.toMulOneClass.{u2} M _inst_1)) (MulOneClass.toMul.{u1} N (MulZeroOneClass.toMulOneClass.{u1} N _inst_2)) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulZeroOneClass.toMulOneClass.{u2} M _inst_1) (MulZeroOneClass.toMulOneClass.{u1} N _inst_2) (MonoidWithZeroHomClass.toMonoidHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidWithZeroHom.monoidWithZeroHomClass.{u2, u1} M N _inst_1 _inst_2)))) f b))
 Case conversion may be inaccurate. Consider using '#align monoid_with_zero_hom.map_mul MonoidWithZeroHom.map_mulₓ'. -/
 protected theorem MonoidWithZeroHom.map_mul [MulZeroOneClass M] [MulZeroOneClass N] (f : M →*₀ N)
     (a b : M) : f (a * b) = f a * f b :=
@@ -1448,7 +1448,7 @@ include mM mN
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} {F : Type.{u3}} {mM : MulOneClass.{u1} M} {mN : MulOneClass.{u2} N} [_inst_1 : MonoidHomClass.{u3, u1, u2} F M N mM mN] (f : F) {x : M}, (Exists.{succ u1} M (fun (y : M) => Eq.{succ u1} M (HMul.hMul.{u1, u1, u1} M M M (instHMul.{u1} M (MulOneClass.toHasMul.{u1} M mM)) x y) (OfNat.ofNat.{u1} M 1 (OfNat.mk.{u1} M 1 (One.one.{u1} M (MulOneClass.toHasOne.{u1} M mM)))))) -> (Exists.{succ u2} N (fun (y : N) => Eq.{succ u2} N (HMul.hMul.{u2, u2, u2} N N N (instHMul.{u2} N (MulOneClass.toHasMul.{u2} N mN)) (coeFn.{succ u3, max (succ u1) (succ u2)} F (fun (_x : F) => M -> N) (FunLike.hasCoeToFun.{succ u3, succ u1, succ u2} F M (fun (_x : M) => N) (MulHomClass.toFunLike.{u3, u1, u2} F M N (MulOneClass.toHasMul.{u1} M mM) (MulOneClass.toHasMul.{u2} N mN) (MonoidHomClass.toMulHomClass.{u3, u1, u2} F M N mM mN _inst_1))) f x) y) (OfNat.ofNat.{u2} N 1 (OfNat.mk.{u2} N 1 (One.one.{u2} N (MulOneClass.toHasOne.{u2} N mN))))))
 but is expected to have type
-  forall {M : Type.{u3}} {N : Type.{u2}} {F : Type.{u1}} {mM : MulOneClass.{u3} M} {mN : MulOneClass.{u2} N} [_inst_1 : MonoidHomClass.{u1, u3, u2} F M N mM mN] (f : F) {x : M}, (Exists.{succ u3} M (fun (y : M) => Eq.{succ u3} M (HMul.hMul.{u3, u3, u3} M M M (instHMul.{u3} M (MulOneClass.toMul.{u3} M mM)) x y) (OfNat.ofNat.{u3} M 1 (One.toOfNat1.{u3} M (MulOneClass.toOne.{u3} M mM))))) -> (Exists.{succ u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) x) (fun (y : (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) x) => Eq.{succ u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) x) (HMul.hMul.{u2, u2, u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) x) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) x) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) x) (instHMul.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) x) (MulOneClass.toMul.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) x) mN)) (FunLike.coe.{succ u1, succ u3, succ u2} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{u1, u3, u2} F M N (MulOneClass.toMul.{u3} M mM) (MulOneClass.toMul.{u2} N mN) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F M N mM mN _inst_1)) f x) y) (OfNat.ofNat.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) x) 1 (One.toOfNat1.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) x) (MulOneClass.toOne.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) x) mN)))))
+  forall {M : Type.{u3}} {N : Type.{u2}} {F : Type.{u1}} {mM : MulOneClass.{u3} M} {mN : MulOneClass.{u2} N} [_inst_1 : MonoidHomClass.{u1, u3, u2} F M N mM mN] (f : F) {x : M}, (Exists.{succ u3} M (fun (y : M) => Eq.{succ u3} M (HMul.hMul.{u3, u3, u3} M M M (instHMul.{u3} M (MulOneClass.toMul.{u3} M mM)) x y) (OfNat.ofNat.{u3} M 1 (One.toOfNat1.{u3} M (MulOneClass.toOne.{u3} M mM))))) -> (Exists.{succ u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) x) (fun (y : (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) x) => Eq.{succ u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) x) (HMul.hMul.{u2, u2, u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) x) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) x) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) x) (instHMul.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) x) (MulOneClass.toMul.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) x) mN)) (FunLike.coe.{succ u1, succ u3, succ u2} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{u1, u3, u2} F M N (MulOneClass.toMul.{u3} M mM) (MulOneClass.toMul.{u2} N mN) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F M N mM mN _inst_1)) f x) y) (OfNat.ofNat.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) x) 1 (One.toOfNat1.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) x) (MulOneClass.toOne.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) x) mN)))))
 Case conversion may be inaccurate. Consider using '#align monoid_hom.map_exists_right_inv MonoidHom.map_exists_right_invₓ'. -/
 /-- Given a monoid homomorphism `f : M →* N` and an element `x : M`, if `x` has a right inverse,
 then `f x` has a right inverse too. For elements invertible on both sides see `is_unit.map`. -/
@@ -1464,7 +1464,7 @@ theorem map_exists_right_inv (f : F) {x : M} (hx : ∃ y, x * y = 1) : ∃ y, f
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} {F : Type.{u3}} {mM : MulOneClass.{u1} M} {mN : MulOneClass.{u2} N} [_inst_1 : MonoidHomClass.{u3, u1, u2} F M N mM mN] (f : F) {x : M}, (Exists.{succ u1} M (fun (y : M) => Eq.{succ u1} M (HMul.hMul.{u1, u1, u1} M M M (instHMul.{u1} M (MulOneClass.toHasMul.{u1} M mM)) y x) (OfNat.ofNat.{u1} M 1 (OfNat.mk.{u1} M 1 (One.one.{u1} M (MulOneClass.toHasOne.{u1} M mM)))))) -> (Exists.{succ u2} N (fun (y : N) => Eq.{succ u2} N (HMul.hMul.{u2, u2, u2} N N N (instHMul.{u2} N (MulOneClass.toHasMul.{u2} N mN)) y (coeFn.{succ u3, max (succ u1) (succ u2)} F (fun (_x : F) => M -> N) (FunLike.hasCoeToFun.{succ u3, succ u1, succ u2} F M (fun (_x : M) => N) (MulHomClass.toFunLike.{u3, u1, u2} F M N (MulOneClass.toHasMul.{u1} M mM) (MulOneClass.toHasMul.{u2} N mN) (MonoidHomClass.toMulHomClass.{u3, u1, u2} F M N mM mN _inst_1))) f x)) (OfNat.ofNat.{u2} N 1 (OfNat.mk.{u2} N 1 (One.one.{u2} N (MulOneClass.toHasOne.{u2} N mN))))))
 but is expected to have type
-  forall {M : Type.{u3}} {N : Type.{u2}} {F : Type.{u1}} {mM : MulOneClass.{u3} M} {mN : MulOneClass.{u2} N} [_inst_1 : MonoidHomClass.{u1, u3, u2} F M N mM mN] (f : F) {x : M}, (Exists.{succ u3} M (fun (y : M) => Eq.{succ u3} M (HMul.hMul.{u3, u3, u3} M M M (instHMul.{u3} M (MulOneClass.toMul.{u3} M mM)) y x) (OfNat.ofNat.{u3} M 1 (One.toOfNat1.{u3} M (MulOneClass.toOne.{u3} M mM))))) -> (Exists.{succ u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) x) (fun (y : (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) x) => Eq.{succ u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) x) (HMul.hMul.{u2, u2, u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) x) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) x) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) x) (instHMul.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) x) (MulOneClass.toMul.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) x) mN)) y (FunLike.coe.{succ u1, succ u3, succ u2} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{u1, u3, u2} F M N (MulOneClass.toMul.{u3} M mM) (MulOneClass.toMul.{u2} N mN) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F M N mM mN _inst_1)) f x)) (OfNat.ofNat.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) x) 1 (One.toOfNat1.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) x) (MulOneClass.toOne.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) x) mN)))))
+  forall {M : Type.{u3}} {N : Type.{u2}} {F : Type.{u1}} {mM : MulOneClass.{u3} M} {mN : MulOneClass.{u2} N} [_inst_1 : MonoidHomClass.{u1, u3, u2} F M N mM mN] (f : F) {x : M}, (Exists.{succ u3} M (fun (y : M) => Eq.{succ u3} M (HMul.hMul.{u3, u3, u3} M M M (instHMul.{u3} M (MulOneClass.toMul.{u3} M mM)) y x) (OfNat.ofNat.{u3} M 1 (One.toOfNat1.{u3} M (MulOneClass.toOne.{u3} M mM))))) -> (Exists.{succ u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) x) (fun (y : (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) x) => Eq.{succ u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) x) (HMul.hMul.{u2, u2, u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) x) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) x) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) x) (instHMul.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) x) (MulOneClass.toMul.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) x) mN)) y (FunLike.coe.{succ u1, succ u3, succ u2} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{u1, u3, u2} F M N (MulOneClass.toMul.{u3} M mM) (MulOneClass.toMul.{u2} N mN) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F M N mM mN _inst_1)) f x)) (OfNat.ofNat.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) x) 1 (One.toOfNat1.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) x) (MulOneClass.toOne.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) x) mN)))))
 Case conversion may be inaccurate. Consider using '#align monoid_hom.map_exists_left_inv MonoidHom.map_exists_left_invₓ'. -/
 /-- Given a monoid homomorphism `f : M →* N` and an element `x : M`, if `x` has a left inverse,
 then `f x` has a left inverse too. For elements invertible on both sides see `is_unit.map`. -/
@@ -1498,7 +1498,7 @@ def invMonoidHom : α →* α where
 lean 3 declaration is
   forall {α : Type.{u1}} [_inst_1 : DivisionCommMonoid.{u1} α], Eq.{succ u1} ((fun (_x : MonoidHom.{u1, u1} α α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (DivisionMonoid.toDivInvMonoid.{u1} α (DivisionCommMonoid.toDivisionMonoid.{u1} α _inst_1)))) (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (DivisionMonoid.toDivInvMonoid.{u1} α (DivisionCommMonoid.toDivisionMonoid.{u1} α _inst_1))))) => α -> α) (invMonoidHom.{u1} α _inst_1)) (coeFn.{succ u1, succ u1} (MonoidHom.{u1, u1} α α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (DivisionMonoid.toDivInvMonoid.{u1} α (DivisionCommMonoid.toDivisionMonoid.{u1} α _inst_1)))) (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (DivisionMonoid.toDivInvMonoid.{u1} α (DivisionCommMonoid.toDivisionMonoid.{u1} α _inst_1))))) (fun (_x : MonoidHom.{u1, u1} α α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (DivisionMonoid.toDivInvMonoid.{u1} α (DivisionCommMonoid.toDivisionMonoid.{u1} α _inst_1)))) (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (DivisionMonoid.toDivInvMonoid.{u1} α (DivisionCommMonoid.toDivisionMonoid.{u1} α _inst_1))))) => α -> α) (MonoidHom.hasCoeToFun.{u1, u1} α α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (DivisionMonoid.toDivInvMonoid.{u1} α (DivisionCommMonoid.toDivisionMonoid.{u1} α _inst_1)))) (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (DivisionMonoid.toDivInvMonoid.{u1} α (DivisionCommMonoid.toDivisionMonoid.{u1} α _inst_1))))) (invMonoidHom.{u1} α _inst_1)) (Inv.inv.{u1} α (DivInvMonoid.toHasInv.{u1} α (DivisionMonoid.toDivInvMonoid.{u1} α (DivisionCommMonoid.toDivisionMonoid.{u1} α _inst_1))))
 but is expected to have type
-  forall {α : Type.{u1}} [_inst_1 : DivisionCommMonoid.{u1} α], Eq.{succ u1} (forall (a : α), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : α) => α) a) (FunLike.coe.{succ u1, succ u1, succ u1} (MonoidHom.{u1, u1} α α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (DivisionMonoid.toDivInvMonoid.{u1} α (DivisionCommMonoid.toDivisionMonoid.{u1} α _inst_1)))) (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (DivisionMonoid.toDivInvMonoid.{u1} α (DivisionCommMonoid.toDivisionMonoid.{u1} α _inst_1))))) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : α) => α) _x) (MulHomClass.toFunLike.{u1, u1, u1} (MonoidHom.{u1, u1} α α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (DivisionMonoid.toDivInvMonoid.{u1} α (DivisionCommMonoid.toDivisionMonoid.{u1} α _inst_1)))) (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (DivisionMonoid.toDivInvMonoid.{u1} α (DivisionCommMonoid.toDivisionMonoid.{u1} α _inst_1))))) α α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (DivisionMonoid.toDivInvMonoid.{u1} α (DivisionCommMonoid.toDivisionMonoid.{u1} α _inst_1))))) (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (DivisionMonoid.toDivInvMonoid.{u1} α (DivisionCommMonoid.toDivisionMonoid.{u1} α _inst_1))))) (MonoidHomClass.toMulHomClass.{u1, u1, u1} (MonoidHom.{u1, u1} α α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (DivisionMonoid.toDivInvMonoid.{u1} α (DivisionCommMonoid.toDivisionMonoid.{u1} α _inst_1)))) (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (DivisionMonoid.toDivInvMonoid.{u1} α (DivisionCommMonoid.toDivisionMonoid.{u1} α _inst_1))))) α α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (DivisionMonoid.toDivInvMonoid.{u1} α (DivisionCommMonoid.toDivisionMonoid.{u1} α _inst_1)))) (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (DivisionMonoid.toDivInvMonoid.{u1} α (DivisionCommMonoid.toDivisionMonoid.{u1} α _inst_1)))) (MonoidHom.monoidHomClass.{u1, u1} α α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (DivisionMonoid.toDivInvMonoid.{u1} α (DivisionCommMonoid.toDivisionMonoid.{u1} α _inst_1)))) (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (DivisionMonoid.toDivInvMonoid.{u1} α (DivisionCommMonoid.toDivisionMonoid.{u1} α _inst_1))))))) (invMonoidHom.{u1} α _inst_1)) (Inv.inv.{u1} α (InvOneClass.toInv.{u1} α (DivInvOneMonoid.toInvOneClass.{u1} α (DivisionMonoid.toDivInvOneMonoid.{u1} α (DivisionCommMonoid.toDivisionMonoid.{u1} α _inst_1)))))
+  forall {α : Type.{u1}} [_inst_1 : DivisionCommMonoid.{u1} α], Eq.{succ u1} (forall (a : α), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : α) => α) a) (FunLike.coe.{succ u1, succ u1, succ u1} (MonoidHom.{u1, u1} α α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (DivisionMonoid.toDivInvMonoid.{u1} α (DivisionCommMonoid.toDivisionMonoid.{u1} α _inst_1)))) (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (DivisionMonoid.toDivInvMonoid.{u1} α (DivisionCommMonoid.toDivisionMonoid.{u1} α _inst_1))))) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : α) => α) _x) (MulHomClass.toFunLike.{u1, u1, u1} (MonoidHom.{u1, u1} α α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (DivisionMonoid.toDivInvMonoid.{u1} α (DivisionCommMonoid.toDivisionMonoid.{u1} α _inst_1)))) (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (DivisionMonoid.toDivInvMonoid.{u1} α (DivisionCommMonoid.toDivisionMonoid.{u1} α _inst_1))))) α α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (DivisionMonoid.toDivInvMonoid.{u1} α (DivisionCommMonoid.toDivisionMonoid.{u1} α _inst_1))))) (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (DivisionMonoid.toDivInvMonoid.{u1} α (DivisionCommMonoid.toDivisionMonoid.{u1} α _inst_1))))) (MonoidHomClass.toMulHomClass.{u1, u1, u1} (MonoidHom.{u1, u1} α α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (DivisionMonoid.toDivInvMonoid.{u1} α (DivisionCommMonoid.toDivisionMonoid.{u1} α _inst_1)))) (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (DivisionMonoid.toDivInvMonoid.{u1} α (DivisionCommMonoid.toDivisionMonoid.{u1} α _inst_1))))) α α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (DivisionMonoid.toDivInvMonoid.{u1} α (DivisionCommMonoid.toDivisionMonoid.{u1} α _inst_1)))) (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (DivisionMonoid.toDivInvMonoid.{u1} α (DivisionCommMonoid.toDivisionMonoid.{u1} α _inst_1)))) (MonoidHom.monoidHomClass.{u1, u1} α α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (DivisionMonoid.toDivInvMonoid.{u1} α (DivisionCommMonoid.toDivisionMonoid.{u1} α _inst_1)))) (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (DivisionMonoid.toDivInvMonoid.{u1} α (DivisionCommMonoid.toDivisionMonoid.{u1} α _inst_1))))))) (invMonoidHom.{u1} α _inst_1)) (Inv.inv.{u1} α (InvOneClass.toInv.{u1} α (DivInvOneMonoid.toInvOneClass.{u1} α (DivisionMonoid.toDivInvOneMonoid.{u1} α (DivisionCommMonoid.toDivisionMonoid.{u1} α _inst_1)))))
 Case conversion may be inaccurate. Consider using '#align coe_inv_monoid_hom coe_invMonoidHomₓ'. -/
 @[simp]
 theorem coe_invMonoidHom : (invMonoidHom : α → α) = Inv.inv :=
@@ -1509,7 +1509,7 @@ theorem coe_invMonoidHom : (invMonoidHom : α → α) = Inv.inv :=
 lean 3 declaration is
   forall {α : Type.{u1}} [_inst_1 : DivisionCommMonoid.{u1} α] (a : α), Eq.{succ u1} α (coeFn.{succ u1, succ u1} (MonoidHom.{u1, u1} α α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (DivisionMonoid.toDivInvMonoid.{u1} α (DivisionCommMonoid.toDivisionMonoid.{u1} α _inst_1)))) (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (DivisionMonoid.toDivInvMonoid.{u1} α (DivisionCommMonoid.toDivisionMonoid.{u1} α _inst_1))))) (fun (_x : MonoidHom.{u1, u1} α α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (DivisionMonoid.toDivInvMonoid.{u1} α (DivisionCommMonoid.toDivisionMonoid.{u1} α _inst_1)))) (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (DivisionMonoid.toDivInvMonoid.{u1} α (DivisionCommMonoid.toDivisionMonoid.{u1} α _inst_1))))) => α -> α) (MonoidHom.hasCoeToFun.{u1, u1} α α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (DivisionMonoid.toDivInvMonoid.{u1} α (DivisionCommMonoid.toDivisionMonoid.{u1} α _inst_1)))) (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (DivisionMonoid.toDivInvMonoid.{u1} α (DivisionCommMonoid.toDivisionMonoid.{u1} α _inst_1))))) (invMonoidHom.{u1} α _inst_1) a) (Inv.inv.{u1} α (DivInvMonoid.toHasInv.{u1} α (DivisionMonoid.toDivInvMonoid.{u1} α (DivisionCommMonoid.toDivisionMonoid.{u1} α _inst_1))) a)
 but is expected to have type
-  forall {α : Type.{u1}} [_inst_1 : DivisionCommMonoid.{u1} α] (a : α), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : α) => α) a) (FunLike.coe.{succ u1, succ u1, succ u1} (MonoidHom.{u1, u1} α α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (DivisionMonoid.toDivInvMonoid.{u1} α (DivisionCommMonoid.toDivisionMonoid.{u1} α _inst_1)))) (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (DivisionMonoid.toDivInvMonoid.{u1} α (DivisionCommMonoid.toDivisionMonoid.{u1} α _inst_1))))) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : α) => α) _x) (MulHomClass.toFunLike.{u1, u1, u1} (MonoidHom.{u1, u1} α α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (DivisionMonoid.toDivInvMonoid.{u1} α (DivisionCommMonoid.toDivisionMonoid.{u1} α _inst_1)))) (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (DivisionMonoid.toDivInvMonoid.{u1} α (DivisionCommMonoid.toDivisionMonoid.{u1} α _inst_1))))) α α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (DivisionMonoid.toDivInvMonoid.{u1} α (DivisionCommMonoid.toDivisionMonoid.{u1} α _inst_1))))) (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (DivisionMonoid.toDivInvMonoid.{u1} α (DivisionCommMonoid.toDivisionMonoid.{u1} α _inst_1))))) (MonoidHomClass.toMulHomClass.{u1, u1, u1} (MonoidHom.{u1, u1} α α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (DivisionMonoid.toDivInvMonoid.{u1} α (DivisionCommMonoid.toDivisionMonoid.{u1} α _inst_1)))) (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (DivisionMonoid.toDivInvMonoid.{u1} α (DivisionCommMonoid.toDivisionMonoid.{u1} α _inst_1))))) α α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (DivisionMonoid.toDivInvMonoid.{u1} α (DivisionCommMonoid.toDivisionMonoid.{u1} α _inst_1)))) (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (DivisionMonoid.toDivInvMonoid.{u1} α (DivisionCommMonoid.toDivisionMonoid.{u1} α _inst_1)))) (MonoidHom.monoidHomClass.{u1, u1} α α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (DivisionMonoid.toDivInvMonoid.{u1} α (DivisionCommMonoid.toDivisionMonoid.{u1} α _inst_1)))) (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (DivisionMonoid.toDivInvMonoid.{u1} α (DivisionCommMonoid.toDivisionMonoid.{u1} α _inst_1))))))) (invMonoidHom.{u1} α _inst_1) a) (Inv.inv.{u1} α (InvOneClass.toInv.{u1} α (DivInvOneMonoid.toInvOneClass.{u1} α (DivisionMonoid.toDivInvOneMonoid.{u1} α (DivisionCommMonoid.toDivisionMonoid.{u1} α _inst_1)))) a)
+  forall {α : Type.{u1}} [_inst_1 : DivisionCommMonoid.{u1} α] (a : α), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : α) => α) a) (FunLike.coe.{succ u1, succ u1, succ u1} (MonoidHom.{u1, u1} α α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (DivisionMonoid.toDivInvMonoid.{u1} α (DivisionCommMonoid.toDivisionMonoid.{u1} α _inst_1)))) (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (DivisionMonoid.toDivInvMonoid.{u1} α (DivisionCommMonoid.toDivisionMonoid.{u1} α _inst_1))))) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : α) => α) _x) (MulHomClass.toFunLike.{u1, u1, u1} (MonoidHom.{u1, u1} α α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (DivisionMonoid.toDivInvMonoid.{u1} α (DivisionCommMonoid.toDivisionMonoid.{u1} α _inst_1)))) (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (DivisionMonoid.toDivInvMonoid.{u1} α (DivisionCommMonoid.toDivisionMonoid.{u1} α _inst_1))))) α α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (DivisionMonoid.toDivInvMonoid.{u1} α (DivisionCommMonoid.toDivisionMonoid.{u1} α _inst_1))))) (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (DivisionMonoid.toDivInvMonoid.{u1} α (DivisionCommMonoid.toDivisionMonoid.{u1} α _inst_1))))) (MonoidHomClass.toMulHomClass.{u1, u1, u1} (MonoidHom.{u1, u1} α α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (DivisionMonoid.toDivInvMonoid.{u1} α (DivisionCommMonoid.toDivisionMonoid.{u1} α _inst_1)))) (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (DivisionMonoid.toDivInvMonoid.{u1} α (DivisionCommMonoid.toDivisionMonoid.{u1} α _inst_1))))) α α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (DivisionMonoid.toDivInvMonoid.{u1} α (DivisionCommMonoid.toDivisionMonoid.{u1} α _inst_1)))) (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (DivisionMonoid.toDivInvMonoid.{u1} α (DivisionCommMonoid.toDivisionMonoid.{u1} α _inst_1)))) (MonoidHom.monoidHomClass.{u1, u1} α α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (DivisionMonoid.toDivInvMonoid.{u1} α (DivisionCommMonoid.toDivisionMonoid.{u1} α _inst_1)))) (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (DivisionMonoid.toDivInvMonoid.{u1} α (DivisionCommMonoid.toDivisionMonoid.{u1} α _inst_1))))))) (invMonoidHom.{u1} α _inst_1) a) (Inv.inv.{u1} α (InvOneClass.toInv.{u1} α (DivInvOneMonoid.toInvOneClass.{u1} α (DivisionMonoid.toDivInvOneMonoid.{u1} α (DivisionCommMonoid.toDivisionMonoid.{u1} α _inst_1)))) a)
 Case conversion may be inaccurate. Consider using '#align inv_monoid_hom_apply invMonoidHom_applyₓ'. -/
 @[simp]
 theorem invMonoidHom_apply (a : α) : invMonoidHom a = a⁻¹ :=
@@ -1632,7 +1632,7 @@ add_decl_doc AddMonoidHom.comp
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} {P : Type.{u3}} [_inst_1 : One.{u1} M] [_inst_2 : One.{u2} N] [_inst_3 : One.{u3} P] (g : OneHom.{u2, u3} N P _inst_2 _inst_3) (f : OneHom.{u1, u2} M N _inst_1 _inst_2), Eq.{max (succ u1) (succ u3)} (M -> P) (coeFn.{max (succ u3) (succ u1), max (succ u1) (succ u3)} (OneHom.{u1, u3} M P _inst_1 _inst_3) (fun (_x : OneHom.{u1, u3} M P _inst_1 _inst_3) => M -> P) (OneHom.hasCoeToFun.{u1, u3} M P _inst_1 _inst_3) (OneHom.comp.{u1, u2, u3} M N P _inst_1 _inst_2 _inst_3 g f)) (Function.comp.{succ u1, succ u2, succ u3} M N P (coeFn.{max (succ u3) (succ u2), max (succ u2) (succ u3)} (OneHom.{u2, u3} N P _inst_2 _inst_3) (fun (_x : OneHom.{u2, u3} N P _inst_2 _inst_3) => N -> P) (OneHom.hasCoeToFun.{u2, u3} N P _inst_2 _inst_3) g) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (OneHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : OneHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (OneHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f))
 but is expected to have type
-  forall {M : Type.{u3}} {N : Type.{u2}} {P : Type.{u1}} [_inst_1 : One.{u3} M] [_inst_2 : One.{u2} N] [_inst_3 : One.{u1} P] (g : OneHom.{u2, u1} N P _inst_2 _inst_3) (f : OneHom.{u3, u2} M N _inst_1 _inst_2), Eq.{max (succ u3) (succ u1)} (M -> P) (FunLike.coe.{max (succ u3) (succ u1), succ u3, succ u1} (OneHom.{u3, u1} M P _inst_1 _inst_3) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1254 : M) => P) _x) (OneHomClass.toFunLike.{max u3 u1, u3, u1} (OneHom.{u3, u1} M P _inst_1 _inst_3) M P _inst_1 _inst_3 (OneHom.oneHomClass.{u3, u1} M P _inst_1 _inst_3)) (OneHom.comp.{u3, u2, u1} M N P _inst_1 _inst_2 _inst_3 g f)) (Function.comp.{succ u3, succ u2, succ u1} M N P (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (OneHom.{u2, u1} N P _inst_2 _inst_3) N (fun (_x : N) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1254 : N) => P) _x) (OneHomClass.toFunLike.{max u2 u1, u2, u1} (OneHom.{u2, u1} N P _inst_2 _inst_3) N P _inst_2 _inst_3 (OneHom.oneHomClass.{u2, u1} N P _inst_2 _inst_3)) g) (FunLike.coe.{max (succ u3) (succ u2), succ u3, succ u2} (OneHom.{u3, u2} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1254 : M) => N) _x) (OneHomClass.toFunLike.{max u3 u2, u3, u2} (OneHom.{u3, u2} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (OneHom.oneHomClass.{u3, u2} M N _inst_1 _inst_2)) f))
+  forall {M : Type.{u3}} {N : Type.{u2}} {P : Type.{u1}} [_inst_1 : One.{u3} M] [_inst_2 : One.{u2} N] [_inst_3 : One.{u1} P] (g : OneHom.{u2, u1} N P _inst_2 _inst_3) (f : OneHom.{u3, u2} M N _inst_1 _inst_2), Eq.{max (succ u3) (succ u1)} (M -> P) (FunLike.coe.{max (succ u3) (succ u1), succ u3, succ u1} (OneHom.{u3, u1} M P _inst_1 _inst_3) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1262 : M) => P) _x) (OneHomClass.toFunLike.{max u3 u1, u3, u1} (OneHom.{u3, u1} M P _inst_1 _inst_3) M P _inst_1 _inst_3 (OneHom.oneHomClass.{u3, u1} M P _inst_1 _inst_3)) (OneHom.comp.{u3, u2, u1} M N P _inst_1 _inst_2 _inst_3 g f)) (Function.comp.{succ u3, succ u2, succ u1} M N P (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (OneHom.{u2, u1} N P _inst_2 _inst_3) N (fun (_x : N) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1262 : N) => P) _x) (OneHomClass.toFunLike.{max u2 u1, u2, u1} (OneHom.{u2, u1} N P _inst_2 _inst_3) N P _inst_2 _inst_3 (OneHom.oneHomClass.{u2, u1} N P _inst_2 _inst_3)) g) (FunLike.coe.{max (succ u3) (succ u2), succ u3, succ u2} (OneHom.{u3, u2} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1262 : M) => N) _x) (OneHomClass.toFunLike.{max u3 u2, u3, u2} (OneHom.{u3, u2} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (OneHom.oneHomClass.{u3, u2} M N _inst_1 _inst_2)) f))
 Case conversion may be inaccurate. Consider using '#align one_hom.coe_comp OneHom.coe_compₓ'. -/
 @[simp, to_additive]
 theorem OneHom.coe_comp [One M] [One N] [One P] (g : OneHom N P) (f : OneHom M N) :
@@ -1645,7 +1645,7 @@ theorem OneHom.coe_comp [One M] [One N] [One P] (g : OneHom N P) (f : OneHom M N
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} {P : Type.{u3}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] [_inst_3 : Mul.{u3} P] (g : MulHom.{u2, u3} N P _inst_2 _inst_3) (f : MulHom.{u1, u2} M N _inst_1 _inst_2), Eq.{max (succ u1) (succ u3)} (M -> P) (coeFn.{max (succ u3) (succ u1), max (succ u1) (succ u3)} (MulHom.{u1, u3} M P _inst_1 _inst_3) (fun (_x : MulHom.{u1, u3} M P _inst_1 _inst_3) => M -> P) (MulHom.hasCoeToFun.{u1, u3} M P _inst_1 _inst_3) (MulHom.comp.{u1, u2, u3} M N P _inst_1 _inst_2 _inst_3 g f)) (Function.comp.{succ u1, succ u2, succ u3} M N P (coeFn.{max (succ u3) (succ u2), max (succ u2) (succ u3)} (MulHom.{u2, u3} N P _inst_2 _inst_3) (fun (_x : MulHom.{u2, u3} N P _inst_2 _inst_3) => N -> P) (MulHom.hasCoeToFun.{u2, u3} N P _inst_2 _inst_3) g) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MulHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MulHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MulHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f))
 but is expected to have type
-  forall {M : Type.{u3}} {N : Type.{u2}} {P : Type.{u1}} [_inst_1 : Mul.{u3} M] [_inst_2 : Mul.{u2} N] [_inst_3 : Mul.{u1} P] (g : MulHom.{u2, u1} N P _inst_2 _inst_3) (f : MulHom.{u3, u2} M N _inst_1 _inst_2), Eq.{max (succ u3) (succ u1)} (M -> P) (FunLike.coe.{max (succ u3) (succ u1), succ u3, succ u1} (MulHom.{u3, u1} M P _inst_1 _inst_3) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => P) _x) (MulHomClass.toFunLike.{max u3 u1, u3, u1} (MulHom.{u3, u1} M P _inst_1 _inst_3) M P _inst_1 _inst_3 (MulHom.mulHomClass.{u3, u1} M P _inst_1 _inst_3)) (MulHom.comp.{u3, u2, u1} M N P _inst_1 _inst_2 _inst_3 g f)) (Function.comp.{succ u3, succ u2, succ u1} M N P (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} N P _inst_2 _inst_3) N (fun (_x : N) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : N) => P) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} N P _inst_2 _inst_3) N P _inst_2 _inst_3 (MulHom.mulHomClass.{u2, u1} N P _inst_2 _inst_3)) g) (FunLike.coe.{max (succ u3) (succ u2), succ u3, succ u2} (MulHom.{u3, u2} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{max u3 u2, u3, u2} (MulHom.{u3, u2} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u3, u2} M N _inst_1 _inst_2)) f))
+  forall {M : Type.{u3}} {N : Type.{u2}} {P : Type.{u1}} [_inst_1 : Mul.{u3} M] [_inst_2 : Mul.{u2} N] [_inst_3 : Mul.{u1} P] (g : MulHom.{u2, u1} N P _inst_2 _inst_3) (f : MulHom.{u3, u2} M N _inst_1 _inst_2), Eq.{max (succ u3) (succ u1)} (M -> P) (FunLike.coe.{max (succ u3) (succ u1), succ u3, succ u1} (MulHom.{u3, u1} M P _inst_1 _inst_3) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => P) _x) (MulHomClass.toFunLike.{max u3 u1, u3, u1} (MulHom.{u3, u1} M P _inst_1 _inst_3) M P _inst_1 _inst_3 (MulHom.mulHomClass.{u3, u1} M P _inst_1 _inst_3)) (MulHom.comp.{u3, u2, u1} M N P _inst_1 _inst_2 _inst_3 g f)) (Function.comp.{succ u3, succ u2, succ u1} M N P (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} N P _inst_2 _inst_3) N (fun (_x : N) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : N) => P) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} N P _inst_2 _inst_3) N P _inst_2 _inst_3 (MulHom.mulHomClass.{u2, u1} N P _inst_2 _inst_3)) g) (FunLike.coe.{max (succ u3) (succ u2), succ u3, succ u2} (MulHom.{u3, u2} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{max u3 u2, u3, u2} (MulHom.{u3, u2} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u3, u2} M N _inst_1 _inst_2)) f))
 Case conversion may be inaccurate. Consider using '#align mul_hom.coe_comp MulHom.coe_compₓ'. -/
 @[simp, to_additive]
 theorem MulHom.coe_comp [Mul M] [Mul N] [Mul P] (g : N →ₙ* P) (f : M →ₙ* N) : ⇑(g.comp f) = g ∘ f :=
@@ -1657,7 +1657,7 @@ theorem MulHom.coe_comp [Mul M] [Mul N] [Mul P] (g : N →ₙ* P) (f : M →ₙ*
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} {P : Type.{u3}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N] [_inst_3 : MulOneClass.{u3} P] (g : MonoidHom.{u2, u3} N P _inst_2 _inst_3) (f : MonoidHom.{u1, u2} M N _inst_1 _inst_2), Eq.{max (succ u1) (succ u3)} (M -> P) (coeFn.{max (succ u3) (succ u1), max (succ u1) (succ u3)} (MonoidHom.{u1, u3} M P _inst_1 _inst_3) (fun (_x : MonoidHom.{u1, u3} M P _inst_1 _inst_3) => M -> P) (MonoidHom.hasCoeToFun.{u1, u3} M P _inst_1 _inst_3) (MonoidHom.comp.{u1, u2, u3} M N P _inst_1 _inst_2 _inst_3 g f)) (Function.comp.{succ u1, succ u2, succ u3} M N P (coeFn.{max (succ u3) (succ u2), max (succ u2) (succ u3)} (MonoidHom.{u2, u3} N P _inst_2 _inst_3) (fun (_x : MonoidHom.{u2, u3} N P _inst_2 _inst_3) => N -> P) (MonoidHom.hasCoeToFun.{u2, u3} N P _inst_2 _inst_3) g) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MonoidHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MonoidHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f))
 but is expected to have type
-  forall {M : Type.{u3}} {N : Type.{u2}} {P : Type.{u1}} [_inst_1 : MulOneClass.{u3} M] [_inst_2 : MulOneClass.{u2} N] [_inst_3 : MulOneClass.{u1} P] (g : MonoidHom.{u2, u1} N P _inst_2 _inst_3) (f : MonoidHom.{u3, u2} M N _inst_1 _inst_2), Eq.{max (succ u3) (succ u1)} (M -> P) (FunLike.coe.{max (succ u3) (succ u1), succ u3, succ u1} (MonoidHom.{u3, u1} M P _inst_1 _inst_3) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => P) _x) (MulHomClass.toFunLike.{max u3 u1, u3, u1} (MonoidHom.{u3, u1} M P _inst_1 _inst_3) M P (MulOneClass.toMul.{u3} M _inst_1) (MulOneClass.toMul.{u1} P _inst_3) (MonoidHomClass.toMulHomClass.{max u3 u1, u3, u1} (MonoidHom.{u3, u1} M P _inst_1 _inst_3) M P _inst_1 _inst_3 (MonoidHom.monoidHomClass.{u3, u1} M P _inst_1 _inst_3))) (MonoidHom.comp.{u3, u2, u1} M N P _inst_1 _inst_2 _inst_3 g f)) (Function.comp.{succ u3, succ u2, succ u1} M N P (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} N P _inst_2 _inst_3) N (fun (_x : N) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : N) => P) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} N P _inst_2 _inst_3) N P (MulOneClass.toMul.{u2} N _inst_2) (MulOneClass.toMul.{u1} P _inst_3) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} N P _inst_2 _inst_3) N P _inst_2 _inst_3 (MonoidHom.monoidHomClass.{u2, u1} N P _inst_2 _inst_3))) g) (FunLike.coe.{max (succ u3) (succ u2), succ u3, succ u2} (MonoidHom.{u3, u2} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{max u3 u2, u3, u2} (MonoidHom.{u3, u2} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u3} M _inst_1) (MulOneClass.toMul.{u2} N _inst_2) (MonoidHomClass.toMulHomClass.{max u3 u2, u3, u2} (MonoidHom.{u3, u2} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidHom.monoidHomClass.{u3, u2} M N _inst_1 _inst_2))) f))
+  forall {M : Type.{u3}} {N : Type.{u2}} {P : Type.{u1}} [_inst_1 : MulOneClass.{u3} M] [_inst_2 : MulOneClass.{u2} N] [_inst_3 : MulOneClass.{u1} P] (g : MonoidHom.{u2, u1} N P _inst_2 _inst_3) (f : MonoidHom.{u3, u2} M N _inst_1 _inst_2), Eq.{max (succ u3) (succ u1)} (M -> P) (FunLike.coe.{max (succ u3) (succ u1), succ u3, succ u1} (MonoidHom.{u3, u1} M P _inst_1 _inst_3) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => P) _x) (MulHomClass.toFunLike.{max u3 u1, u3, u1} (MonoidHom.{u3, u1} M P _inst_1 _inst_3) M P (MulOneClass.toMul.{u3} M _inst_1) (MulOneClass.toMul.{u1} P _inst_3) (MonoidHomClass.toMulHomClass.{max u3 u1, u3, u1} (MonoidHom.{u3, u1} M P _inst_1 _inst_3) M P _inst_1 _inst_3 (MonoidHom.monoidHomClass.{u3, u1} M P _inst_1 _inst_3))) (MonoidHom.comp.{u3, u2, u1} M N P _inst_1 _inst_2 _inst_3 g f)) (Function.comp.{succ u3, succ u2, succ u1} M N P (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} N P _inst_2 _inst_3) N (fun (_x : N) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : N) => P) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} N P _inst_2 _inst_3) N P (MulOneClass.toMul.{u2} N _inst_2) (MulOneClass.toMul.{u1} P _inst_3) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} N P _inst_2 _inst_3) N P _inst_2 _inst_3 (MonoidHom.monoidHomClass.{u2, u1} N P _inst_2 _inst_3))) g) (FunLike.coe.{max (succ u3) (succ u2), succ u3, succ u2} (MonoidHom.{u3, u2} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{max u3 u2, u3, u2} (MonoidHom.{u3, u2} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u3} M _inst_1) (MulOneClass.toMul.{u2} N _inst_2) (MonoidHomClass.toMulHomClass.{max u3 u2, u3, u2} (MonoidHom.{u3, u2} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidHom.monoidHomClass.{u3, u2} M N _inst_1 _inst_2))) f))
 Case conversion may be inaccurate. Consider using '#align monoid_hom.coe_comp MonoidHom.coe_compₓ'. -/
 @[simp, to_additive]
 theorem MonoidHom.coe_comp [MulOneClass M] [MulOneClass N] [MulOneClass P] (g : N →* P)
@@ -1670,7 +1670,7 @@ theorem MonoidHom.coe_comp [MulOneClass M] [MulOneClass N] [MulOneClass P] (g :
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} {P : Type.{u3}} [_inst_1 : MulZeroOneClass.{u1} M] [_inst_2 : MulZeroOneClass.{u2} N] [_inst_3 : MulZeroOneClass.{u3} P] (g : MonoidWithZeroHom.{u2, u3} N P _inst_2 _inst_3) (f : MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2), Eq.{max (succ u1) (succ u3)} (M -> P) (coeFn.{max (succ u3) (succ u1), max (succ u1) (succ u3)} (MonoidWithZeroHom.{u1, u3} M P _inst_1 _inst_3) (fun (_x : MonoidWithZeroHom.{u1, u3} M P _inst_1 _inst_3) => M -> P) (MonoidWithZeroHom.hasCoeToFun.{u1, u3} M P _inst_1 _inst_3) (MonoidWithZeroHom.comp.{u1, u2, u3} M N P _inst_1 _inst_2 _inst_3 g f)) (Function.comp.{succ u1, succ u2, succ u3} M N P (coeFn.{max (succ u3) (succ u2), max (succ u2) (succ u3)} (MonoidWithZeroHom.{u2, u3} N P _inst_2 _inst_3) (fun (_x : MonoidWithZeroHom.{u2, u3} N P _inst_2 _inst_3) => N -> P) (MonoidWithZeroHom.hasCoeToFun.{u2, u3} N P _inst_2 _inst_3) g) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MonoidWithZeroHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f))
 but is expected to have type
-  forall {M : Type.{u3}} {N : Type.{u2}} {P : Type.{u1}} [_inst_1 : MulZeroOneClass.{u3} M] [_inst_2 : MulZeroOneClass.{u2} N] [_inst_3 : MulZeroOneClass.{u1} P] (g : MonoidWithZeroHom.{u2, u1} N P _inst_2 _inst_3) (f : MonoidWithZeroHom.{u3, u2} M N _inst_1 _inst_2), Eq.{max (succ u3) (succ u1)} (M -> P) (FunLike.coe.{max (succ u3) (succ u1), succ u3, succ u1} (MonoidWithZeroHom.{u3, u1} M P _inst_1 _inst_3) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => P) _x) (MulHomClass.toFunLike.{max u3 u1, u3, u1} (MonoidWithZeroHom.{u3, u1} M P _inst_1 _inst_3) M P (MulOneClass.toMul.{u3} M (MulZeroOneClass.toMulOneClass.{u3} M _inst_1)) (MulOneClass.toMul.{u1} P (MulZeroOneClass.toMulOneClass.{u1} P _inst_3)) (MonoidHomClass.toMulHomClass.{max u3 u1, u3, u1} (MonoidWithZeroHom.{u3, u1} M P _inst_1 _inst_3) M P (MulZeroOneClass.toMulOneClass.{u3} M _inst_1) (MulZeroOneClass.toMulOneClass.{u1} P _inst_3) (MonoidWithZeroHomClass.toMonoidHomClass.{max u3 u1, u3, u1} (MonoidWithZeroHom.{u3, u1} M P _inst_1 _inst_3) M P _inst_1 _inst_3 (MonoidWithZeroHom.monoidWithZeroHomClass.{u3, u1} M P _inst_1 _inst_3)))) (MonoidWithZeroHom.comp.{u3, u2, u1} M N P _inst_1 _inst_2 _inst_3 g f)) (Function.comp.{succ u3, succ u2, succ u1} M N P (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidWithZeroHom.{u2, u1} N P _inst_2 _inst_3) N (fun (_x : N) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : N) => P) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} N P _inst_2 _inst_3) N P (MulOneClass.toMul.{u2} N (MulZeroOneClass.toMulOneClass.{u2} N _inst_2)) (MulOneClass.toMul.{u1} P (MulZeroOneClass.toMulOneClass.{u1} P _inst_3)) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} N P _inst_2 _inst_3) N P (MulZeroOneClass.toMulOneClass.{u2} N _inst_2) (MulZeroOneClass.toMulOneClass.{u1} P _inst_3) (MonoidWithZeroHomClass.toMonoidHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} N P _inst_2 _inst_3) N P _inst_2 _inst_3 (MonoidWithZeroHom.monoidWithZeroHomClass.{u2, u1} N P _inst_2 _inst_3)))) g) (FunLike.coe.{max (succ u3) (succ u2), succ u3, succ u2} (MonoidWithZeroHom.{u3, u2} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{max u3 u2, u3, u2} (MonoidWithZeroHom.{u3, u2} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u3} M (MulZeroOneClass.toMulOneClass.{u3} M _inst_1)) (MulOneClass.toMul.{u2} N (MulZeroOneClass.toMulOneClass.{u2} N _inst_2)) (MonoidHomClass.toMulHomClass.{max u3 u2, u3, u2} (MonoidWithZeroHom.{u3, u2} M N _inst_1 _inst_2) M N (MulZeroOneClass.toMulOneClass.{u3} M _inst_1) (MulZeroOneClass.toMulOneClass.{u2} N _inst_2) (MonoidWithZeroHomClass.toMonoidHomClass.{max u3 u2, u3, u2} (MonoidWithZeroHom.{u3, u2} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidWithZeroHom.monoidWithZeroHomClass.{u3, u2} M N _inst_1 _inst_2)))) f))
+  forall {M : Type.{u3}} {N : Type.{u2}} {P : Type.{u1}} [_inst_1 : MulZeroOneClass.{u3} M] [_inst_2 : MulZeroOneClass.{u2} N] [_inst_3 : MulZeroOneClass.{u1} P] (g : MonoidWithZeroHom.{u2, u1} N P _inst_2 _inst_3) (f : MonoidWithZeroHom.{u3, u2} M N _inst_1 _inst_2), Eq.{max (succ u3) (succ u1)} (M -> P) (FunLike.coe.{max (succ u3) (succ u1), succ u3, succ u1} (MonoidWithZeroHom.{u3, u1} M P _inst_1 _inst_3) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => P) _x) (MulHomClass.toFunLike.{max u3 u1, u3, u1} (MonoidWithZeroHom.{u3, u1} M P _inst_1 _inst_3) M P (MulOneClass.toMul.{u3} M (MulZeroOneClass.toMulOneClass.{u3} M _inst_1)) (MulOneClass.toMul.{u1} P (MulZeroOneClass.toMulOneClass.{u1} P _inst_3)) (MonoidHomClass.toMulHomClass.{max u3 u1, u3, u1} (MonoidWithZeroHom.{u3, u1} M P _inst_1 _inst_3) M P (MulZeroOneClass.toMulOneClass.{u3} M _inst_1) (MulZeroOneClass.toMulOneClass.{u1} P _inst_3) (MonoidWithZeroHomClass.toMonoidHomClass.{max u3 u1, u3, u1} (MonoidWithZeroHom.{u3, u1} M P _inst_1 _inst_3) M P _inst_1 _inst_3 (MonoidWithZeroHom.monoidWithZeroHomClass.{u3, u1} M P _inst_1 _inst_3)))) (MonoidWithZeroHom.comp.{u3, u2, u1} M N P _inst_1 _inst_2 _inst_3 g f)) (Function.comp.{succ u3, succ u2, succ u1} M N P (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidWithZeroHom.{u2, u1} N P _inst_2 _inst_3) N (fun (_x : N) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : N) => P) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} N P _inst_2 _inst_3) N P (MulOneClass.toMul.{u2} N (MulZeroOneClass.toMulOneClass.{u2} N _inst_2)) (MulOneClass.toMul.{u1} P (MulZeroOneClass.toMulOneClass.{u1} P _inst_3)) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} N P _inst_2 _inst_3) N P (MulZeroOneClass.toMulOneClass.{u2} N _inst_2) (MulZeroOneClass.toMulOneClass.{u1} P _inst_3) (MonoidWithZeroHomClass.toMonoidHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} N P _inst_2 _inst_3) N P _inst_2 _inst_3 (MonoidWithZeroHom.monoidWithZeroHomClass.{u2, u1} N P _inst_2 _inst_3)))) g) (FunLike.coe.{max (succ u3) (succ u2), succ u3, succ u2} (MonoidWithZeroHom.{u3, u2} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{max u3 u2, u3, u2} (MonoidWithZeroHom.{u3, u2} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u3} M (MulZeroOneClass.toMulOneClass.{u3} M _inst_1)) (MulOneClass.toMul.{u2} N (MulZeroOneClass.toMulOneClass.{u2} N _inst_2)) (MonoidHomClass.toMulHomClass.{max u3 u2, u3, u2} (MonoidWithZeroHom.{u3, u2} M N _inst_1 _inst_2) M N (MulZeroOneClass.toMulOneClass.{u3} M _inst_1) (MulZeroOneClass.toMulOneClass.{u2} N _inst_2) (MonoidWithZeroHomClass.toMonoidHomClass.{max u3 u2, u3, u2} (MonoidWithZeroHom.{u3, u2} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidWithZeroHom.monoidWithZeroHomClass.{u3, u2} M N _inst_1 _inst_2)))) f))
 Case conversion may be inaccurate. Consider using '#align monoid_with_zero_hom.coe_comp MonoidWithZeroHom.coe_compₓ'. -/
 @[simp]
 theorem MonoidWithZeroHom.coe_comp [MulZeroOneClass M] [MulZeroOneClass N] [MulZeroOneClass P]
@@ -1682,7 +1682,7 @@ theorem MonoidWithZeroHom.coe_comp [MulZeroOneClass M] [MulZeroOneClass N] [MulZ
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} {P : Type.{u3}} [_inst_1 : One.{u1} M] [_inst_2 : One.{u2} N] [_inst_3 : One.{u3} P] (g : OneHom.{u2, u3} N P _inst_2 _inst_3) (f : OneHom.{u1, u2} M N _inst_1 _inst_2) (x : M), Eq.{succ u3} P (coeFn.{max (succ u3) (succ u1), max (succ u1) (succ u3)} (OneHom.{u1, u3} M P _inst_1 _inst_3) (fun (_x : OneHom.{u1, u3} M P _inst_1 _inst_3) => M -> P) (OneHom.hasCoeToFun.{u1, u3} M P _inst_1 _inst_3) (OneHom.comp.{u1, u2, u3} M N P _inst_1 _inst_2 _inst_3 g f) x) (coeFn.{max (succ u3) (succ u2), max (succ u2) (succ u3)} (OneHom.{u2, u3} N P _inst_2 _inst_3) (fun (_x : OneHom.{u2, u3} N P _inst_2 _inst_3) => N -> P) (OneHom.hasCoeToFun.{u2, u3} N P _inst_2 _inst_3) g (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (OneHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : OneHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (OneHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f x))
 but is expected to have type
-  forall {M : Type.{u3}} {N : Type.{u2}} {P : Type.{u1}} [_inst_1 : One.{u3} M] [_inst_2 : One.{u2} N] [_inst_3 : One.{u1} P] (g : OneHom.{u2, u1} N P _inst_2 _inst_3) (f : OneHom.{u3, u2} M N _inst_1 _inst_2) (x : M), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1254 : M) => P) x) (FunLike.coe.{max (succ u3) (succ u1), succ u3, succ u1} (OneHom.{u3, u1} M P _inst_1 _inst_3) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1254 : M) => P) _x) (OneHomClass.toFunLike.{max u3 u1, u3, u1} (OneHom.{u3, u1} M P _inst_1 _inst_3) M P _inst_1 _inst_3 (OneHom.oneHomClass.{u3, u1} M P _inst_1 _inst_3)) (OneHom.comp.{u3, u2, u1} M N P _inst_1 _inst_2 _inst_3 g f) x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (OneHom.{u2, u1} N P _inst_2 _inst_3) N (fun (_x : N) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1254 : N) => P) _x) (OneHomClass.toFunLike.{max u2 u1, u2, u1} (OneHom.{u2, u1} N P _inst_2 _inst_3) N P _inst_2 _inst_3 (OneHom.oneHomClass.{u2, u1} N P _inst_2 _inst_3)) g (FunLike.coe.{max (succ u3) (succ u2), succ u3, succ u2} (OneHom.{u3, u2} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1254 : M) => N) _x) (OneHomClass.toFunLike.{max u3 u2, u3, u2} (OneHom.{u3, u2} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (OneHom.oneHomClass.{u3, u2} M N _inst_1 _inst_2)) f x))
+  forall {M : Type.{u3}} {N : Type.{u2}} {P : Type.{u1}} [_inst_1 : One.{u3} M] [_inst_2 : One.{u2} N] [_inst_3 : One.{u1} P] (g : OneHom.{u2, u1} N P _inst_2 _inst_3) (f : OneHom.{u3, u2} M N _inst_1 _inst_2) (x : M), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1262 : M) => P) x) (FunLike.coe.{max (succ u3) (succ u1), succ u3, succ u1} (OneHom.{u3, u1} M P _inst_1 _inst_3) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1262 : M) => P) _x) (OneHomClass.toFunLike.{max u3 u1, u3, u1} (OneHom.{u3, u1} M P _inst_1 _inst_3) M P _inst_1 _inst_3 (OneHom.oneHomClass.{u3, u1} M P _inst_1 _inst_3)) (OneHom.comp.{u3, u2, u1} M N P _inst_1 _inst_2 _inst_3 g f) x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (OneHom.{u2, u1} N P _inst_2 _inst_3) N (fun (_x : N) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1262 : N) => P) _x) (OneHomClass.toFunLike.{max u2 u1, u2, u1} (OneHom.{u2, u1} N P _inst_2 _inst_3) N P _inst_2 _inst_3 (OneHom.oneHomClass.{u2, u1} N P _inst_2 _inst_3)) g (FunLike.coe.{max (succ u3) (succ u2), succ u3, succ u2} (OneHom.{u3, u2} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1262 : M) => N) _x) (OneHomClass.toFunLike.{max u3 u2, u3, u2} (OneHom.{u3, u2} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (OneHom.oneHomClass.{u3, u2} M N _inst_1 _inst_2)) f x))
 Case conversion may be inaccurate. Consider using '#align one_hom.comp_apply OneHom.comp_applyₓ'. -/
 @[to_additive]
 theorem OneHom.comp_apply [One M] [One N] [One P] (g : OneHom N P) (f : OneHom M N) (x : M) :
@@ -1695,7 +1695,7 @@ theorem OneHom.comp_apply [One M] [One N] [One P] (g : OneHom N P) (f : OneHom M
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} {P : Type.{u3}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] [_inst_3 : Mul.{u3} P] (g : MulHom.{u2, u3} N P _inst_2 _inst_3) (f : MulHom.{u1, u2} M N _inst_1 _inst_2) (x : M), Eq.{succ u3} P (coeFn.{max (succ u3) (succ u1), max (succ u1) (succ u3)} (MulHom.{u1, u3} M P _inst_1 _inst_3) (fun (_x : MulHom.{u1, u3} M P _inst_1 _inst_3) => M -> P) (MulHom.hasCoeToFun.{u1, u3} M P _inst_1 _inst_3) (MulHom.comp.{u1, u2, u3} M N P _inst_1 _inst_2 _inst_3 g f) x) (coeFn.{max (succ u3) (succ u2), max (succ u2) (succ u3)} (MulHom.{u2, u3} N P _inst_2 _inst_3) (fun (_x : MulHom.{u2, u3} N P _inst_2 _inst_3) => N -> P) (MulHom.hasCoeToFun.{u2, u3} N P _inst_2 _inst_3) g (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MulHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MulHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MulHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f x))
 but is expected to have type
-  forall {M : Type.{u3}} {N : Type.{u2}} {P : Type.{u1}} [_inst_1 : Mul.{u3} M] [_inst_2 : Mul.{u2} N] [_inst_3 : Mul.{u1} P] (g : MulHom.{u2, u1} N P _inst_2 _inst_3) (f : MulHom.{u3, u2} M N _inst_1 _inst_2) (x : M), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => P) x) (FunLike.coe.{max (succ u3) (succ u1), succ u3, succ u1} (MulHom.{u3, u1} M P _inst_1 _inst_3) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => P) _x) (MulHomClass.toFunLike.{max u3 u1, u3, u1} (MulHom.{u3, u1} M P _inst_1 _inst_3) M P _inst_1 _inst_3 (MulHom.mulHomClass.{u3, u1} M P _inst_1 _inst_3)) (MulHom.comp.{u3, u2, u1} M N P _inst_1 _inst_2 _inst_3 g f) x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} N P _inst_2 _inst_3) N (fun (_x : N) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : N) => P) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} N P _inst_2 _inst_3) N P _inst_2 _inst_3 (MulHom.mulHomClass.{u2, u1} N P _inst_2 _inst_3)) g (FunLike.coe.{max (succ u3) (succ u2), succ u3, succ u2} (MulHom.{u3, u2} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{max u3 u2, u3, u2} (MulHom.{u3, u2} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u3, u2} M N _inst_1 _inst_2)) f x))
+  forall {M : Type.{u3}} {N : Type.{u2}} {P : Type.{u1}} [_inst_1 : Mul.{u3} M] [_inst_2 : Mul.{u2} N] [_inst_3 : Mul.{u1} P] (g : MulHom.{u2, u1} N P _inst_2 _inst_3) (f : MulHom.{u3, u2} M N _inst_1 _inst_2) (x : M), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => P) x) (FunLike.coe.{max (succ u3) (succ u1), succ u3, succ u1} (MulHom.{u3, u1} M P _inst_1 _inst_3) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => P) _x) (MulHomClass.toFunLike.{max u3 u1, u3, u1} (MulHom.{u3, u1} M P _inst_1 _inst_3) M P _inst_1 _inst_3 (MulHom.mulHomClass.{u3, u1} M P _inst_1 _inst_3)) (MulHom.comp.{u3, u2, u1} M N P _inst_1 _inst_2 _inst_3 g f) x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} N P _inst_2 _inst_3) N (fun (_x : N) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : N) => P) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} N P _inst_2 _inst_3) N P _inst_2 _inst_3 (MulHom.mulHomClass.{u2, u1} N P _inst_2 _inst_3)) g (FunLike.coe.{max (succ u3) (succ u2), succ u3, succ u2} (MulHom.{u3, u2} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{max u3 u2, u3, u2} (MulHom.{u3, u2} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u3, u2} M N _inst_1 _inst_2)) f x))
 Case conversion may be inaccurate. Consider using '#align mul_hom.comp_apply MulHom.comp_applyₓ'. -/
 @[to_additive]
 theorem MulHom.comp_apply [Mul M] [Mul N] [Mul P] (g : N →ₙ* P) (f : M →ₙ* N) (x : M) :
@@ -1708,7 +1708,7 @@ theorem MulHom.comp_apply [Mul M] [Mul N] [Mul P] (g : N →ₙ* P) (f : M →
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} {P : Type.{u3}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N] [_inst_3 : MulOneClass.{u3} P] (g : MonoidHom.{u2, u3} N P _inst_2 _inst_3) (f : MonoidHom.{u1, u2} M N _inst_1 _inst_2) (x : M), Eq.{succ u3} P (coeFn.{max (succ u3) (succ u1), max (succ u1) (succ u3)} (MonoidHom.{u1, u3} M P _inst_1 _inst_3) (fun (_x : MonoidHom.{u1, u3} M P _inst_1 _inst_3) => M -> P) (MonoidHom.hasCoeToFun.{u1, u3} M P _inst_1 _inst_3) (MonoidHom.comp.{u1, u2, u3} M N P _inst_1 _inst_2 _inst_3 g f) x) (coeFn.{max (succ u3) (succ u2), max (succ u2) (succ u3)} (MonoidHom.{u2, u3} N P _inst_2 _inst_3) (fun (_x : MonoidHom.{u2, u3} N P _inst_2 _inst_3) => N -> P) (MonoidHom.hasCoeToFun.{u2, u3} N P _inst_2 _inst_3) g (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MonoidHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MonoidHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f x))
 but is expected to have type
-  forall {M : Type.{u3}} {N : Type.{u2}} {P : Type.{u1}} [_inst_1 : MulOneClass.{u3} M] [_inst_2 : MulOneClass.{u2} N] [_inst_3 : MulOneClass.{u1} P] (g : MonoidHom.{u2, u1} N P _inst_2 _inst_3) (f : MonoidHom.{u3, u2} M N _inst_1 _inst_2) (x : M), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => P) x) (FunLike.coe.{max (succ u3) (succ u1), succ u3, succ u1} (MonoidHom.{u3, u1} M P _inst_1 _inst_3) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => P) _x) (MulHomClass.toFunLike.{max u3 u1, u3, u1} (MonoidHom.{u3, u1} M P _inst_1 _inst_3) M P (MulOneClass.toMul.{u3} M _inst_1) (MulOneClass.toMul.{u1} P _inst_3) (MonoidHomClass.toMulHomClass.{max u3 u1, u3, u1} (MonoidHom.{u3, u1} M P _inst_1 _inst_3) M P _inst_1 _inst_3 (MonoidHom.monoidHomClass.{u3, u1} M P _inst_1 _inst_3))) (MonoidHom.comp.{u3, u2, u1} M N P _inst_1 _inst_2 _inst_3 g f) x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} N P _inst_2 _inst_3) N (fun (_x : N) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : N) => P) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} N P _inst_2 _inst_3) N P (MulOneClass.toMul.{u2} N _inst_2) (MulOneClass.toMul.{u1} P _inst_3) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} N P _inst_2 _inst_3) N P _inst_2 _inst_3 (MonoidHom.monoidHomClass.{u2, u1} N P _inst_2 _inst_3))) g (FunLike.coe.{max (succ u3) (succ u2), succ u3, succ u2} (MonoidHom.{u3, u2} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{max u3 u2, u3, u2} (MonoidHom.{u3, u2} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u3} M _inst_1) (MulOneClass.toMul.{u2} N _inst_2) (MonoidHomClass.toMulHomClass.{max u3 u2, u3, u2} (MonoidHom.{u3, u2} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidHom.monoidHomClass.{u3, u2} M N _inst_1 _inst_2))) f x))
+  forall {M : Type.{u3}} {N : Type.{u2}} {P : Type.{u1}} [_inst_1 : MulOneClass.{u3} M] [_inst_2 : MulOneClass.{u2} N] [_inst_3 : MulOneClass.{u1} P] (g : MonoidHom.{u2, u1} N P _inst_2 _inst_3) (f : MonoidHom.{u3, u2} M N _inst_1 _inst_2) (x : M), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => P) x) (FunLike.coe.{max (succ u3) (succ u1), succ u3, succ u1} (MonoidHom.{u3, u1} M P _inst_1 _inst_3) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => P) _x) (MulHomClass.toFunLike.{max u3 u1, u3, u1} (MonoidHom.{u3, u1} M P _inst_1 _inst_3) M P (MulOneClass.toMul.{u3} M _inst_1) (MulOneClass.toMul.{u1} P _inst_3) (MonoidHomClass.toMulHomClass.{max u3 u1, u3, u1} (MonoidHom.{u3, u1} M P _inst_1 _inst_3) M P _inst_1 _inst_3 (MonoidHom.monoidHomClass.{u3, u1} M P _inst_1 _inst_3))) (MonoidHom.comp.{u3, u2, u1} M N P _inst_1 _inst_2 _inst_3 g f) x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} N P _inst_2 _inst_3) N (fun (_x : N) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : N) => P) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} N P _inst_2 _inst_3) N P (MulOneClass.toMul.{u2} N _inst_2) (MulOneClass.toMul.{u1} P _inst_3) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} N P _inst_2 _inst_3) N P _inst_2 _inst_3 (MonoidHom.monoidHomClass.{u2, u1} N P _inst_2 _inst_3))) g (FunLike.coe.{max (succ u3) (succ u2), succ u3, succ u2} (MonoidHom.{u3, u2} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{max u3 u2, u3, u2} (MonoidHom.{u3, u2} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u3} M _inst_1) (MulOneClass.toMul.{u2} N _inst_2) (MonoidHomClass.toMulHomClass.{max u3 u2, u3, u2} (MonoidHom.{u3, u2} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidHom.monoidHomClass.{u3, u2} M N _inst_1 _inst_2))) f x))
 Case conversion may be inaccurate. Consider using '#align monoid_hom.comp_apply MonoidHom.comp_applyₓ'. -/
 @[to_additive]
 theorem MonoidHom.comp_apply [MulOneClass M] [MulOneClass N] [MulOneClass P] (g : N →* P)
@@ -1721,7 +1721,7 @@ theorem MonoidHom.comp_apply [MulOneClass M] [MulOneClass N] [MulOneClass P] (g
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} {P : Type.{u3}} [_inst_1 : MulZeroOneClass.{u1} M] [_inst_2 : MulZeroOneClass.{u2} N] [_inst_3 : MulZeroOneClass.{u3} P] (g : MonoidWithZeroHom.{u2, u3} N P _inst_2 _inst_3) (f : MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) (x : M), Eq.{succ u3} P (coeFn.{max (succ u3) (succ u1), max (succ u1) (succ u3)} (MonoidWithZeroHom.{u1, u3} M P _inst_1 _inst_3) (fun (_x : MonoidWithZeroHom.{u1, u3} M P _inst_1 _inst_3) => M -> P) (MonoidWithZeroHom.hasCoeToFun.{u1, u3} M P _inst_1 _inst_3) (MonoidWithZeroHom.comp.{u1, u2, u3} M N P _inst_1 _inst_2 _inst_3 g f) x) (coeFn.{max (succ u3) (succ u2), max (succ u2) (succ u3)} (MonoidWithZeroHom.{u2, u3} N P _inst_2 _inst_3) (fun (_x : MonoidWithZeroHom.{u2, u3} N P _inst_2 _inst_3) => N -> P) (MonoidWithZeroHom.hasCoeToFun.{u2, u3} N P _inst_2 _inst_3) g (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MonoidWithZeroHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f x))
 but is expected to have type
-  forall {M : Type.{u3}} {N : Type.{u2}} {P : Type.{u1}} [_inst_1 : MulZeroOneClass.{u3} M] [_inst_2 : MulZeroOneClass.{u2} N] [_inst_3 : MulZeroOneClass.{u1} P] (g : MonoidWithZeroHom.{u2, u1} N P _inst_2 _inst_3) (f : MonoidWithZeroHom.{u3, u2} M N _inst_1 _inst_2) (x : M), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => P) x) (FunLike.coe.{max (succ u3) (succ u1), succ u3, succ u1} (MonoidWithZeroHom.{u3, u1} M P _inst_1 _inst_3) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => P) _x) (MulHomClass.toFunLike.{max u3 u1, u3, u1} (MonoidWithZeroHom.{u3, u1} M P _inst_1 _inst_3) M P (MulOneClass.toMul.{u3} M (MulZeroOneClass.toMulOneClass.{u3} M _inst_1)) (MulOneClass.toMul.{u1} P (MulZeroOneClass.toMulOneClass.{u1} P _inst_3)) (MonoidHomClass.toMulHomClass.{max u3 u1, u3, u1} (MonoidWithZeroHom.{u3, u1} M P _inst_1 _inst_3) M P (MulZeroOneClass.toMulOneClass.{u3} M _inst_1) (MulZeroOneClass.toMulOneClass.{u1} P _inst_3) (MonoidWithZeroHomClass.toMonoidHomClass.{max u3 u1, u3, u1} (MonoidWithZeroHom.{u3, u1} M P _inst_1 _inst_3) M P _inst_1 _inst_3 (MonoidWithZeroHom.monoidWithZeroHomClass.{u3, u1} M P _inst_1 _inst_3)))) (MonoidWithZeroHom.comp.{u3, u2, u1} M N P _inst_1 _inst_2 _inst_3 g f) x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidWithZeroHom.{u2, u1} N P _inst_2 _inst_3) N (fun (_x : N) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : N) => P) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} N P _inst_2 _inst_3) N P (MulOneClass.toMul.{u2} N (MulZeroOneClass.toMulOneClass.{u2} N _inst_2)) (MulOneClass.toMul.{u1} P (MulZeroOneClass.toMulOneClass.{u1} P _inst_3)) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} N P _inst_2 _inst_3) N P (MulZeroOneClass.toMulOneClass.{u2} N _inst_2) (MulZeroOneClass.toMulOneClass.{u1} P _inst_3) (MonoidWithZeroHomClass.toMonoidHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} N P _inst_2 _inst_3) N P _inst_2 _inst_3 (MonoidWithZeroHom.monoidWithZeroHomClass.{u2, u1} N P _inst_2 _inst_3)))) g (FunLike.coe.{max (succ u3) (succ u2), succ u3, succ u2} (MonoidWithZeroHom.{u3, u2} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{max u3 u2, u3, u2} (MonoidWithZeroHom.{u3, u2} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u3} M (MulZeroOneClass.toMulOneClass.{u3} M _inst_1)) (MulOneClass.toMul.{u2} N (MulZeroOneClass.toMulOneClass.{u2} N _inst_2)) (MonoidHomClass.toMulHomClass.{max u3 u2, u3, u2} (MonoidWithZeroHom.{u3, u2} M N _inst_1 _inst_2) M N (MulZeroOneClass.toMulOneClass.{u3} M _inst_1) (MulZeroOneClass.toMulOneClass.{u2} N _inst_2) (MonoidWithZeroHomClass.toMonoidHomClass.{max u3 u2, u3, u2} (MonoidWithZeroHom.{u3, u2} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidWithZeroHom.monoidWithZeroHomClass.{u3, u2} M N _inst_1 _inst_2)))) f x))
+  forall {M : Type.{u3}} {N : Type.{u2}} {P : Type.{u1}} [_inst_1 : MulZeroOneClass.{u3} M] [_inst_2 : MulZeroOneClass.{u2} N] [_inst_3 : MulZeroOneClass.{u1} P] (g : MonoidWithZeroHom.{u2, u1} N P _inst_2 _inst_3) (f : MonoidWithZeroHom.{u3, u2} M N _inst_1 _inst_2) (x : M), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => P) x) (FunLike.coe.{max (succ u3) (succ u1), succ u3, succ u1} (MonoidWithZeroHom.{u3, u1} M P _inst_1 _inst_3) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => P) _x) (MulHomClass.toFunLike.{max u3 u1, u3, u1} (MonoidWithZeroHom.{u3, u1} M P _inst_1 _inst_3) M P (MulOneClass.toMul.{u3} M (MulZeroOneClass.toMulOneClass.{u3} M _inst_1)) (MulOneClass.toMul.{u1} P (MulZeroOneClass.toMulOneClass.{u1} P _inst_3)) (MonoidHomClass.toMulHomClass.{max u3 u1, u3, u1} (MonoidWithZeroHom.{u3, u1} M P _inst_1 _inst_3) M P (MulZeroOneClass.toMulOneClass.{u3} M _inst_1) (MulZeroOneClass.toMulOneClass.{u1} P _inst_3) (MonoidWithZeroHomClass.toMonoidHomClass.{max u3 u1, u3, u1} (MonoidWithZeroHom.{u3, u1} M P _inst_1 _inst_3) M P _inst_1 _inst_3 (MonoidWithZeroHom.monoidWithZeroHomClass.{u3, u1} M P _inst_1 _inst_3)))) (MonoidWithZeroHom.comp.{u3, u2, u1} M N P _inst_1 _inst_2 _inst_3 g f) x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidWithZeroHom.{u2, u1} N P _inst_2 _inst_3) N (fun (_x : N) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : N) => P) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} N P _inst_2 _inst_3) N P (MulOneClass.toMul.{u2} N (MulZeroOneClass.toMulOneClass.{u2} N _inst_2)) (MulOneClass.toMul.{u1} P (MulZeroOneClass.toMulOneClass.{u1} P _inst_3)) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} N P _inst_2 _inst_3) N P (MulZeroOneClass.toMulOneClass.{u2} N _inst_2) (MulZeroOneClass.toMulOneClass.{u1} P _inst_3) (MonoidWithZeroHomClass.toMonoidHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} N P _inst_2 _inst_3) N P _inst_2 _inst_3 (MonoidWithZeroHom.monoidWithZeroHomClass.{u2, u1} N P _inst_2 _inst_3)))) g (FunLike.coe.{max (succ u3) (succ u2), succ u3, succ u2} (MonoidWithZeroHom.{u3, u2} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{max u3 u2, u3, u2} (MonoidWithZeroHom.{u3, u2} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u3} M (MulZeroOneClass.toMulOneClass.{u3} M _inst_1)) (MulOneClass.toMul.{u2} N (MulZeroOneClass.toMulOneClass.{u2} N _inst_2)) (MonoidHomClass.toMulHomClass.{max u3 u2, u3, u2} (MonoidWithZeroHom.{u3, u2} M N _inst_1 _inst_2) M N (MulZeroOneClass.toMulOneClass.{u3} M _inst_1) (MulZeroOneClass.toMulOneClass.{u2} N _inst_2) (MonoidWithZeroHomClass.toMonoidHomClass.{max u3 u2, u3, u2} (MonoidWithZeroHom.{u3, u2} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidWithZeroHom.monoidWithZeroHomClass.{u3, u2} M N _inst_1 _inst_2)))) f x))
 Case conversion may be inaccurate. Consider using '#align monoid_with_zero_hom.comp_apply MonoidWithZeroHom.comp_applyₓ'. -/
 theorem MonoidWithZeroHom.comp_apply [MulZeroOneClass M] [MulZeroOneClass N] [MulZeroOneClass P]
     (g : N →*₀ P) (f : M →*₀ N) (x : M) : g.comp f x = g (f x) :=
@@ -1785,7 +1785,7 @@ theorem MonoidWithZeroHom.comp_assoc {Q : Type _} [MulZeroOneClass M] [MulZeroOn
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} {P : Type.{u3}} [_inst_1 : One.{u1} M] [_inst_2 : One.{u2} N] [_inst_3 : One.{u3} P] {g₁ : OneHom.{u2, u3} N P _inst_2 _inst_3} {g₂ : OneHom.{u2, u3} N P _inst_2 _inst_3} {f : OneHom.{u1, u2} M N _inst_1 _inst_2}, (Function.Surjective.{succ u1, succ u2} M N (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (OneHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : OneHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (OneHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f)) -> (Iff (Eq.{max (succ u3) (succ u1)} (OneHom.{u1, u3} M P _inst_1 _inst_3) (OneHom.comp.{u1, u2, u3} M N P _inst_1 _inst_2 _inst_3 g₁ f) (OneHom.comp.{u1, u2, u3} M N P _inst_1 _inst_2 _inst_3 g₂ f)) (Eq.{max (succ u3) (succ u2)} (OneHom.{u2, u3} N P _inst_2 _inst_3) g₁ g₂))
 but is expected to have type
-  forall {M : Type.{u3}} {N : Type.{u2}} {P : Type.{u1}} [_inst_1 : One.{u3} M] [_inst_2 : One.{u2} N] [_inst_3 : One.{u1} P] {g₁ : OneHom.{u2, u1} N P _inst_2 _inst_3} {g₂ : OneHom.{u2, u1} N P _inst_2 _inst_3} {f : OneHom.{u3, u2} M N _inst_1 _inst_2}, (Function.Surjective.{succ u3, succ u2} M N (FunLike.coe.{max (succ u3) (succ u2), succ u3, succ u2} (OneHom.{u3, u2} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1254 : M) => N) _x) (OneHomClass.toFunLike.{max u3 u2, u3, u2} (OneHom.{u3, u2} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (OneHom.oneHomClass.{u3, u2} M N _inst_1 _inst_2)) f)) -> (Iff (Eq.{max (succ u3) (succ u1)} (OneHom.{u3, u1} M P _inst_1 _inst_3) (OneHom.comp.{u3, u2, u1} M N P _inst_1 _inst_2 _inst_3 g₁ f) (OneHom.comp.{u3, u2, u1} M N P _inst_1 _inst_2 _inst_3 g₂ f)) (Eq.{max (succ u2) (succ u1)} (OneHom.{u2, u1} N P _inst_2 _inst_3) g₁ g₂))
+  forall {M : Type.{u3}} {N : Type.{u2}} {P : Type.{u1}} [_inst_1 : One.{u3} M] [_inst_2 : One.{u2} N] [_inst_3 : One.{u1} P] {g₁ : OneHom.{u2, u1} N P _inst_2 _inst_3} {g₂ : OneHom.{u2, u1} N P _inst_2 _inst_3} {f : OneHom.{u3, u2} M N _inst_1 _inst_2}, (Function.Surjective.{succ u3, succ u2} M N (FunLike.coe.{max (succ u3) (succ u2), succ u3, succ u2} (OneHom.{u3, u2} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1262 : M) => N) _x) (OneHomClass.toFunLike.{max u3 u2, u3, u2} (OneHom.{u3, u2} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (OneHom.oneHomClass.{u3, u2} M N _inst_1 _inst_2)) f)) -> (Iff (Eq.{max (succ u3) (succ u1)} (OneHom.{u3, u1} M P _inst_1 _inst_3) (OneHom.comp.{u3, u2, u1} M N P _inst_1 _inst_2 _inst_3 g₁ f) (OneHom.comp.{u3, u2, u1} M N P _inst_1 _inst_2 _inst_3 g₂ f)) (Eq.{max (succ u2) (succ u1)} (OneHom.{u2, u1} N P _inst_2 _inst_3) g₁ g₂))
 Case conversion may be inaccurate. Consider using '#align one_hom.cancel_right OneHom.cancel_rightₓ'. -/
 @[to_additive]
 theorem OneHom.cancel_right [One M] [One N] [One P] {g₁ g₂ : OneHom N P} {f : OneHom M N}
@@ -1798,7 +1798,7 @@ theorem OneHom.cancel_right [One M] [One N] [One P] {g₁ g₂ : OneHom N P} {f
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} {P : Type.{u3}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] [_inst_3 : Mul.{u3} P] {g₁ : MulHom.{u2, u3} N P _inst_2 _inst_3} {g₂ : MulHom.{u2, u3} N P _inst_2 _inst_3} {f : MulHom.{u1, u2} M N _inst_1 _inst_2}, (Function.Surjective.{succ u1, succ u2} M N (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MulHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MulHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MulHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f)) -> (Iff (Eq.{max (succ u3) (succ u1)} (MulHom.{u1, u3} M P _inst_1 _inst_3) (MulHom.comp.{u1, u2, u3} M N P _inst_1 _inst_2 _inst_3 g₁ f) (MulHom.comp.{u1, u2, u3} M N P _inst_1 _inst_2 _inst_3 g₂ f)) (Eq.{max (succ u3) (succ u2)} (MulHom.{u2, u3} N P _inst_2 _inst_3) g₁ g₂))
 but is expected to have type
-  forall {M : Type.{u3}} {N : Type.{u2}} {P : Type.{u1}} [_inst_1 : Mul.{u3} M] [_inst_2 : Mul.{u2} N] [_inst_3 : Mul.{u1} P] {g₁ : MulHom.{u2, u1} N P _inst_2 _inst_3} {g₂ : MulHom.{u2, u1} N P _inst_2 _inst_3} {f : MulHom.{u3, u2} M N _inst_1 _inst_2}, (Function.Surjective.{succ u3, succ u2} M N (FunLike.coe.{max (succ u3) (succ u2), succ u3, succ u2} (MulHom.{u3, u2} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{max u3 u2, u3, u2} (MulHom.{u3, u2} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u3, u2} M N _inst_1 _inst_2)) f)) -> (Iff (Eq.{max (succ u3) (succ u1)} (MulHom.{u3, u1} M P _inst_1 _inst_3) (MulHom.comp.{u3, u2, u1} M N P _inst_1 _inst_2 _inst_3 g₁ f) (MulHom.comp.{u3, u2, u1} M N P _inst_1 _inst_2 _inst_3 g₂ f)) (Eq.{max (succ u2) (succ u1)} (MulHom.{u2, u1} N P _inst_2 _inst_3) g₁ g₂))
+  forall {M : Type.{u3}} {N : Type.{u2}} {P : Type.{u1}} [_inst_1 : Mul.{u3} M] [_inst_2 : Mul.{u2} N] [_inst_3 : Mul.{u1} P] {g₁ : MulHom.{u2, u1} N P _inst_2 _inst_3} {g₂ : MulHom.{u2, u1} N P _inst_2 _inst_3} {f : MulHom.{u3, u2} M N _inst_1 _inst_2}, (Function.Surjective.{succ u3, succ u2} M N (FunLike.coe.{max (succ u3) (succ u2), succ u3, succ u2} (MulHom.{u3, u2} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{max u3 u2, u3, u2} (MulHom.{u3, u2} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u3, u2} M N _inst_1 _inst_2)) f)) -> (Iff (Eq.{max (succ u3) (succ u1)} (MulHom.{u3, u1} M P _inst_1 _inst_3) (MulHom.comp.{u3, u2, u1} M N P _inst_1 _inst_2 _inst_3 g₁ f) (MulHom.comp.{u3, u2, u1} M N P _inst_1 _inst_2 _inst_3 g₂ f)) (Eq.{max (succ u2) (succ u1)} (MulHom.{u2, u1} N P _inst_2 _inst_3) g₁ g₂))
 Case conversion may be inaccurate. Consider using '#align mul_hom.cancel_right MulHom.cancel_rightₓ'. -/
 @[to_additive]
 theorem MulHom.cancel_right [Mul M] [Mul N] [Mul P] {g₁ g₂ : N →ₙ* P} {f : M →ₙ* N}
@@ -1811,7 +1811,7 @@ theorem MulHom.cancel_right [Mul M] [Mul N] [Mul P] {g₁ g₂ : N →ₙ* P} {f
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} {P : Type.{u3}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N] [_inst_3 : MulOneClass.{u3} P] {g₁ : MonoidHom.{u2, u3} N P _inst_2 _inst_3} {g₂ : MonoidHom.{u2, u3} N P _inst_2 _inst_3} {f : MonoidHom.{u1, u2} M N _inst_1 _inst_2}, (Function.Surjective.{succ u1, succ u2} M N (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MonoidHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MonoidHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f)) -> (Iff (Eq.{max (succ u3) (succ u1)} (MonoidHom.{u1, u3} M P _inst_1 _inst_3) (MonoidHom.comp.{u1, u2, u3} M N P _inst_1 _inst_2 _inst_3 g₁ f) (MonoidHom.comp.{u1, u2, u3} M N P _inst_1 _inst_2 _inst_3 g₂ f)) (Eq.{max (succ u3) (succ u2)} (MonoidHom.{u2, u3} N P _inst_2 _inst_3) g₁ g₂))
 but is expected to have type
-  forall {M : Type.{u3}} {N : Type.{u2}} {P : Type.{u1}} [_inst_1 : MulOneClass.{u3} M] [_inst_2 : MulOneClass.{u2} N] [_inst_3 : MulOneClass.{u1} P] {g₁ : MonoidHom.{u2, u1} N P _inst_2 _inst_3} {g₂ : MonoidHom.{u2, u1} N P _inst_2 _inst_3} {f : MonoidHom.{u3, u2} M N _inst_1 _inst_2}, (Function.Surjective.{succ u3, succ u2} M N (FunLike.coe.{max (succ u3) (succ u2), succ u3, succ u2} (MonoidHom.{u3, u2} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{max u3 u2, u3, u2} (MonoidHom.{u3, u2} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u3} M _inst_1) (MulOneClass.toMul.{u2} N _inst_2) (MonoidHomClass.toMulHomClass.{max u3 u2, u3, u2} (MonoidHom.{u3, u2} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidHom.monoidHomClass.{u3, u2} M N _inst_1 _inst_2))) f)) -> (Iff (Eq.{max (succ u3) (succ u1)} (MonoidHom.{u3, u1} M P _inst_1 _inst_3) (MonoidHom.comp.{u3, u2, u1} M N P _inst_1 _inst_2 _inst_3 g₁ f) (MonoidHom.comp.{u3, u2, u1} M N P _inst_1 _inst_2 _inst_3 g₂ f)) (Eq.{max (succ u2) (succ u1)} (MonoidHom.{u2, u1} N P _inst_2 _inst_3) g₁ g₂))
+  forall {M : Type.{u3}} {N : Type.{u2}} {P : Type.{u1}} [_inst_1 : MulOneClass.{u3} M] [_inst_2 : MulOneClass.{u2} N] [_inst_3 : MulOneClass.{u1} P] {g₁ : MonoidHom.{u2, u1} N P _inst_2 _inst_3} {g₂ : MonoidHom.{u2, u1} N P _inst_2 _inst_3} {f : MonoidHom.{u3, u2} M N _inst_1 _inst_2}, (Function.Surjective.{succ u3, succ u2} M N (FunLike.coe.{max (succ u3) (succ u2), succ u3, succ u2} (MonoidHom.{u3, u2} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{max u3 u2, u3, u2} (MonoidHom.{u3, u2} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u3} M _inst_1) (MulOneClass.toMul.{u2} N _inst_2) (MonoidHomClass.toMulHomClass.{max u3 u2, u3, u2} (MonoidHom.{u3, u2} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidHom.monoidHomClass.{u3, u2} M N _inst_1 _inst_2))) f)) -> (Iff (Eq.{max (succ u3) (succ u1)} (MonoidHom.{u3, u1} M P _inst_1 _inst_3) (MonoidHom.comp.{u3, u2, u1} M N P _inst_1 _inst_2 _inst_3 g₁ f) (MonoidHom.comp.{u3, u2, u1} M N P _inst_1 _inst_2 _inst_3 g₂ f)) (Eq.{max (succ u2) (succ u1)} (MonoidHom.{u2, u1} N P _inst_2 _inst_3) g₁ g₂))
 Case conversion may be inaccurate. Consider using '#align monoid_hom.cancel_right MonoidHom.cancel_rightₓ'. -/
 @[to_additive]
 theorem MonoidHom.cancel_right [MulOneClass M] [MulOneClass N] [MulOneClass P] {g₁ g₂ : N →* P}
@@ -1824,7 +1824,7 @@ theorem MonoidHom.cancel_right [MulOneClass M] [MulOneClass N] [MulOneClass P] {
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} {P : Type.{u3}} [_inst_1 : MulZeroOneClass.{u1} M] [_inst_2 : MulZeroOneClass.{u2} N] [_inst_3 : MulZeroOneClass.{u3} P] {g₁ : MonoidWithZeroHom.{u2, u3} N P _inst_2 _inst_3} {g₂ : MonoidWithZeroHom.{u2, u3} N P _inst_2 _inst_3} {f : MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2}, (Function.Surjective.{succ u1, succ u2} M N (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MonoidWithZeroHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f)) -> (Iff (Eq.{max (succ u3) (succ u1)} (MonoidWithZeroHom.{u1, u3} M P _inst_1 _inst_3) (MonoidWithZeroHom.comp.{u1, u2, u3} M N P _inst_1 _inst_2 _inst_3 g₁ f) (MonoidWithZeroHom.comp.{u1, u2, u3} M N P _inst_1 _inst_2 _inst_3 g₂ f)) (Eq.{max (succ u3) (succ u2)} (MonoidWithZeroHom.{u2, u3} N P _inst_2 _inst_3) g₁ g₂))
 but is expected to have type
-  forall {M : Type.{u3}} {N : Type.{u2}} {P : Type.{u1}} [_inst_1 : MulZeroOneClass.{u3} M] [_inst_2 : MulZeroOneClass.{u2} N] [_inst_3 : MulZeroOneClass.{u1} P] {g₁ : MonoidWithZeroHom.{u2, u1} N P _inst_2 _inst_3} {g₂ : MonoidWithZeroHom.{u2, u1} N P _inst_2 _inst_3} {f : MonoidWithZeroHom.{u3, u2} M N _inst_1 _inst_2}, (Function.Surjective.{succ u3, succ u2} M N (FunLike.coe.{max (succ u3) (succ u2), succ u3, succ u2} (MonoidWithZeroHom.{u3, u2} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{max u3 u2, u3, u2} (MonoidWithZeroHom.{u3, u2} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u3} M (MulZeroOneClass.toMulOneClass.{u3} M _inst_1)) (MulOneClass.toMul.{u2} N (MulZeroOneClass.toMulOneClass.{u2} N _inst_2)) (MonoidHomClass.toMulHomClass.{max u3 u2, u3, u2} (MonoidWithZeroHom.{u3, u2} M N _inst_1 _inst_2) M N (MulZeroOneClass.toMulOneClass.{u3} M _inst_1) (MulZeroOneClass.toMulOneClass.{u2} N _inst_2) (MonoidWithZeroHomClass.toMonoidHomClass.{max u3 u2, u3, u2} (MonoidWithZeroHom.{u3, u2} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidWithZeroHom.monoidWithZeroHomClass.{u3, u2} M N _inst_1 _inst_2)))) f)) -> (Iff (Eq.{max (succ u3) (succ u1)} (MonoidWithZeroHom.{u3, u1} M P _inst_1 _inst_3) (MonoidWithZeroHom.comp.{u3, u2, u1} M N P _inst_1 _inst_2 _inst_3 g₁ f) (MonoidWithZeroHom.comp.{u3, u2, u1} M N P _inst_1 _inst_2 _inst_3 g₂ f)) (Eq.{max (succ u2) (succ u1)} (MonoidWithZeroHom.{u2, u1} N P _inst_2 _inst_3) g₁ g₂))
+  forall {M : Type.{u3}} {N : Type.{u2}} {P : Type.{u1}} [_inst_1 : MulZeroOneClass.{u3} M] [_inst_2 : MulZeroOneClass.{u2} N] [_inst_3 : MulZeroOneClass.{u1} P] {g₁ : MonoidWithZeroHom.{u2, u1} N P _inst_2 _inst_3} {g₂ : MonoidWithZeroHom.{u2, u1} N P _inst_2 _inst_3} {f : MonoidWithZeroHom.{u3, u2} M N _inst_1 _inst_2}, (Function.Surjective.{succ u3, succ u2} M N (FunLike.coe.{max (succ u3) (succ u2), succ u3, succ u2} (MonoidWithZeroHom.{u3, u2} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{max u3 u2, u3, u2} (MonoidWithZeroHom.{u3, u2} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u3} M (MulZeroOneClass.toMulOneClass.{u3} M _inst_1)) (MulOneClass.toMul.{u2} N (MulZeroOneClass.toMulOneClass.{u2} N _inst_2)) (MonoidHomClass.toMulHomClass.{max u3 u2, u3, u2} (MonoidWithZeroHom.{u3, u2} M N _inst_1 _inst_2) M N (MulZeroOneClass.toMulOneClass.{u3} M _inst_1) (MulZeroOneClass.toMulOneClass.{u2} N _inst_2) (MonoidWithZeroHomClass.toMonoidHomClass.{max u3 u2, u3, u2} (MonoidWithZeroHom.{u3, u2} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidWithZeroHom.monoidWithZeroHomClass.{u3, u2} M N _inst_1 _inst_2)))) f)) -> (Iff (Eq.{max (succ u3) (succ u1)} (MonoidWithZeroHom.{u3, u1} M P _inst_1 _inst_3) (MonoidWithZeroHom.comp.{u3, u2, u1} M N P _inst_1 _inst_2 _inst_3 g₁ f) (MonoidWithZeroHom.comp.{u3, u2, u1} M N P _inst_1 _inst_2 _inst_3 g₂ f)) (Eq.{max (succ u2) (succ u1)} (MonoidWithZeroHom.{u2, u1} N P _inst_2 _inst_3) g₁ g₂))
 Case conversion may be inaccurate. Consider using '#align monoid_with_zero_hom.cancel_right MonoidWithZeroHom.cancel_rightₓ'. -/
 theorem MonoidWithZeroHom.cancel_right [MulZeroOneClass M] [MulZeroOneClass N] [MulZeroOneClass P]
     {g₁ g₂ : N →*₀ P} {f : M →*₀ N} (hf : Function.Surjective f) :
@@ -1836,7 +1836,7 @@ theorem MonoidWithZeroHom.cancel_right [MulZeroOneClass M] [MulZeroOneClass N] [
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} {P : Type.{u3}} [_inst_1 : One.{u1} M] [_inst_2 : One.{u2} N] [_inst_3 : One.{u3} P] {g : OneHom.{u2, u3} N P _inst_2 _inst_3} {f₁ : OneHom.{u1, u2} M N _inst_1 _inst_2} {f₂ : OneHom.{u1, u2} M N _inst_1 _inst_2}, (Function.Injective.{succ u2, succ u3} N P (coeFn.{max (succ u3) (succ u2), max (succ u2) (succ u3)} (OneHom.{u2, u3} N P _inst_2 _inst_3) (fun (_x : OneHom.{u2, u3} N P _inst_2 _inst_3) => N -> P) (OneHom.hasCoeToFun.{u2, u3} N P _inst_2 _inst_3) g)) -> (Iff (Eq.{max (succ u3) (succ u1)} (OneHom.{u1, u3} M P _inst_1 _inst_3) (OneHom.comp.{u1, u2, u3} M N P _inst_1 _inst_2 _inst_3 g f₁) (OneHom.comp.{u1, u2, u3} M N P _inst_1 _inst_2 _inst_3 g f₂)) (Eq.{max (succ u2) (succ u1)} (OneHom.{u1, u2} M N _inst_1 _inst_2) f₁ f₂))
 but is expected to have type
-  forall {M : Type.{u3}} {N : Type.{u2}} {P : Type.{u1}} [_inst_1 : One.{u3} M] [_inst_2 : One.{u2} N] [_inst_3 : One.{u1} P] {g : OneHom.{u2, u1} N P _inst_2 _inst_3} {f₁ : OneHom.{u3, u2} M N _inst_1 _inst_2} {f₂ : OneHom.{u3, u2} M N _inst_1 _inst_2}, (Function.Injective.{succ u2, succ u1} N P (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (OneHom.{u2, u1} N P _inst_2 _inst_3) N (fun (_x : N) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1254 : N) => P) _x) (OneHomClass.toFunLike.{max u2 u1, u2, u1} (OneHom.{u2, u1} N P _inst_2 _inst_3) N P _inst_2 _inst_3 (OneHom.oneHomClass.{u2, u1} N P _inst_2 _inst_3)) g)) -> (Iff (Eq.{max (succ u3) (succ u1)} (OneHom.{u3, u1} M P _inst_1 _inst_3) (OneHom.comp.{u3, u2, u1} M N P _inst_1 _inst_2 _inst_3 g f₁) (OneHom.comp.{u3, u2, u1} M N P _inst_1 _inst_2 _inst_3 g f₂)) (Eq.{max (succ u3) (succ u2)} (OneHom.{u3, u2} M N _inst_1 _inst_2) f₁ f₂))
+  forall {M : Type.{u3}} {N : Type.{u2}} {P : Type.{u1}} [_inst_1 : One.{u3} M] [_inst_2 : One.{u2} N] [_inst_3 : One.{u1} P] {g : OneHom.{u2, u1} N P _inst_2 _inst_3} {f₁ : OneHom.{u3, u2} M N _inst_1 _inst_2} {f₂ : OneHom.{u3, u2} M N _inst_1 _inst_2}, (Function.Injective.{succ u2, succ u1} N P (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (OneHom.{u2, u1} N P _inst_2 _inst_3) N (fun (_x : N) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1262 : N) => P) _x) (OneHomClass.toFunLike.{max u2 u1, u2, u1} (OneHom.{u2, u1} N P _inst_2 _inst_3) N P _inst_2 _inst_3 (OneHom.oneHomClass.{u2, u1} N P _inst_2 _inst_3)) g)) -> (Iff (Eq.{max (succ u3) (succ u1)} (OneHom.{u3, u1} M P _inst_1 _inst_3) (OneHom.comp.{u3, u2, u1} M N P _inst_1 _inst_2 _inst_3 g f₁) (OneHom.comp.{u3, u2, u1} M N P _inst_1 _inst_2 _inst_3 g f₂)) (Eq.{max (succ u3) (succ u2)} (OneHom.{u3, u2} M N _inst_1 _inst_2) f₁ f₂))
 Case conversion may be inaccurate. Consider using '#align one_hom.cancel_left OneHom.cancel_leftₓ'. -/
 @[to_additive]
 theorem OneHom.cancel_left [One M] [One N] [One P] {g : OneHom N P} {f₁ f₂ : OneHom M N}
@@ -1850,7 +1850,7 @@ theorem OneHom.cancel_left [One M] [One N] [One P] {g : OneHom N P} {f₁ f₂ :
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} {P : Type.{u3}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] [_inst_3 : Mul.{u3} P] {g : MulHom.{u2, u3} N P _inst_2 _inst_3} {f₁ : MulHom.{u1, u2} M N _inst_1 _inst_2} {f₂ : MulHom.{u1, u2} M N _inst_1 _inst_2}, (Function.Injective.{succ u2, succ u3} N P (coeFn.{max (succ u3) (succ u2), max (succ u2) (succ u3)} (MulHom.{u2, u3} N P _inst_2 _inst_3) (fun (_x : MulHom.{u2, u3} N P _inst_2 _inst_3) => N -> P) (MulHom.hasCoeToFun.{u2, u3} N P _inst_2 _inst_3) g)) -> (Iff (Eq.{max (succ u3) (succ u1)} (MulHom.{u1, u3} M P _inst_1 _inst_3) (MulHom.comp.{u1, u2, u3} M N P _inst_1 _inst_2 _inst_3 g f₁) (MulHom.comp.{u1, u2, u3} M N P _inst_1 _inst_2 _inst_3 g f₂)) (Eq.{max (succ u2) (succ u1)} (MulHom.{u1, u2} M N _inst_1 _inst_2) f₁ f₂))
 but is expected to have type
-  forall {M : Type.{u3}} {N : Type.{u2}} {P : Type.{u1}} [_inst_1 : Mul.{u3} M] [_inst_2 : Mul.{u2} N] [_inst_3 : Mul.{u1} P] {g : MulHom.{u2, u1} N P _inst_2 _inst_3} {f₁ : MulHom.{u3, u2} M N _inst_1 _inst_2} {f₂ : MulHom.{u3, u2} M N _inst_1 _inst_2}, (Function.Injective.{succ u2, succ u1} N P (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} N P _inst_2 _inst_3) N (fun (_x : N) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : N) => P) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} N P _inst_2 _inst_3) N P _inst_2 _inst_3 (MulHom.mulHomClass.{u2, u1} N P _inst_2 _inst_3)) g)) -> (Iff (Eq.{max (succ u3) (succ u1)} (MulHom.{u3, u1} M P _inst_1 _inst_3) (MulHom.comp.{u3, u2, u1} M N P _inst_1 _inst_2 _inst_3 g f₁) (MulHom.comp.{u3, u2, u1} M N P _inst_1 _inst_2 _inst_3 g f₂)) (Eq.{max (succ u3) (succ u2)} (MulHom.{u3, u2} M N _inst_1 _inst_2) f₁ f₂))
+  forall {M : Type.{u3}} {N : Type.{u2}} {P : Type.{u1}} [_inst_1 : Mul.{u3} M] [_inst_2 : Mul.{u2} N] [_inst_3 : Mul.{u1} P] {g : MulHom.{u2, u1} N P _inst_2 _inst_3} {f₁ : MulHom.{u3, u2} M N _inst_1 _inst_2} {f₂ : MulHom.{u3, u2} M N _inst_1 _inst_2}, (Function.Injective.{succ u2, succ u1} N P (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} N P _inst_2 _inst_3) N (fun (_x : N) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : N) => P) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} N P _inst_2 _inst_3) N P _inst_2 _inst_3 (MulHom.mulHomClass.{u2, u1} N P _inst_2 _inst_3)) g)) -> (Iff (Eq.{max (succ u3) (succ u1)} (MulHom.{u3, u1} M P _inst_1 _inst_3) (MulHom.comp.{u3, u2, u1} M N P _inst_1 _inst_2 _inst_3 g f₁) (MulHom.comp.{u3, u2, u1} M N P _inst_1 _inst_2 _inst_3 g f₂)) (Eq.{max (succ u3) (succ u2)} (MulHom.{u3, u2} M N _inst_1 _inst_2) f₁ f₂))
 Case conversion may be inaccurate. Consider using '#align mul_hom.cancel_left MulHom.cancel_leftₓ'. -/
 @[to_additive]
 theorem MulHom.cancel_left [Mul M] [Mul N] [Mul P] {g : N →ₙ* P} {f₁ f₂ : M →ₙ* N}
@@ -1864,7 +1864,7 @@ theorem MulHom.cancel_left [Mul M] [Mul N] [Mul P] {g : N →ₙ* P} {f₁ f₂
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} {P : Type.{u3}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N] [_inst_3 : MulOneClass.{u3} P] {g : MonoidHom.{u2, u3} N P _inst_2 _inst_3} {f₁ : MonoidHom.{u1, u2} M N _inst_1 _inst_2} {f₂ : MonoidHom.{u1, u2} M N _inst_1 _inst_2}, (Function.Injective.{succ u2, succ u3} N P (coeFn.{max (succ u3) (succ u2), max (succ u2) (succ u3)} (MonoidHom.{u2, u3} N P _inst_2 _inst_3) (fun (_x : MonoidHom.{u2, u3} N P _inst_2 _inst_3) => N -> P) (MonoidHom.hasCoeToFun.{u2, u3} N P _inst_2 _inst_3) g)) -> (Iff (Eq.{max (succ u3) (succ u1)} (MonoidHom.{u1, u3} M P _inst_1 _inst_3) (MonoidHom.comp.{u1, u2, u3} M N P _inst_1 _inst_2 _inst_3 g f₁) (MonoidHom.comp.{u1, u2, u3} M N P _inst_1 _inst_2 _inst_3 g f₂)) (Eq.{max (succ u2) (succ u1)} (MonoidHom.{u1, u2} M N _inst_1 _inst_2) f₁ f₂))
 but is expected to have type
-  forall {M : Type.{u3}} {N : Type.{u2}} {P : Type.{u1}} [_inst_1 : MulOneClass.{u3} M] [_inst_2 : MulOneClass.{u2} N] [_inst_3 : MulOneClass.{u1} P] {g : MonoidHom.{u2, u1} N P _inst_2 _inst_3} {f₁ : MonoidHom.{u3, u2} M N _inst_1 _inst_2} {f₂ : MonoidHom.{u3, u2} M N _inst_1 _inst_2}, (Function.Injective.{succ u2, succ u1} N P (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} N P _inst_2 _inst_3) N (fun (_x : N) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : N) => P) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} N P _inst_2 _inst_3) N P (MulOneClass.toMul.{u2} N _inst_2) (MulOneClass.toMul.{u1} P _inst_3) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} N P _inst_2 _inst_3) N P _inst_2 _inst_3 (MonoidHom.monoidHomClass.{u2, u1} N P _inst_2 _inst_3))) g)) -> (Iff (Eq.{max (succ u3) (succ u1)} (MonoidHom.{u3, u1} M P _inst_1 _inst_3) (MonoidHom.comp.{u3, u2, u1} M N P _inst_1 _inst_2 _inst_3 g f₁) (MonoidHom.comp.{u3, u2, u1} M N P _inst_1 _inst_2 _inst_3 g f₂)) (Eq.{max (succ u3) (succ u2)} (MonoidHom.{u3, u2} M N _inst_1 _inst_2) f₁ f₂))
+  forall {M : Type.{u3}} {N : Type.{u2}} {P : Type.{u1}} [_inst_1 : MulOneClass.{u3} M] [_inst_2 : MulOneClass.{u2} N] [_inst_3 : MulOneClass.{u1} P] {g : MonoidHom.{u2, u1} N P _inst_2 _inst_3} {f₁ : MonoidHom.{u3, u2} M N _inst_1 _inst_2} {f₂ : MonoidHom.{u3, u2} M N _inst_1 _inst_2}, (Function.Injective.{succ u2, succ u1} N P (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} N P _inst_2 _inst_3) N (fun (_x : N) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : N) => P) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} N P _inst_2 _inst_3) N P (MulOneClass.toMul.{u2} N _inst_2) (MulOneClass.toMul.{u1} P _inst_3) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} N P _inst_2 _inst_3) N P _inst_2 _inst_3 (MonoidHom.monoidHomClass.{u2, u1} N P _inst_2 _inst_3))) g)) -> (Iff (Eq.{max (succ u3) (succ u1)} (MonoidHom.{u3, u1} M P _inst_1 _inst_3) (MonoidHom.comp.{u3, u2, u1} M N P _inst_1 _inst_2 _inst_3 g f₁) (MonoidHom.comp.{u3, u2, u1} M N P _inst_1 _inst_2 _inst_3 g f₂)) (Eq.{max (succ u3) (succ u2)} (MonoidHom.{u3, u2} M N _inst_1 _inst_2) f₁ f₂))
 Case conversion may be inaccurate. Consider using '#align monoid_hom.cancel_left MonoidHom.cancel_leftₓ'. -/
 @[to_additive]
 theorem MonoidHom.cancel_left [MulOneClass M] [MulOneClass N] [MulOneClass P] {g : N →* P}
@@ -1878,7 +1878,7 @@ theorem MonoidHom.cancel_left [MulOneClass M] [MulOneClass N] [MulOneClass P] {g
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} {P : Type.{u3}} [_inst_1 : MulZeroOneClass.{u1} M] [_inst_2 : MulZeroOneClass.{u2} N] [_inst_3 : MulZeroOneClass.{u3} P] {g : MonoidWithZeroHom.{u2, u3} N P _inst_2 _inst_3} {f₁ : MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2} {f₂ : MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2}, (Function.Injective.{succ u2, succ u3} N P (coeFn.{max (succ u3) (succ u2), max (succ u2) (succ u3)} (MonoidWithZeroHom.{u2, u3} N P _inst_2 _inst_3) (fun (_x : MonoidWithZeroHom.{u2, u3} N P _inst_2 _inst_3) => N -> P) (MonoidWithZeroHom.hasCoeToFun.{u2, u3} N P _inst_2 _inst_3) g)) -> (Iff (Eq.{max (succ u3) (succ u1)} (MonoidWithZeroHom.{u1, u3} M P _inst_1 _inst_3) (MonoidWithZeroHom.comp.{u1, u2, u3} M N P _inst_1 _inst_2 _inst_3 g f₁) (MonoidWithZeroHom.comp.{u1, u2, u3} M N P _inst_1 _inst_2 _inst_3 g f₂)) (Eq.{max (succ u2) (succ u1)} (MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) f₁ f₂))
 but is expected to have type
-  forall {M : Type.{u3}} {N : Type.{u2}} {P : Type.{u1}} [_inst_1 : MulZeroOneClass.{u3} M] [_inst_2 : MulZeroOneClass.{u2} N] [_inst_3 : MulZeroOneClass.{u1} P] {g : MonoidWithZeroHom.{u2, u1} N P _inst_2 _inst_3} {f₁ : MonoidWithZeroHom.{u3, u2} M N _inst_1 _inst_2} {f₂ : MonoidWithZeroHom.{u3, u2} M N _inst_1 _inst_2}, (Function.Injective.{succ u2, succ u1} N P (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidWithZeroHom.{u2, u1} N P _inst_2 _inst_3) N (fun (_x : N) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : N) => P) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} N P _inst_2 _inst_3) N P (MulOneClass.toMul.{u2} N (MulZeroOneClass.toMulOneClass.{u2} N _inst_2)) (MulOneClass.toMul.{u1} P (MulZeroOneClass.toMulOneClass.{u1} P _inst_3)) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} N P _inst_2 _inst_3) N P (MulZeroOneClass.toMulOneClass.{u2} N _inst_2) (MulZeroOneClass.toMulOneClass.{u1} P _inst_3) (MonoidWithZeroHomClass.toMonoidHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} N P _inst_2 _inst_3) N P _inst_2 _inst_3 (MonoidWithZeroHom.monoidWithZeroHomClass.{u2, u1} N P _inst_2 _inst_3)))) g)) -> (Iff (Eq.{max (succ u3) (succ u1)} (MonoidWithZeroHom.{u3, u1} M P _inst_1 _inst_3) (MonoidWithZeroHom.comp.{u3, u2, u1} M N P _inst_1 _inst_2 _inst_3 g f₁) (MonoidWithZeroHom.comp.{u3, u2, u1} M N P _inst_1 _inst_2 _inst_3 g f₂)) (Eq.{max (succ u3) (succ u2)} (MonoidWithZeroHom.{u3, u2} M N _inst_1 _inst_2) f₁ f₂))
+  forall {M : Type.{u3}} {N : Type.{u2}} {P : Type.{u1}} [_inst_1 : MulZeroOneClass.{u3} M] [_inst_2 : MulZeroOneClass.{u2} N] [_inst_3 : MulZeroOneClass.{u1} P] {g : MonoidWithZeroHom.{u2, u1} N P _inst_2 _inst_3} {f₁ : MonoidWithZeroHom.{u3, u2} M N _inst_1 _inst_2} {f₂ : MonoidWithZeroHom.{u3, u2} M N _inst_1 _inst_2}, (Function.Injective.{succ u2, succ u1} N P (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidWithZeroHom.{u2, u1} N P _inst_2 _inst_3) N (fun (_x : N) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : N) => P) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} N P _inst_2 _inst_3) N P (MulOneClass.toMul.{u2} N (MulZeroOneClass.toMulOneClass.{u2} N _inst_2)) (MulOneClass.toMul.{u1} P (MulZeroOneClass.toMulOneClass.{u1} P _inst_3)) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} N P _inst_2 _inst_3) N P (MulZeroOneClass.toMulOneClass.{u2} N _inst_2) (MulZeroOneClass.toMulOneClass.{u1} P _inst_3) (MonoidWithZeroHomClass.toMonoidHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} N P _inst_2 _inst_3) N P _inst_2 _inst_3 (MonoidWithZeroHom.monoidWithZeroHomClass.{u2, u1} N P _inst_2 _inst_3)))) g)) -> (Iff (Eq.{max (succ u3) (succ u1)} (MonoidWithZeroHom.{u3, u1} M P _inst_1 _inst_3) (MonoidWithZeroHom.comp.{u3, u2, u1} M N P _inst_1 _inst_2 _inst_3 g f₁) (MonoidWithZeroHom.comp.{u3, u2, u1} M N P _inst_1 _inst_2 _inst_3 g f₂)) (Eq.{max (succ u3) (succ u2)} (MonoidWithZeroHom.{u3, u2} M N _inst_1 _inst_2) f₁ f₂))
 Case conversion may be inaccurate. Consider using '#align monoid_with_zero_hom.cancel_left MonoidWithZeroHom.cancel_leftₓ'. -/
 theorem MonoidWithZeroHom.cancel_left [MulZeroOneClass M] [MulZeroOneClass N] [MulZeroOneClass P]
     {g : N →*₀ P} {f₁ f₂ : M →*₀ N} (hg : Function.Injective g) : g.comp f₁ = g.comp f₂ ↔ f₁ = f₂ :=
@@ -2038,7 +2038,7 @@ theorem MonoidWithZeroHom.id_comp [MulZeroOneClass M] [MulZeroOneClass N] (f : M
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Monoid.{u1} M] [_inst_2 : Monoid.{u2} N] (f : MonoidHom.{u1, u2} M N (Monoid.toMulOneClass.{u1} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2)) (a : M) (n : Nat), Eq.{succ u2} N (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} M N (Monoid.toMulOneClass.{u1} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2)) (fun (_x : MonoidHom.{u1, u2} M N (Monoid.toMulOneClass.{u1} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2)) => M -> N) (MonoidHom.hasCoeToFun.{u1, u2} M N (Monoid.toMulOneClass.{u1} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2)) f (HPow.hPow.{u1, 0, u1} M Nat M (instHPow.{u1, 0} M Nat (Monoid.Pow.{u1} M _inst_1)) a n)) (HPow.hPow.{u2, 0, u2} N Nat N (instHPow.{u2, 0} N Nat (Monoid.Pow.{u2} N _inst_2)) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} M N (Monoid.toMulOneClass.{u1} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2)) (fun (_x : MonoidHom.{u1, u2} M N (Monoid.toMulOneClass.{u1} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2)) => M -> N) (MonoidHom.hasCoeToFun.{u1, u2} M N (Monoid.toMulOneClass.{u1} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2)) f a) n)
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : Monoid.{u2} M] [_inst_2 : Monoid.{u1} N] (f : MonoidHom.{u2, u1} M N (Monoid.toMulOneClass.{u2} M _inst_1) (Monoid.toMulOneClass.{u1} N _inst_2)) (a : M) (n : Nat), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) (HPow.hPow.{u2, 0, u2} M Nat M (instHPow.{u2, 0} M Nat (Monoid.Pow.{u2} M _inst_1)) a n)) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M N (Monoid.toMulOneClass.{u2} M _inst_1) (Monoid.toMulOneClass.{u1} N _inst_2)) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N (Monoid.toMulOneClass.{u2} M _inst_1) (Monoid.toMulOneClass.{u1} N _inst_2)) M N (MulOneClass.toMul.{u2} M (Monoid.toMulOneClass.{u2} M _inst_1)) (MulOneClass.toMul.{u1} N (Monoid.toMulOneClass.{u1} N _inst_2)) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N (Monoid.toMulOneClass.{u2} M _inst_1) (Monoid.toMulOneClass.{u1} N _inst_2)) M N (Monoid.toMulOneClass.{u2} M _inst_1) (Monoid.toMulOneClass.{u1} N _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N (Monoid.toMulOneClass.{u2} M _inst_1) (Monoid.toMulOneClass.{u1} N _inst_2)))) f (HPow.hPow.{u2, 0, u2} M Nat M (instHPow.{u2, 0} M Nat (Monoid.Pow.{u2} M _inst_1)) a n)) (HPow.hPow.{u1, 0, u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) a) Nat ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) a) (instHPow.{u1, 0} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) a) Nat (Monoid.Pow.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) a) _inst_2)) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M N (Monoid.toMulOneClass.{u2} M _inst_1) (Monoid.toMulOneClass.{u1} N _inst_2)) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N (Monoid.toMulOneClass.{u2} M _inst_1) (Monoid.toMulOneClass.{u1} N _inst_2)) M N (MulOneClass.toMul.{u2} M (Monoid.toMulOneClass.{u2} M _inst_1)) (MulOneClass.toMul.{u1} N (Monoid.toMulOneClass.{u1} N _inst_2)) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N (Monoid.toMulOneClass.{u2} M _inst_1) (Monoid.toMulOneClass.{u1} N _inst_2)) M N (Monoid.toMulOneClass.{u2} M _inst_1) (Monoid.toMulOneClass.{u1} N _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N (Monoid.toMulOneClass.{u2} M _inst_1) (Monoid.toMulOneClass.{u1} N _inst_2)))) f a) n)
+  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : Monoid.{u2} M] [_inst_2 : Monoid.{u1} N] (f : MonoidHom.{u2, u1} M N (Monoid.toMulOneClass.{u2} M _inst_1) (Monoid.toMulOneClass.{u1} N _inst_2)) (a : M) (n : Nat), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) (HPow.hPow.{u2, 0, u2} M Nat M (instHPow.{u2, 0} M Nat (Monoid.Pow.{u2} M _inst_1)) a n)) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M N (Monoid.toMulOneClass.{u2} M _inst_1) (Monoid.toMulOneClass.{u1} N _inst_2)) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N (Monoid.toMulOneClass.{u2} M _inst_1) (Monoid.toMulOneClass.{u1} N _inst_2)) M N (MulOneClass.toMul.{u2} M (Monoid.toMulOneClass.{u2} M _inst_1)) (MulOneClass.toMul.{u1} N (Monoid.toMulOneClass.{u1} N _inst_2)) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N (Monoid.toMulOneClass.{u2} M _inst_1) (Monoid.toMulOneClass.{u1} N _inst_2)) M N (Monoid.toMulOneClass.{u2} M _inst_1) (Monoid.toMulOneClass.{u1} N _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N (Monoid.toMulOneClass.{u2} M _inst_1) (Monoid.toMulOneClass.{u1} N _inst_2)))) f (HPow.hPow.{u2, 0, u2} M Nat M (instHPow.{u2, 0} M Nat (Monoid.Pow.{u2} M _inst_1)) a n)) (HPow.hPow.{u1, 0, u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) a) Nat ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) a) (instHPow.{u1, 0} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) a) Nat (Monoid.Pow.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) a) _inst_2)) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M N (Monoid.toMulOneClass.{u2} M _inst_1) (Monoid.toMulOneClass.{u1} N _inst_2)) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N (Monoid.toMulOneClass.{u2} M _inst_1) (Monoid.toMulOneClass.{u1} N _inst_2)) M N (MulOneClass.toMul.{u2} M (Monoid.toMulOneClass.{u2} M _inst_1)) (MulOneClass.toMul.{u1} N (Monoid.toMulOneClass.{u1} N _inst_2)) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N (Monoid.toMulOneClass.{u2} M _inst_1) (Monoid.toMulOneClass.{u1} N _inst_2)) M N (Monoid.toMulOneClass.{u2} M _inst_1) (Monoid.toMulOneClass.{u1} N _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N (Monoid.toMulOneClass.{u2} M _inst_1) (Monoid.toMulOneClass.{u1} N _inst_2)))) f a) n)
 Case conversion may be inaccurate. Consider using '#align monoid_hom.map_pow MonoidHom.map_powₓ'. -/
 @[to_additive AddMonoidHom.map_nsmul]
 protected theorem MonoidHom.map_pow [Monoid M] [Monoid N] (f : M →* N) (a : M) (n : ℕ) :
@@ -2051,7 +2051,7 @@ protected theorem MonoidHom.map_pow [Monoid M] [Monoid N] (f : M →* N) (a : M)
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : DivInvMonoid.{u1} M] [_inst_2 : DivInvMonoid.{u2} N] (f : MonoidHom.{u1, u2} M N (Monoid.toMulOneClass.{u1} M (DivInvMonoid.toMonoid.{u1} M _inst_1)) (Monoid.toMulOneClass.{u2} N (DivInvMonoid.toMonoid.{u2} N _inst_2))), (forall (x : M), Eq.{succ u2} N (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} M N (Monoid.toMulOneClass.{u1} M (DivInvMonoid.toMonoid.{u1} M _inst_1)) (Monoid.toMulOneClass.{u2} N (DivInvMonoid.toMonoid.{u2} N _inst_2))) (fun (_x : MonoidHom.{u1, u2} M N (Monoid.toMulOneClass.{u1} M (DivInvMonoid.toMonoid.{u1} M _inst_1)) (Monoid.toMulOneClass.{u2} N (DivInvMonoid.toMonoid.{u2} N _inst_2))) => M -> N) (MonoidHom.hasCoeToFun.{u1, u2} M N (Monoid.toMulOneClass.{u1} M (DivInvMonoid.toMonoid.{u1} M _inst_1)) (Monoid.toMulOneClass.{u2} N (DivInvMonoid.toMonoid.{u2} N _inst_2))) f (Inv.inv.{u1} M (DivInvMonoid.toHasInv.{u1} M _inst_1) x)) (Inv.inv.{u2} N (DivInvMonoid.toHasInv.{u2} N _inst_2) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} M N (Monoid.toMulOneClass.{u1} M (DivInvMonoid.toMonoid.{u1} M _inst_1)) (Monoid.toMulOneClass.{u2} N (DivInvMonoid.toMonoid.{u2} N _inst_2))) (fun (_x : MonoidHom.{u1, u2} M N (Monoid.toMulOneClass.{u1} M (DivInvMonoid.toMonoid.{u1} M _inst_1)) (Monoid.toMulOneClass.{u2} N (DivInvMonoid.toMonoid.{u2} N _inst_2))) => M -> N) (MonoidHom.hasCoeToFun.{u1, u2} M N (Monoid.toMulOneClass.{u1} M (DivInvMonoid.toMonoid.{u1} M _inst_1)) (Monoid.toMulOneClass.{u2} N (DivInvMonoid.toMonoid.{u2} N _inst_2))) f x))) -> (forall (a : M) (n : Int), Eq.{succ u2} N (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} M N (Monoid.toMulOneClass.{u1} M (DivInvMonoid.toMonoid.{u1} M _inst_1)) (Monoid.toMulOneClass.{u2} N (DivInvMonoid.toMonoid.{u2} N _inst_2))) (fun (_x : MonoidHom.{u1, u2} M N (Monoid.toMulOneClass.{u1} M (DivInvMonoid.toMonoid.{u1} M _inst_1)) (Monoid.toMulOneClass.{u2} N (DivInvMonoid.toMonoid.{u2} N _inst_2))) => M -> N) (MonoidHom.hasCoeToFun.{u1, u2} M N (Monoid.toMulOneClass.{u1} M (DivInvMonoid.toMonoid.{u1} M _inst_1)) (Monoid.toMulOneClass.{u2} N (DivInvMonoid.toMonoid.{u2} N _inst_2))) f (HPow.hPow.{u1, 0, u1} M Int M (instHPow.{u1, 0} M Int (DivInvMonoid.Pow.{u1} M _inst_1)) a n)) (HPow.hPow.{u2, 0, u2} N Int N (instHPow.{u2, 0} N Int (DivInvMonoid.Pow.{u2} N _inst_2)) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} M N (Monoid.toMulOneClass.{u1} M (DivInvMonoid.toMonoid.{u1} M _inst_1)) (Monoid.toMulOneClass.{u2} N (DivInvMonoid.toMonoid.{u2} N _inst_2))) (fun (_x : MonoidHom.{u1, u2} M N (Monoid.toMulOneClass.{u1} M (DivInvMonoid.toMonoid.{u1} M _inst_1)) (Monoid.toMulOneClass.{u2} N (DivInvMonoid.toMonoid.{u2} N _inst_2))) => M -> N) (MonoidHom.hasCoeToFun.{u1, u2} M N (Monoid.toMulOneClass.{u1} M (DivInvMonoid.toMonoid.{u1} M _inst_1)) (Monoid.toMulOneClass.{u2} N (DivInvMonoid.toMonoid.{u2} N _inst_2))) f a) n))
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : DivInvMonoid.{u2} M] [_inst_2 : DivInvMonoid.{u1} N] (f : MonoidHom.{u2, u1} M N (Monoid.toMulOneClass.{u2} M (DivInvMonoid.toMonoid.{u2} M _inst_1)) (Monoid.toMulOneClass.{u1} N (DivInvMonoid.toMonoid.{u1} N _inst_2))), (forall (x : M), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) (Inv.inv.{u2} M (DivInvMonoid.toInv.{u2} M _inst_1) x)) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M N (Monoid.toMulOneClass.{u2} M (DivInvMonoid.toMonoid.{u2} M _inst_1)) (Monoid.toMulOneClass.{u1} N (DivInvMonoid.toMonoid.{u1} N _inst_2))) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N (Monoid.toMulOneClass.{u2} M (DivInvMonoid.toMonoid.{u2} M _inst_1)) (Monoid.toMulOneClass.{u1} N (DivInvMonoid.toMonoid.{u1} N _inst_2))) M N (MulOneClass.toMul.{u2} M (Monoid.toMulOneClass.{u2} M (DivInvMonoid.toMonoid.{u2} M _inst_1))) (MulOneClass.toMul.{u1} N (Monoid.toMulOneClass.{u1} N (DivInvMonoid.toMonoid.{u1} N _inst_2))) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N (Monoid.toMulOneClass.{u2} M (DivInvMonoid.toMonoid.{u2} M _inst_1)) (Monoid.toMulOneClass.{u1} N (DivInvMonoid.toMonoid.{u1} N _inst_2))) M N (Monoid.toMulOneClass.{u2} M (DivInvMonoid.toMonoid.{u2} M _inst_1)) (Monoid.toMulOneClass.{u1} N (DivInvMonoid.toMonoid.{u1} N _inst_2)) (MonoidHom.monoidHomClass.{u2, u1} M N (Monoid.toMulOneClass.{u2} M (DivInvMonoid.toMonoid.{u2} M _inst_1)) (Monoid.toMulOneClass.{u1} N (DivInvMonoid.toMonoid.{u1} N _inst_2))))) f (Inv.inv.{u2} M (DivInvMonoid.toInv.{u2} M _inst_1) x)) (Inv.inv.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) x) (DivInvMonoid.toInv.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) x) _inst_2) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M N (Monoid.toMulOneClass.{u2} M (DivInvMonoid.toMonoid.{u2} M _inst_1)) (Monoid.toMulOneClass.{u1} N (DivInvMonoid.toMonoid.{u1} N _inst_2))) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N (Monoid.toMulOneClass.{u2} M (DivInvMonoid.toMonoid.{u2} M _inst_1)) (Monoid.toMulOneClass.{u1} N (DivInvMonoid.toMonoid.{u1} N _inst_2))) M N (MulOneClass.toMul.{u2} M (Monoid.toMulOneClass.{u2} M (DivInvMonoid.toMonoid.{u2} M _inst_1))) (MulOneClass.toMul.{u1} N (Monoid.toMulOneClass.{u1} N (DivInvMonoid.toMonoid.{u1} N _inst_2))) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N (Monoid.toMulOneClass.{u2} M (DivInvMonoid.toMonoid.{u2} M _inst_1)) (Monoid.toMulOneClass.{u1} N (DivInvMonoid.toMonoid.{u1} N _inst_2))) M N (Monoid.toMulOneClass.{u2} M (DivInvMonoid.toMonoid.{u2} M _inst_1)) (Monoid.toMulOneClass.{u1} N (DivInvMonoid.toMonoid.{u1} N _inst_2)) (MonoidHom.monoidHomClass.{u2, u1} M N (Monoid.toMulOneClass.{u2} M (DivInvMonoid.toMonoid.{u2} M _inst_1)) (Monoid.toMulOneClass.{u1} N (DivInvMonoid.toMonoid.{u1} N _inst_2))))) f x))) -> (forall (a : M) (n : Int), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) (HPow.hPow.{u2, 0, u2} M Int M (instHPow.{u2, 0} M Int (DivInvMonoid.Pow.{u2} M _inst_1)) a n)) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M N (Monoid.toMulOneClass.{u2} M (DivInvMonoid.toMonoid.{u2} M _inst_1)) (Monoid.toMulOneClass.{u1} N (DivInvMonoid.toMonoid.{u1} N _inst_2))) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N (Monoid.toMulOneClass.{u2} M (DivInvMonoid.toMonoid.{u2} M _inst_1)) (Monoid.toMulOneClass.{u1} N (DivInvMonoid.toMonoid.{u1} N _inst_2))) M N (MulOneClass.toMul.{u2} M (Monoid.toMulOneClass.{u2} M (DivInvMonoid.toMonoid.{u2} M _inst_1))) (MulOneClass.toMul.{u1} N (Monoid.toMulOneClass.{u1} N (DivInvMonoid.toMonoid.{u1} N _inst_2))) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N (Monoid.toMulOneClass.{u2} M (DivInvMonoid.toMonoid.{u2} M _inst_1)) (Monoid.toMulOneClass.{u1} N (DivInvMonoid.toMonoid.{u1} N _inst_2))) M N (Monoid.toMulOneClass.{u2} M (DivInvMonoid.toMonoid.{u2} M _inst_1)) (Monoid.toMulOneClass.{u1} N (DivInvMonoid.toMonoid.{u1} N _inst_2)) (MonoidHom.monoidHomClass.{u2, u1} M N (Monoid.toMulOneClass.{u2} M (DivInvMonoid.toMonoid.{u2} M _inst_1)) (Monoid.toMulOneClass.{u1} N (DivInvMonoid.toMonoid.{u1} N _inst_2))))) f (HPow.hPow.{u2, 0, u2} M Int M (instHPow.{u2, 0} M Int (DivInvMonoid.Pow.{u2} M _inst_1)) a n)) (HPow.hPow.{u1, 0, u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) a) Int ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) a) (instHPow.{u1, 0} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) a) Int (DivInvMonoid.Pow.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) a) _inst_2)) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M N (Monoid.toMulOneClass.{u2} M (DivInvMonoid.toMonoid.{u2} M _inst_1)) (Monoid.toMulOneClass.{u1} N (DivInvMonoid.toMonoid.{u1} N _inst_2))) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N (Monoid.toMulOneClass.{u2} M (DivInvMonoid.toMonoid.{u2} M _inst_1)) (Monoid.toMulOneClass.{u1} N (DivInvMonoid.toMonoid.{u1} N _inst_2))) M N (MulOneClass.toMul.{u2} M (Monoid.toMulOneClass.{u2} M (DivInvMonoid.toMonoid.{u2} M _inst_1))) (MulOneClass.toMul.{u1} N (Monoid.toMulOneClass.{u1} N (DivInvMonoid.toMonoid.{u1} N _inst_2))) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N (Monoid.toMulOneClass.{u2} M (DivInvMonoid.toMonoid.{u2} M _inst_1)) (Monoid.toMulOneClass.{u1} N (DivInvMonoid.toMonoid.{u1} N _inst_2))) M N (Monoid.toMulOneClass.{u2} M (DivInvMonoid.toMonoid.{u2} M _inst_1)) (Monoid.toMulOneClass.{u1} N (DivInvMonoid.toMonoid.{u1} N _inst_2)) (MonoidHom.monoidHomClass.{u2, u1} M N (Monoid.toMulOneClass.{u2} M (DivInvMonoid.toMonoid.{u2} M _inst_1)) (Monoid.toMulOneClass.{u1} N (DivInvMonoid.toMonoid.{u1} N _inst_2))))) f a) n))
+  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : DivInvMonoid.{u2} M] [_inst_2 : DivInvMonoid.{u1} N] (f : MonoidHom.{u2, u1} M N (Monoid.toMulOneClass.{u2} M (DivInvMonoid.toMonoid.{u2} M _inst_1)) (Monoid.toMulOneClass.{u1} N (DivInvMonoid.toMonoid.{u1} N _inst_2))), (forall (x : M), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) (Inv.inv.{u2} M (DivInvMonoid.toInv.{u2} M _inst_1) x)) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M N (Monoid.toMulOneClass.{u2} M (DivInvMonoid.toMonoid.{u2} M _inst_1)) (Monoid.toMulOneClass.{u1} N (DivInvMonoid.toMonoid.{u1} N _inst_2))) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N (Monoid.toMulOneClass.{u2} M (DivInvMonoid.toMonoid.{u2} M _inst_1)) (Monoid.toMulOneClass.{u1} N (DivInvMonoid.toMonoid.{u1} N _inst_2))) M N (MulOneClass.toMul.{u2} M (Monoid.toMulOneClass.{u2} M (DivInvMonoid.toMonoid.{u2} M _inst_1))) (MulOneClass.toMul.{u1} N (Monoid.toMulOneClass.{u1} N (DivInvMonoid.toMonoid.{u1} N _inst_2))) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N (Monoid.toMulOneClass.{u2} M (DivInvMonoid.toMonoid.{u2} M _inst_1)) (Monoid.toMulOneClass.{u1} N (DivInvMonoid.toMonoid.{u1} N _inst_2))) M N (Monoid.toMulOneClass.{u2} M (DivInvMonoid.toMonoid.{u2} M _inst_1)) (Monoid.toMulOneClass.{u1} N (DivInvMonoid.toMonoid.{u1} N _inst_2)) (MonoidHom.monoidHomClass.{u2, u1} M N (Monoid.toMulOneClass.{u2} M (DivInvMonoid.toMonoid.{u2} M _inst_1)) (Monoid.toMulOneClass.{u1} N (DivInvMonoid.toMonoid.{u1} N _inst_2))))) f (Inv.inv.{u2} M (DivInvMonoid.toInv.{u2} M _inst_1) x)) (Inv.inv.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) x) (DivInvMonoid.toInv.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) x) _inst_2) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M N (Monoid.toMulOneClass.{u2} M (DivInvMonoid.toMonoid.{u2} M _inst_1)) (Monoid.toMulOneClass.{u1} N (DivInvMonoid.toMonoid.{u1} N _inst_2))) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N (Monoid.toMulOneClass.{u2} M (DivInvMonoid.toMonoid.{u2} M _inst_1)) (Monoid.toMulOneClass.{u1} N (DivInvMonoid.toMonoid.{u1} N _inst_2))) M N (MulOneClass.toMul.{u2} M (Monoid.toMulOneClass.{u2} M (DivInvMonoid.toMonoid.{u2} M _inst_1))) (MulOneClass.toMul.{u1} N (Monoid.toMulOneClass.{u1} N (DivInvMonoid.toMonoid.{u1} N _inst_2))) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N (Monoid.toMulOneClass.{u2} M (DivInvMonoid.toMonoid.{u2} M _inst_1)) (Monoid.toMulOneClass.{u1} N (DivInvMonoid.toMonoid.{u1} N _inst_2))) M N (Monoid.toMulOneClass.{u2} M (DivInvMonoid.toMonoid.{u2} M _inst_1)) (Monoid.toMulOneClass.{u1} N (DivInvMonoid.toMonoid.{u1} N _inst_2)) (MonoidHom.monoidHomClass.{u2, u1} M N (Monoid.toMulOneClass.{u2} M (DivInvMonoid.toMonoid.{u2} M _inst_1)) (Monoid.toMulOneClass.{u1} N (DivInvMonoid.toMonoid.{u1} N _inst_2))))) f x))) -> (forall (a : M) (n : Int), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) (HPow.hPow.{u2, 0, u2} M Int M (instHPow.{u2, 0} M Int (DivInvMonoid.Pow.{u2} M _inst_1)) a n)) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M N (Monoid.toMulOneClass.{u2} M (DivInvMonoid.toMonoid.{u2} M _inst_1)) (Monoid.toMulOneClass.{u1} N (DivInvMonoid.toMonoid.{u1} N _inst_2))) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N (Monoid.toMulOneClass.{u2} M (DivInvMonoid.toMonoid.{u2} M _inst_1)) (Monoid.toMulOneClass.{u1} N (DivInvMonoid.toMonoid.{u1} N _inst_2))) M N (MulOneClass.toMul.{u2} M (Monoid.toMulOneClass.{u2} M (DivInvMonoid.toMonoid.{u2} M _inst_1))) (MulOneClass.toMul.{u1} N (Monoid.toMulOneClass.{u1} N (DivInvMonoid.toMonoid.{u1} N _inst_2))) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N (Monoid.toMulOneClass.{u2} M (DivInvMonoid.toMonoid.{u2} M _inst_1)) (Monoid.toMulOneClass.{u1} N (DivInvMonoid.toMonoid.{u1} N _inst_2))) M N (Monoid.toMulOneClass.{u2} M (DivInvMonoid.toMonoid.{u2} M _inst_1)) (Monoid.toMulOneClass.{u1} N (DivInvMonoid.toMonoid.{u1} N _inst_2)) (MonoidHom.monoidHomClass.{u2, u1} M N (Monoid.toMulOneClass.{u2} M (DivInvMonoid.toMonoid.{u2} M _inst_1)) (Monoid.toMulOneClass.{u1} N (DivInvMonoid.toMonoid.{u1} N _inst_2))))) f (HPow.hPow.{u2, 0, u2} M Int M (instHPow.{u2, 0} M Int (DivInvMonoid.Pow.{u2} M _inst_1)) a n)) (HPow.hPow.{u1, 0, u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) a) Int ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) a) (instHPow.{u1, 0} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) a) Int (DivInvMonoid.Pow.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) a) _inst_2)) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M N (Monoid.toMulOneClass.{u2} M (DivInvMonoid.toMonoid.{u2} M _inst_1)) (Monoid.toMulOneClass.{u1} N (DivInvMonoid.toMonoid.{u1} N _inst_2))) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N (Monoid.toMulOneClass.{u2} M (DivInvMonoid.toMonoid.{u2} M _inst_1)) (Monoid.toMulOneClass.{u1} N (DivInvMonoid.toMonoid.{u1} N _inst_2))) M N (MulOneClass.toMul.{u2} M (Monoid.toMulOneClass.{u2} M (DivInvMonoid.toMonoid.{u2} M _inst_1))) (MulOneClass.toMul.{u1} N (Monoid.toMulOneClass.{u1} N (DivInvMonoid.toMonoid.{u1} N _inst_2))) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N (Monoid.toMulOneClass.{u2} M (DivInvMonoid.toMonoid.{u2} M _inst_1)) (Monoid.toMulOneClass.{u1} N (DivInvMonoid.toMonoid.{u1} N _inst_2))) M N (Monoid.toMulOneClass.{u2} M (DivInvMonoid.toMonoid.{u2} M _inst_1)) (Monoid.toMulOneClass.{u1} N (DivInvMonoid.toMonoid.{u1} N _inst_2)) (MonoidHom.monoidHomClass.{u2, u1} M N (Monoid.toMulOneClass.{u2} M (DivInvMonoid.toMonoid.{u2} M _inst_1)) (Monoid.toMulOneClass.{u1} N (DivInvMonoid.toMonoid.{u1} N _inst_2))))) f a) n))
 Case conversion may be inaccurate. Consider using '#align monoid_hom.map_zpow' MonoidHom.map_zpow'ₓ'. -/
 @[to_additive]
 protected theorem MonoidHom.map_zpow' [DivInvMonoid M] [DivInvMonoid N] (f : M →* N)
@@ -2094,7 +2094,7 @@ end End
 lean 3 declaration is
   forall (M : Type.{u1}) [_inst_1 : MulOneClass.{u1} M], Eq.{succ u1} ((fun (_x : Monoid.End.{u1} M _inst_1) => M -> M) (OfNat.ofNat.{u1} (Monoid.End.{u1} M _inst_1) 1 (OfNat.mk.{u1} (Monoid.End.{u1} M _inst_1) 1 (One.one.{u1} (Monoid.End.{u1} M _inst_1) (MulOneClass.toHasOne.{u1} (Monoid.End.{u1} M _inst_1) (Monoid.toMulOneClass.{u1} (Monoid.End.{u1} M _inst_1) (Monoid.End.monoid.{u1} M _inst_1))))))) (coeFn.{succ u1, succ u1} (Monoid.End.{u1} M _inst_1) (fun (_x : Monoid.End.{u1} M _inst_1) => M -> M) (FunLike.hasCoeToFun.{succ u1, succ u1, succ u1} (Monoid.End.{u1} M _inst_1) M (fun (_x : M) => M) (MulHomClass.toFunLike.{u1, u1, u1} (Monoid.End.{u1} M _inst_1) M M (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u1} M _inst_1) (MonoidHomClass.toMulHomClass.{u1, u1, u1} (Monoid.End.{u1} M _inst_1) M M _inst_1 _inst_1 (Monoid.End.monoidHomClass.{u1} M _inst_1)))) (OfNat.ofNat.{u1} (Monoid.End.{u1} M _inst_1) 1 (OfNat.mk.{u1} (Monoid.End.{u1} M _inst_1) 1 (One.one.{u1} (Monoid.End.{u1} M _inst_1) (MulOneClass.toHasOne.{u1} (Monoid.End.{u1} M _inst_1) (Monoid.toMulOneClass.{u1} (Monoid.End.{u1} M _inst_1) (Monoid.End.monoid.{u1} M _inst_1))))))) (id.{succ u1} M)
 but is expected to have type
-  forall (M : Type.{u1}) [_inst_1 : MulOneClass.{u1} M], Eq.{succ u1} (forall (a : M), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => M) a) (FunLike.coe.{succ u1, succ u1, succ u1} (Monoid.End.{u1} M _inst_1) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => M) _x) (MulHomClass.toFunLike.{u1, u1, u1} (Monoid.End.{u1} M _inst_1) M M (MulOneClass.toMul.{u1} M _inst_1) (MulOneClass.toMul.{u1} M _inst_1) (MonoidHomClass.toMulHomClass.{u1, u1, u1} (Monoid.End.{u1} M _inst_1) M M _inst_1 _inst_1 (Monoid.End.instMonoidHomClassEnd.{u1} M _inst_1))) (OfNat.ofNat.{u1} (Monoid.End.{u1} M _inst_1) 1 (One.toOfNat1.{u1} (Monoid.End.{u1} M _inst_1) (Monoid.toOne.{u1} (Monoid.End.{u1} M _inst_1) (Monoid.End.instMonoidEnd.{u1} M _inst_1))))) (id.{succ u1} M)
+  forall (M : Type.{u1}) [_inst_1 : MulOneClass.{u1} M], Eq.{succ u1} (forall (a : M), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => M) a) (FunLike.coe.{succ u1, succ u1, succ u1} (Monoid.End.{u1} M _inst_1) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => M) _x) (MulHomClass.toFunLike.{u1, u1, u1} (Monoid.End.{u1} M _inst_1) M M (MulOneClass.toMul.{u1} M _inst_1) (MulOneClass.toMul.{u1} M _inst_1) (MonoidHomClass.toMulHomClass.{u1, u1, u1} (Monoid.End.{u1} M _inst_1) M M _inst_1 _inst_1 (Monoid.End.instMonoidHomClassEnd.{u1} M _inst_1))) (OfNat.ofNat.{u1} (Monoid.End.{u1} M _inst_1) 1 (One.toOfNat1.{u1} (Monoid.End.{u1} M _inst_1) (Monoid.toOne.{u1} (Monoid.End.{u1} M _inst_1) (Monoid.End.instMonoidEnd.{u1} M _inst_1))))) (id.{succ u1} M)
 Case conversion may be inaccurate. Consider using '#align monoid.coe_one Monoid.coe_oneₓ'. -/
 @[simp]
 theorem coe_one : ((1 : Monoid.End M) : M → M) = id :=
@@ -2105,7 +2105,7 @@ theorem coe_one : ((1 : Monoid.End M) : M → M) = id :=
 lean 3 declaration is
   forall (M : Type.{u1}) [_inst_1 : MulOneClass.{u1} M] (f : Monoid.End.{u1} M _inst_1) (g : Monoid.End.{u1} M _inst_1), Eq.{succ u1} ((fun (_x : Monoid.End.{u1} M _inst_1) => M -> M) (HMul.hMul.{u1, u1, u1} (Monoid.End.{u1} M _inst_1) (Monoid.End.{u1} M _inst_1) (Monoid.End.{u1} M _inst_1) (instHMul.{u1} (Monoid.End.{u1} M _inst_1) (MulOneClass.toHasMul.{u1} (Monoid.End.{u1} M _inst_1) (Monoid.toMulOneClass.{u1} (Monoid.End.{u1} M _inst_1) (Monoid.End.monoid.{u1} M _inst_1)))) f g)) (coeFn.{succ u1, succ u1} (Monoid.End.{u1} M _inst_1) (fun (_x : Monoid.End.{u1} M _inst_1) => M -> M) (FunLike.hasCoeToFun.{succ u1, succ u1, succ u1} (Monoid.End.{u1} M _inst_1) M (fun (_x : M) => M) (MulHomClass.toFunLike.{u1, u1, u1} (Monoid.End.{u1} M _inst_1) M M (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u1} M _inst_1) (MonoidHomClass.toMulHomClass.{u1, u1, u1} (Monoid.End.{u1} M _inst_1) M M _inst_1 _inst_1 (Monoid.End.monoidHomClass.{u1} M _inst_1)))) (HMul.hMul.{u1, u1, u1} (Monoid.End.{u1} M _inst_1) (Monoid.End.{u1} M _inst_1) (Monoid.End.{u1} M _inst_1) (instHMul.{u1} (Monoid.End.{u1} M _inst_1) (MulOneClass.toHasMul.{u1} (Monoid.End.{u1} M _inst_1) (Monoid.toMulOneClass.{u1} (Monoid.End.{u1} M _inst_1) (Monoid.End.monoid.{u1} M _inst_1)))) f g)) (Function.comp.{succ u1, succ u1, succ u1} M M M (coeFn.{succ u1, succ u1} (Monoid.End.{u1} M _inst_1) (fun (_x : Monoid.End.{u1} M _inst_1) => M -> M) (FunLike.hasCoeToFun.{succ u1, succ u1, succ u1} (Monoid.End.{u1} M _inst_1) M (fun (_x : M) => M) (MulHomClass.toFunLike.{u1, u1, u1} (Monoid.End.{u1} M _inst_1) M M (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u1} M _inst_1) (MonoidHomClass.toMulHomClass.{u1, u1, u1} (Monoid.End.{u1} M _inst_1) M M _inst_1 _inst_1 (Monoid.End.monoidHomClass.{u1} M _inst_1)))) f) (coeFn.{succ u1, succ u1} (Monoid.End.{u1} M _inst_1) (fun (_x : Monoid.End.{u1} M _inst_1) => M -> M) (FunLike.hasCoeToFun.{succ u1, succ u1, succ u1} (Monoid.End.{u1} M _inst_1) M (fun (_x : M) => M) (MulHomClass.toFunLike.{u1, u1, u1} (Monoid.End.{u1} M _inst_1) M M (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u1} M _inst_1) (MonoidHomClass.toMulHomClass.{u1, u1, u1} (Monoid.End.{u1} M _inst_1) M M _inst_1 _inst_1 (Monoid.End.monoidHomClass.{u1} M _inst_1)))) g))
 but is expected to have type
-  forall (M : Type.{u1}) [_inst_1 : MulOneClass.{u1} M] (f : Monoid.End.{u1} M _inst_1) (g : Monoid.End.{u1} M _inst_1), Eq.{succ u1} (forall (a : M), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => M) a) (FunLike.coe.{succ u1, succ u1, succ u1} (Monoid.End.{u1} M _inst_1) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => M) _x) (MulHomClass.toFunLike.{u1, u1, u1} (Monoid.End.{u1} M _inst_1) M M (MulOneClass.toMul.{u1} M _inst_1) (MulOneClass.toMul.{u1} M _inst_1) (MonoidHomClass.toMulHomClass.{u1, u1, u1} (Monoid.End.{u1} M _inst_1) M M _inst_1 _inst_1 (Monoid.End.instMonoidHomClassEnd.{u1} M _inst_1))) (HMul.hMul.{u1, u1, u1} (Monoid.End.{u1} M _inst_1) (Monoid.End.{u1} M _inst_1) (Monoid.End.{u1} M _inst_1) (instHMul.{u1} (Monoid.End.{u1} M _inst_1) (MulOneClass.toMul.{u1} (Monoid.End.{u1} M _inst_1) (Monoid.toMulOneClass.{u1} (Monoid.End.{u1} M _inst_1) (Monoid.End.instMonoidEnd.{u1} M _inst_1)))) f g)) (Function.comp.{succ u1, succ u1, succ u1} M M M (FunLike.coe.{succ u1, succ u1, succ u1} (Monoid.End.{u1} M _inst_1) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => M) _x) (MulHomClass.toFunLike.{u1, u1, u1} (Monoid.End.{u1} M _inst_1) M M (MulOneClass.toMul.{u1} M _inst_1) (MulOneClass.toMul.{u1} M _inst_1) (MonoidHomClass.toMulHomClass.{u1, u1, u1} (Monoid.End.{u1} M _inst_1) M M _inst_1 _inst_1 (Monoid.End.instMonoidHomClassEnd.{u1} M _inst_1))) f) (FunLike.coe.{succ u1, succ u1, succ u1} (Monoid.End.{u1} M _inst_1) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => M) _x) (MulHomClass.toFunLike.{u1, u1, u1} (Monoid.End.{u1} M _inst_1) M M (MulOneClass.toMul.{u1} M _inst_1) (MulOneClass.toMul.{u1} M _inst_1) (MonoidHomClass.toMulHomClass.{u1, u1, u1} (Monoid.End.{u1} M _inst_1) M M _inst_1 _inst_1 (Monoid.End.instMonoidHomClassEnd.{u1} M _inst_1))) g))
+  forall (M : Type.{u1}) [_inst_1 : MulOneClass.{u1} M] (f : Monoid.End.{u1} M _inst_1) (g : Monoid.End.{u1} M _inst_1), Eq.{succ u1} (forall (a : M), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => M) a) (FunLike.coe.{succ u1, succ u1, succ u1} (Monoid.End.{u1} M _inst_1) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => M) _x) (MulHomClass.toFunLike.{u1, u1, u1} (Monoid.End.{u1} M _inst_1) M M (MulOneClass.toMul.{u1} M _inst_1) (MulOneClass.toMul.{u1} M _inst_1) (MonoidHomClass.toMulHomClass.{u1, u1, u1} (Monoid.End.{u1} M _inst_1) M M _inst_1 _inst_1 (Monoid.End.instMonoidHomClassEnd.{u1} M _inst_1))) (HMul.hMul.{u1, u1, u1} (Monoid.End.{u1} M _inst_1) (Monoid.End.{u1} M _inst_1) (Monoid.End.{u1} M _inst_1) (instHMul.{u1} (Monoid.End.{u1} M _inst_1) (MulOneClass.toMul.{u1} (Monoid.End.{u1} M _inst_1) (Monoid.toMulOneClass.{u1} (Monoid.End.{u1} M _inst_1) (Monoid.End.instMonoidEnd.{u1} M _inst_1)))) f g)) (Function.comp.{succ u1, succ u1, succ u1} M M M (FunLike.coe.{succ u1, succ u1, succ u1} (Monoid.End.{u1} M _inst_1) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => M) _x) (MulHomClass.toFunLike.{u1, u1, u1} (Monoid.End.{u1} M _inst_1) M M (MulOneClass.toMul.{u1} M _inst_1) (MulOneClass.toMul.{u1} M _inst_1) (MonoidHomClass.toMulHomClass.{u1, u1, u1} (Monoid.End.{u1} M _inst_1) M M _inst_1 _inst_1 (Monoid.End.instMonoidHomClassEnd.{u1} M _inst_1))) f) (FunLike.coe.{succ u1, succ u1, succ u1} (Monoid.End.{u1} M _inst_1) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => M) _x) (MulHomClass.toFunLike.{u1, u1, u1} (Monoid.End.{u1} M _inst_1) M M (MulOneClass.toMul.{u1} M _inst_1) (MulOneClass.toMul.{u1} M _inst_1) (MonoidHomClass.toMulHomClass.{u1, u1, u1} (Monoid.End.{u1} M _inst_1) M M _inst_1 _inst_1 (Monoid.End.instMonoidHomClassEnd.{u1} M _inst_1))) g))
 Case conversion may be inaccurate. Consider using '#align monoid.coe_mul Monoid.coe_mulₓ'. -/
 @[simp]
 theorem coe_mul (f g) : ((f * g : Monoid.End M) : M → M) = f ∘ g :=
@@ -2147,7 +2147,7 @@ end End
 lean 3 declaration is
   forall (A : Type.{u1}) [_inst_1 : AddZeroClass.{u1} A], Eq.{succ u1} ((fun (_x : AddMonoid.End.{u1} A _inst_1) => A -> A) (OfNat.ofNat.{u1} (AddMonoid.End.{u1} A _inst_1) 1 (OfNat.mk.{u1} (AddMonoid.End.{u1} A _inst_1) 1 (One.one.{u1} (AddMonoid.End.{u1} A _inst_1) (MulOneClass.toHasOne.{u1} (AddMonoid.End.{u1} A _inst_1) (Monoid.toMulOneClass.{u1} (AddMonoid.End.{u1} A _inst_1) (AddMonoid.End.monoid.{u1} A _inst_1))))))) (coeFn.{succ u1, succ u1} (AddMonoid.End.{u1} A _inst_1) (fun (_x : AddMonoid.End.{u1} A _inst_1) => A -> A) (FunLike.hasCoeToFun.{succ u1, succ u1, succ u1} (AddMonoid.End.{u1} A _inst_1) A (fun (_x : A) => A) (AddHomClass.toFunLike.{u1, u1, u1} (AddMonoid.End.{u1} A _inst_1) A A (AddZeroClass.toHasAdd.{u1} A _inst_1) (AddZeroClass.toHasAdd.{u1} A _inst_1) (AddMonoidHomClass.toAddHomClass.{u1, u1, u1} (AddMonoid.End.{u1} A _inst_1) A A _inst_1 _inst_1 (AddMonoid.End.addMonoidHomClass.{u1} A _inst_1)))) (OfNat.ofNat.{u1} (AddMonoid.End.{u1} A _inst_1) 1 (OfNat.mk.{u1} (AddMonoid.End.{u1} A _inst_1) 1 (One.one.{u1} (AddMonoid.End.{u1} A _inst_1) (MulOneClass.toHasOne.{u1} (AddMonoid.End.{u1} A _inst_1) (Monoid.toMulOneClass.{u1} (AddMonoid.End.{u1} A _inst_1) (AddMonoid.End.monoid.{u1} A _inst_1))))))) (id.{succ u1} A)
 but is expected to have type
-  forall (A : Type.{u1}) [_inst_1 : AddZeroClass.{u1} A], Eq.{succ u1} (forall (a : A), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.398 : A) => A) a) (FunLike.coe.{succ u1, succ u1, succ u1} (AddMonoid.End.{u1} A _inst_1) A (fun (_x : A) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.398 : A) => A) _x) (AddHomClass.toFunLike.{u1, u1, u1} (AddMonoid.End.{u1} A _inst_1) A A (AddZeroClass.toAdd.{u1} A _inst_1) (AddZeroClass.toAdd.{u1} A _inst_1) (AddMonoidHomClass.toAddHomClass.{u1, u1, u1} (AddMonoid.End.{u1} A _inst_1) A A _inst_1 _inst_1 (AddMonoid.End.instAddMonoidHomClassEnd.{u1} A _inst_1))) (OfNat.ofNat.{u1} (AddMonoid.End.{u1} A _inst_1) 1 (One.toOfNat1.{u1} (AddMonoid.End.{u1} A _inst_1) (Monoid.toOne.{u1} (AddMonoid.End.{u1} A _inst_1) (AddMonoid.End.monoid.{u1} A _inst_1))))) (id.{succ u1} A)
+  forall (A : Type.{u1}) [_inst_1 : AddZeroClass.{u1} A], Eq.{succ u1} (forall (a : A), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.403 : A) => A) a) (FunLike.coe.{succ u1, succ u1, succ u1} (AddMonoid.End.{u1} A _inst_1) A (fun (_x : A) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.403 : A) => A) _x) (AddHomClass.toFunLike.{u1, u1, u1} (AddMonoid.End.{u1} A _inst_1) A A (AddZeroClass.toAdd.{u1} A _inst_1) (AddZeroClass.toAdd.{u1} A _inst_1) (AddMonoidHomClass.toAddHomClass.{u1, u1, u1} (AddMonoid.End.{u1} A _inst_1) A A _inst_1 _inst_1 (AddMonoid.End.instAddMonoidHomClassEnd.{u1} A _inst_1))) (OfNat.ofNat.{u1} (AddMonoid.End.{u1} A _inst_1) 1 (One.toOfNat1.{u1} (AddMonoid.End.{u1} A _inst_1) (Monoid.toOne.{u1} (AddMonoid.End.{u1} A _inst_1) (AddMonoid.End.monoid.{u1} A _inst_1))))) (id.{succ u1} A)
 Case conversion may be inaccurate. Consider using '#align add_monoid.coe_one AddMonoid.coe_oneₓ'. -/
 @[simp]
 theorem coe_one : ((1 : AddMonoid.End A) : A → A) = id :=
@@ -2158,7 +2158,7 @@ theorem coe_one : ((1 : AddMonoid.End A) : A → A) = id :=
 lean 3 declaration is
   forall (A : Type.{u1}) [_inst_1 : AddZeroClass.{u1} A] (f : AddMonoid.End.{u1} A _inst_1) (g : AddMonoid.End.{u1} A _inst_1), Eq.{succ u1} ((fun (_x : AddMonoid.End.{u1} A _inst_1) => A -> A) (HMul.hMul.{u1, u1, u1} (AddMonoid.End.{u1} A _inst_1) (AddMonoid.End.{u1} A _inst_1) (AddMonoid.End.{u1} A _inst_1) (instHMul.{u1} (AddMonoid.End.{u1} A _inst_1) (MulOneClass.toHasMul.{u1} (AddMonoid.End.{u1} A _inst_1) (Monoid.toMulOneClass.{u1} (AddMonoid.End.{u1} A _inst_1) (AddMonoid.End.monoid.{u1} A _inst_1)))) f g)) (coeFn.{succ u1, succ u1} (AddMonoid.End.{u1} A _inst_1) (fun (_x : AddMonoid.End.{u1} A _inst_1) => A -> A) (FunLike.hasCoeToFun.{succ u1, succ u1, succ u1} (AddMonoid.End.{u1} A _inst_1) A (fun (_x : A) => A) (AddHomClass.toFunLike.{u1, u1, u1} (AddMonoid.End.{u1} A _inst_1) A A (AddZeroClass.toHasAdd.{u1} A _inst_1) (AddZeroClass.toHasAdd.{u1} A _inst_1) (AddMonoidHomClass.toAddHomClass.{u1, u1, u1} (AddMonoid.End.{u1} A _inst_1) A A _inst_1 _inst_1 (AddMonoid.End.addMonoidHomClass.{u1} A _inst_1)))) (HMul.hMul.{u1, u1, u1} (AddMonoid.End.{u1} A _inst_1) (AddMonoid.End.{u1} A _inst_1) (AddMonoid.End.{u1} A _inst_1) (instHMul.{u1} (AddMonoid.End.{u1} A _inst_1) (MulOneClass.toHasMul.{u1} (AddMonoid.End.{u1} A _inst_1) (Monoid.toMulOneClass.{u1} (AddMonoid.End.{u1} A _inst_1) (AddMonoid.End.monoid.{u1} A _inst_1)))) f g)) (Function.comp.{succ u1, succ u1, succ u1} A A A (coeFn.{succ u1, succ u1} (AddMonoid.End.{u1} A _inst_1) (fun (_x : AddMonoid.End.{u1} A _inst_1) => A -> A) (FunLike.hasCoeToFun.{succ u1, succ u1, succ u1} (AddMonoid.End.{u1} A _inst_1) A (fun (_x : A) => A) (AddHomClass.toFunLike.{u1, u1, u1} (AddMonoid.End.{u1} A _inst_1) A A (AddZeroClass.toHasAdd.{u1} A _inst_1) (AddZeroClass.toHasAdd.{u1} A _inst_1) (AddMonoidHomClass.toAddHomClass.{u1, u1, u1} (AddMonoid.End.{u1} A _inst_1) A A _inst_1 _inst_1 (AddMonoid.End.addMonoidHomClass.{u1} A _inst_1)))) f) (coeFn.{succ u1, succ u1} (AddMonoid.End.{u1} A _inst_1) (fun (_x : AddMonoid.End.{u1} A _inst_1) => A -> A) (FunLike.hasCoeToFun.{succ u1, succ u1, succ u1} (AddMonoid.End.{u1} A _inst_1) A (fun (_x : A) => A) (AddHomClass.toFunLike.{u1, u1, u1} (AddMonoid.End.{u1} A _inst_1) A A (AddZeroClass.toHasAdd.{u1} A _inst_1) (AddZeroClass.toHasAdd.{u1} A _inst_1) (AddMonoidHomClass.toAddHomClass.{u1, u1, u1} (AddMonoid.End.{u1} A _inst_1) A A _inst_1 _inst_1 (AddMonoid.End.addMonoidHomClass.{u1} A _inst_1)))) g))
 but is expected to have type
-  forall (A : Type.{u1}) [_inst_1 : AddZeroClass.{u1} A] (f : AddMonoid.End.{u1} A _inst_1) (g : AddMonoid.End.{u1} A _inst_1), Eq.{succ u1} (forall (a : A), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.398 : A) => A) a) (FunLike.coe.{succ u1, succ u1, succ u1} (AddMonoid.End.{u1} A _inst_1) A (fun (_x : A) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.398 : A) => A) _x) (AddHomClass.toFunLike.{u1, u1, u1} (AddMonoid.End.{u1} A _inst_1) A A (AddZeroClass.toAdd.{u1} A _inst_1) (AddZeroClass.toAdd.{u1} A _inst_1) (AddMonoidHomClass.toAddHomClass.{u1, u1, u1} (AddMonoid.End.{u1} A _inst_1) A A _inst_1 _inst_1 (AddMonoid.End.instAddMonoidHomClassEnd.{u1} A _inst_1))) (HMul.hMul.{u1, u1, u1} (AddMonoid.End.{u1} A _inst_1) (AddMonoid.End.{u1} A _inst_1) (AddMonoid.End.{u1} A _inst_1) (instHMul.{u1} (AddMonoid.End.{u1} A _inst_1) (MulOneClass.toMul.{u1} (AddMonoid.End.{u1} A _inst_1) (Monoid.toMulOneClass.{u1} (AddMonoid.End.{u1} A _inst_1) (AddMonoid.End.monoid.{u1} A _inst_1)))) f g)) (Function.comp.{succ u1, succ u1, succ u1} A A A (FunLike.coe.{succ u1, succ u1, succ u1} (AddMonoid.End.{u1} A _inst_1) A (fun (_x : A) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.398 : A) => A) _x) (AddHomClass.toFunLike.{u1, u1, u1} (AddMonoid.End.{u1} A _inst_1) A A (AddZeroClass.toAdd.{u1} A _inst_1) (AddZeroClass.toAdd.{u1} A _inst_1) (AddMonoidHomClass.toAddHomClass.{u1, u1, u1} (AddMonoid.End.{u1} A _inst_1) A A _inst_1 _inst_1 (AddMonoid.End.instAddMonoidHomClassEnd.{u1} A _inst_1))) f) (FunLike.coe.{succ u1, succ u1, succ u1} (AddMonoid.End.{u1} A _inst_1) A (fun (_x : A) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.398 : A) => A) _x) (AddHomClass.toFunLike.{u1, u1, u1} (AddMonoid.End.{u1} A _inst_1) A A (AddZeroClass.toAdd.{u1} A _inst_1) (AddZeroClass.toAdd.{u1} A _inst_1) (AddMonoidHomClass.toAddHomClass.{u1, u1, u1} (AddMonoid.End.{u1} A _inst_1) A A _inst_1 _inst_1 (AddMonoid.End.instAddMonoidHomClassEnd.{u1} A _inst_1))) g))
+  forall (A : Type.{u1}) [_inst_1 : AddZeroClass.{u1} A] (f : AddMonoid.End.{u1} A _inst_1) (g : AddMonoid.End.{u1} A _inst_1), Eq.{succ u1} (forall (a : A), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.403 : A) => A) a) (FunLike.coe.{succ u1, succ u1, succ u1} (AddMonoid.End.{u1} A _inst_1) A (fun (_x : A) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.403 : A) => A) _x) (AddHomClass.toFunLike.{u1, u1, u1} (AddMonoid.End.{u1} A _inst_1) A A (AddZeroClass.toAdd.{u1} A _inst_1) (AddZeroClass.toAdd.{u1} A _inst_1) (AddMonoidHomClass.toAddHomClass.{u1, u1, u1} (AddMonoid.End.{u1} A _inst_1) A A _inst_1 _inst_1 (AddMonoid.End.instAddMonoidHomClassEnd.{u1} A _inst_1))) (HMul.hMul.{u1, u1, u1} (AddMonoid.End.{u1} A _inst_1) (AddMonoid.End.{u1} A _inst_1) (AddMonoid.End.{u1} A _inst_1) (instHMul.{u1} (AddMonoid.End.{u1} A _inst_1) (MulOneClass.toMul.{u1} (AddMonoid.End.{u1} A _inst_1) (Monoid.toMulOneClass.{u1} (AddMonoid.End.{u1} A _inst_1) (AddMonoid.End.monoid.{u1} A _inst_1)))) f g)) (Function.comp.{succ u1, succ u1, succ u1} A A A (FunLike.coe.{succ u1, succ u1, succ u1} (AddMonoid.End.{u1} A _inst_1) A (fun (_x : A) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.403 : A) => A) _x) (AddHomClass.toFunLike.{u1, u1, u1} (AddMonoid.End.{u1} A _inst_1) A A (AddZeroClass.toAdd.{u1} A _inst_1) (AddZeroClass.toAdd.{u1} A _inst_1) (AddMonoidHomClass.toAddHomClass.{u1, u1, u1} (AddMonoid.End.{u1} A _inst_1) A A _inst_1 _inst_1 (AddMonoid.End.instAddMonoidHomClassEnd.{u1} A _inst_1))) f) (FunLike.coe.{succ u1, succ u1, succ u1} (AddMonoid.End.{u1} A _inst_1) A (fun (_x : A) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.403 : A) => A) _x) (AddHomClass.toFunLike.{u1, u1, u1} (AddMonoid.End.{u1} A _inst_1) A A (AddZeroClass.toAdd.{u1} A _inst_1) (AddZeroClass.toAdd.{u1} A _inst_1) (AddMonoidHomClass.toAddHomClass.{u1, u1, u1} (AddMonoid.End.{u1} A _inst_1) A A _inst_1 _inst_1 (AddMonoid.End.instAddMonoidHomClassEnd.{u1} A _inst_1))) g))
 Case conversion may be inaccurate. Consider using '#align add_monoid.coe_mul AddMonoid.coe_mulₓ'. -/
 @[simp]
 theorem coe_mul (f g) : ((f * g : AddMonoid.End A) : A → A) = f ∘ g :=
@@ -2197,7 +2197,7 @@ add_decl_doc AddMonoidHom.hasZero
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : One.{u1} M] [_inst_2 : One.{u2} N] (x : M), Eq.{succ u2} N (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (OneHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : OneHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (OneHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) (OfNat.ofNat.{max u2 u1} (OneHom.{u1, u2} M N _inst_1 _inst_2) 1 (OfNat.mk.{max u2 u1} (OneHom.{u1, u2} M N _inst_1 _inst_2) 1 (One.one.{max u2 u1} (OneHom.{u1, u2} M N _inst_1 _inst_2) (OneHom.hasOne.{u1, u2} M N _inst_1 _inst_2)))) x) (OfNat.ofNat.{u2} N 1 (OfNat.mk.{u2} N 1 (One.one.{u2} N _inst_2)))
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : One.{u2} M] [_inst_2 : One.{u1} N] (x : M), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1254 : M) => N) x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (OneHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1254 : M) => N) _x) (OneHomClass.toFunLike.{max u2 u1, u2, u1} (OneHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (OneHom.oneHomClass.{u2, u1} M N _inst_1 _inst_2)) (OfNat.ofNat.{max u2 u1} (OneHom.{u2, u1} M N _inst_1 _inst_2) 1 (One.toOfNat1.{max u2 u1} (OneHom.{u2, u1} M N _inst_1 _inst_2) (instOneOneHom.{u2, u1} M N _inst_1 _inst_2))) x) (OfNat.ofNat.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1254 : M) => N) x) 1 (One.toOfNat1.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1254 : M) => N) x) _inst_2))
+  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : One.{u2} M] [_inst_2 : One.{u1} N] (x : M), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1262 : M) => N) x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (OneHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1262 : M) => N) _x) (OneHomClass.toFunLike.{max u2 u1, u2, u1} (OneHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (OneHom.oneHomClass.{u2, u1} M N _inst_1 _inst_2)) (OfNat.ofNat.{max u2 u1} (OneHom.{u2, u1} M N _inst_1 _inst_2) 1 (One.toOfNat1.{max u2 u1} (OneHom.{u2, u1} M N _inst_1 _inst_2) (instOneOneHom.{u2, u1} M N _inst_1 _inst_2))) x) (OfNat.ofNat.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1262 : M) => N) x) 1 (One.toOfNat1.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1262 : M) => N) x) _inst_2))
 Case conversion may be inaccurate. Consider using '#align one_hom.one_apply OneHom.one_applyₓ'. -/
 @[simp, to_additive]
 theorem OneHom.one_apply [One M] [One N] (x : M) : (1 : OneHom M N) x = 1 :=
@@ -2209,7 +2209,7 @@ theorem OneHom.one_apply [One M] [One N] (x : M) : (1 : OneHom M N) x = 1 :=
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N] (x : M), Eq.{succ u2} N (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MonoidHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MonoidHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) (OfNat.ofNat.{max u2 u1} (MonoidHom.{u1, u2} M N _inst_1 _inst_2) 1 (OfNat.mk.{max u2 u1} (MonoidHom.{u1, u2} M N _inst_1 _inst_2) 1 (One.one.{max u2 u1} (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.hasOne.{u1, u2} M N _inst_1 _inst_2)))) x) (OfNat.ofNat.{u2} N 1 (OfNat.mk.{u2} N 1 (One.one.{u2} N (MulOneClass.toHasOne.{u2} N _inst_2))))
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u1} N] (x : M), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2))) (OfNat.ofNat.{max u2 u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) 1 (One.toOfNat1.{max u2 u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (instOneMonoidHom.{u2, u1} M N _inst_1 _inst_2))) x) (OfNat.ofNat.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) x) 1 (One.toOfNat1.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) x) (MulOneClass.toOne.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) x) _inst_2)))
+  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u1} N] (x : M), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2))) (OfNat.ofNat.{max u2 u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) 1 (One.toOfNat1.{max u2 u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (instOneMonoidHom.{u2, u1} M N _inst_1 _inst_2))) x) (OfNat.ofNat.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) x) 1 (One.toOfNat1.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) x) (MulOneClass.toOne.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) x) _inst_2)))
 Case conversion may be inaccurate. Consider using '#align monoid_hom.one_apply MonoidHom.one_applyₓ'. -/
 @[simp, to_additive]
 theorem MonoidHom.one_apply [MulOneClass M] [MulOneClass N] (x : M) : (1 : M →* N) x = 1 :=
@@ -2279,7 +2279,7 @@ add_decl_doc AddHom.hasAdd
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} {mM : Mul.{u1} M} {mN : CommSemigroup.{u2} N} (f : MulHom.{u1, u2} M N mM (Semigroup.toHasMul.{u2} N (CommSemigroup.toSemigroup.{u2} N mN))) (g : MulHom.{u1, u2} M N mM (Semigroup.toHasMul.{u2} N (CommSemigroup.toSemigroup.{u2} N mN))) (x : M), Eq.{succ u2} N (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MulHom.{u1, u2} M N mM (Semigroup.toHasMul.{u2} N (CommSemigroup.toSemigroup.{u2} N mN))) (fun (_x : MulHom.{u1, u2} M N mM (Semigroup.toHasMul.{u2} N (CommSemigroup.toSemigroup.{u2} N mN))) => M -> N) (MulHom.hasCoeToFun.{u1, u2} M N mM (Semigroup.toHasMul.{u2} N (CommSemigroup.toSemigroup.{u2} N mN))) (HMul.hMul.{max u2 u1, max u2 u1, max u2 u1} (MulHom.{u1, u2} M N mM (Semigroup.toHasMul.{u2} N (CommSemigroup.toSemigroup.{u2} N mN))) (MulHom.{u1, u2} M N mM (Semigroup.toHasMul.{u2} N (CommSemigroup.toSemigroup.{u2} N mN))) (MulHom.{u1, u2} M N mM (Semigroup.toHasMul.{u2} N (CommSemigroup.toSemigroup.{u2} N mN))) (instHMul.{max u2 u1} (MulHom.{u1, u2} M N mM (Semigroup.toHasMul.{u2} N (CommSemigroup.toSemigroup.{u2} N mN))) (MulHom.hasMul.{u1, u2} M N mM mN)) f g) x) (HMul.hMul.{u2, u2, u2} N N N (instHMul.{u2} N (Semigroup.toHasMul.{u2} N (CommSemigroup.toSemigroup.{u2} N mN))) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MulHom.{u1, u2} M N mM (Semigroup.toHasMul.{u2} N (CommSemigroup.toSemigroup.{u2} N mN))) (fun (_x : MulHom.{u1, u2} M N mM (Semigroup.toHasMul.{u2} N (CommSemigroup.toSemigroup.{u2} N mN))) => M -> N) (MulHom.hasCoeToFun.{u1, u2} M N mM (Semigroup.toHasMul.{u2} N (CommSemigroup.toSemigroup.{u2} N mN))) f x) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MulHom.{u1, u2} M N mM (Semigroup.toHasMul.{u2} N (CommSemigroup.toSemigroup.{u2} N mN))) (fun (_x : MulHom.{u1, u2} M N mM (Semigroup.toHasMul.{u2} N (CommSemigroup.toSemigroup.{u2} N mN))) => M -> N) (MulHom.hasCoeToFun.{u1, u2} M N mM (Semigroup.toHasMul.{u2} N (CommSemigroup.toSemigroup.{u2} N mN))) g x))
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} {mM : Mul.{u2} M} {mN : CommSemigroup.{u1} N} (f : MulHom.{u2, u1} M N mM (Semigroup.toMul.{u1} N (CommSemigroup.toSemigroup.{u1} N mN))) (g : MulHom.{u2, u1} M N mM (Semigroup.toMul.{u1} N (CommSemigroup.toSemigroup.{u1} N mN))) (x : M), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N mM (Semigroup.toMul.{u1} N (CommSemigroup.toSemigroup.{u1} N mN))) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N mM (Semigroup.toMul.{u1} N (CommSemigroup.toSemigroup.{u1} N mN))) M N mM (Semigroup.toMul.{u1} N (CommSemigroup.toSemigroup.{u1} N mN)) (MulHom.mulHomClass.{u2, u1} M N mM (Semigroup.toMul.{u1} N (CommSemigroup.toSemigroup.{u1} N mN)))) (HMul.hMul.{max u2 u1, max u2 u1, max u2 u1} (MulHom.{u2, u1} M N mM (Semigroup.toMul.{u1} N (CommSemigroup.toSemigroup.{u1} N mN))) (MulHom.{u2, u1} M N mM (Semigroup.toMul.{u1} N (CommSemigroup.toSemigroup.{u1} N mN))) (MulHom.{u2, u1} M N mM (Semigroup.toMul.{u1} N (CommSemigroup.toSemigroup.{u1} N mN))) (instHMul.{max u2 u1} (MulHom.{u2, u1} M N mM (Semigroup.toMul.{u1} N (CommSemigroup.toSemigroup.{u1} N mN))) (MulHom.instMulMulHomToMulToSemigroup.{u2, u1} M N mM mN)) f g) x) (HMul.hMul.{u1, u1, u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) x) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) x) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) x) (instHMul.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) x) (Semigroup.toMul.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) x) (CommSemigroup.toSemigroup.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) x) mN))) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N mM (Semigroup.toMul.{u1} N (CommSemigroup.toSemigroup.{u1} N mN))) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N mM (Semigroup.toMul.{u1} N (CommSemigroup.toSemigroup.{u1} N mN))) M N mM (Semigroup.toMul.{u1} N (CommSemigroup.toSemigroup.{u1} N mN)) (MulHom.mulHomClass.{u2, u1} M N mM (Semigroup.toMul.{u1} N (CommSemigroup.toSemigroup.{u1} N mN)))) f x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N mM (Semigroup.toMul.{u1} N (CommSemigroup.toSemigroup.{u1} N mN))) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N mM (Semigroup.toMul.{u1} N (CommSemigroup.toSemigroup.{u1} N mN))) M N mM (Semigroup.toMul.{u1} N (CommSemigroup.toSemigroup.{u1} N mN)) (MulHom.mulHomClass.{u2, u1} M N mM (Semigroup.toMul.{u1} N (CommSemigroup.toSemigroup.{u1} N mN)))) g x))
+  forall {M : Type.{u2}} {N : Type.{u1}} {mM : Mul.{u2} M} {mN : CommSemigroup.{u1} N} (f : MulHom.{u2, u1} M N mM (Semigroup.toMul.{u1} N (CommSemigroup.toSemigroup.{u1} N mN))) (g : MulHom.{u2, u1} M N mM (Semigroup.toMul.{u1} N (CommSemigroup.toSemigroup.{u1} N mN))) (x : M), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N mM (Semigroup.toMul.{u1} N (CommSemigroup.toSemigroup.{u1} N mN))) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N mM (Semigroup.toMul.{u1} N (CommSemigroup.toSemigroup.{u1} N mN))) M N mM (Semigroup.toMul.{u1} N (CommSemigroup.toSemigroup.{u1} N mN)) (MulHom.mulHomClass.{u2, u1} M N mM (Semigroup.toMul.{u1} N (CommSemigroup.toSemigroup.{u1} N mN)))) (HMul.hMul.{max u2 u1, max u2 u1, max u2 u1} (MulHom.{u2, u1} M N mM (Semigroup.toMul.{u1} N (CommSemigroup.toSemigroup.{u1} N mN))) (MulHom.{u2, u1} M N mM (Semigroup.toMul.{u1} N (CommSemigroup.toSemigroup.{u1} N mN))) (MulHom.{u2, u1} M N mM (Semigroup.toMul.{u1} N (CommSemigroup.toSemigroup.{u1} N mN))) (instHMul.{max u2 u1} (MulHom.{u2, u1} M N mM (Semigroup.toMul.{u1} N (CommSemigroup.toSemigroup.{u1} N mN))) (MulHom.instMulMulHomToMulToSemigroup.{u2, u1} M N mM mN)) f g) x) (HMul.hMul.{u1, u1, u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) x) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) x) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) x) (instHMul.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) x) (Semigroup.toMul.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) x) (CommSemigroup.toSemigroup.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) x) mN))) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N mM (Semigroup.toMul.{u1} N (CommSemigroup.toSemigroup.{u1} N mN))) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N mM (Semigroup.toMul.{u1} N (CommSemigroup.toSemigroup.{u1} N mN))) M N mM (Semigroup.toMul.{u1} N (CommSemigroup.toSemigroup.{u1} N mN)) (MulHom.mulHomClass.{u2, u1} M N mM (Semigroup.toMul.{u1} N (CommSemigroup.toSemigroup.{u1} N mN)))) f x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N mM (Semigroup.toMul.{u1} N (CommSemigroup.toSemigroup.{u1} N mN))) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N mM (Semigroup.toMul.{u1} N (CommSemigroup.toSemigroup.{u1} N mN))) M N mM (Semigroup.toMul.{u1} N (CommSemigroup.toSemigroup.{u1} N mN)) (MulHom.mulHomClass.{u2, u1} M N mM (Semigroup.toMul.{u1} N (CommSemigroup.toSemigroup.{u1} N mN)))) g x))
 Case conversion may be inaccurate. Consider using '#align mul_hom.mul_apply MulHom.mul_applyₓ'. -/
 @[simp, to_additive]
 theorem mul_apply {M N} {mM : Mul M} {mN : CommSemigroup N} (f g : M →ₙ* N) (x : M) :
@@ -2342,7 +2342,7 @@ add_decl_doc AddMonoidHom.hasAdd
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} {mM : MulOneClass.{u1} M} {mN : CommMonoid.{u2} N} (f : MonoidHom.{u1, u2} M N mM (Monoid.toMulOneClass.{u2} N (CommMonoid.toMonoid.{u2} N mN))) (g : MonoidHom.{u1, u2} M N mM (Monoid.toMulOneClass.{u2} N (CommMonoid.toMonoid.{u2} N mN))) (x : M), Eq.{succ u2} N (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} M N mM (Monoid.toMulOneClass.{u2} N (CommMonoid.toMonoid.{u2} N mN))) (fun (_x : MonoidHom.{u1, u2} M N mM (Monoid.toMulOneClass.{u2} N (CommMonoid.toMonoid.{u2} N mN))) => M -> N) (MonoidHom.hasCoeToFun.{u1, u2} M N mM (Monoid.toMulOneClass.{u2} N (CommMonoid.toMonoid.{u2} N mN))) (HMul.hMul.{max u2 u1, max u2 u1, max u2 u1} (MonoidHom.{u1, u2} M N mM (Monoid.toMulOneClass.{u2} N (CommMonoid.toMonoid.{u2} N mN))) (MonoidHom.{u1, u2} M N mM (Monoid.toMulOneClass.{u2} N (CommMonoid.toMonoid.{u2} N mN))) (MonoidHom.{u1, u2} M N mM (Monoid.toMulOneClass.{u2} N (CommMonoid.toMonoid.{u2} N mN))) (instHMul.{max u2 u1} (MonoidHom.{u1, u2} M N mM (Monoid.toMulOneClass.{u2} N (CommMonoid.toMonoid.{u2} N mN))) (MonoidHom.hasMul.{u1, u2} M N mM mN)) f g) x) (HMul.hMul.{u2, u2, u2} N N N (instHMul.{u2} N (MulOneClass.toHasMul.{u2} N (Monoid.toMulOneClass.{u2} N (CommMonoid.toMonoid.{u2} N mN)))) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} M N mM (Monoid.toMulOneClass.{u2} N (CommMonoid.toMonoid.{u2} N mN))) (fun (_x : MonoidHom.{u1, u2} M N mM (Monoid.toMulOneClass.{u2} N (CommMonoid.toMonoid.{u2} N mN))) => M -> N) (MonoidHom.hasCoeToFun.{u1, u2} M N mM (Monoid.toMulOneClass.{u2} N (CommMonoid.toMonoid.{u2} N mN))) f x) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} M N mM (Monoid.toMulOneClass.{u2} N (CommMonoid.toMonoid.{u2} N mN))) (fun (_x : MonoidHom.{u1, u2} M N mM (Monoid.toMulOneClass.{u2} N (CommMonoid.toMonoid.{u2} N mN))) => M -> N) (MonoidHom.hasCoeToFun.{u1, u2} M N mM (Monoid.toMulOneClass.{u2} N (CommMonoid.toMonoid.{u2} N mN))) g x))
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} {mM : MulOneClass.{u2} M} {mN : CommMonoid.{u1} N} (f : MonoidHom.{u2, u1} M N mM (Monoid.toMulOneClass.{u1} N (CommMonoid.toMonoid.{u1} N mN))) (g : MonoidHom.{u2, u1} M N mM (Monoid.toMulOneClass.{u1} N (CommMonoid.toMonoid.{u1} N mN))) (x : M), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M N mM (Monoid.toMulOneClass.{u1} N (CommMonoid.toMonoid.{u1} N mN))) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N mM (Monoid.toMulOneClass.{u1} N (CommMonoid.toMonoid.{u1} N mN))) M N (MulOneClass.toMul.{u2} M mM) (MulOneClass.toMul.{u1} N (Monoid.toMulOneClass.{u1} N (CommMonoid.toMonoid.{u1} N mN))) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N mM (Monoid.toMulOneClass.{u1} N (CommMonoid.toMonoid.{u1} N mN))) M N mM (Monoid.toMulOneClass.{u1} N (CommMonoid.toMonoid.{u1} N mN)) (MonoidHom.monoidHomClass.{u2, u1} M N mM (Monoid.toMulOneClass.{u1} N (CommMonoid.toMonoid.{u1} N mN))))) (HMul.hMul.{max u2 u1, max u2 u1, max u2 u1} (MonoidHom.{u2, u1} M N mM (Monoid.toMulOneClass.{u1} N (CommMonoid.toMonoid.{u1} N mN))) (MonoidHom.{u2, u1} M N mM (Monoid.toMulOneClass.{u1} N (CommMonoid.toMonoid.{u1} N mN))) (MonoidHom.{u2, u1} M N mM (Monoid.toMulOneClass.{u1} N (CommMonoid.toMonoid.{u1} N mN))) (instHMul.{max u2 u1} (MonoidHom.{u2, u1} M N mM (Monoid.toMulOneClass.{u1} N (CommMonoid.toMonoid.{u1} N mN))) (MonoidHom.mul.{u2, u1} M N mM mN)) f g) x) (HMul.hMul.{u1, u1, u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) x) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) x) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) x) (instHMul.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) x) (MulOneClass.toMul.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) x) (Monoid.toMulOneClass.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) x) (CommMonoid.toMonoid.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) x) mN)))) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M N mM (Monoid.toMulOneClass.{u1} N (CommMonoid.toMonoid.{u1} N mN))) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N mM (Monoid.toMulOneClass.{u1} N (CommMonoid.toMonoid.{u1} N mN))) M N (MulOneClass.toMul.{u2} M mM) (MulOneClass.toMul.{u1} N (Monoid.toMulOneClass.{u1} N (CommMonoid.toMonoid.{u1} N mN))) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N mM (Monoid.toMulOneClass.{u1} N (CommMonoid.toMonoid.{u1} N mN))) M N mM (Monoid.toMulOneClass.{u1} N (CommMonoid.toMonoid.{u1} N mN)) (MonoidHom.monoidHomClass.{u2, u1} M N mM (Monoid.toMulOneClass.{u1} N (CommMonoid.toMonoid.{u1} N mN))))) f x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M N mM (Monoid.toMulOneClass.{u1} N (CommMonoid.toMonoid.{u1} N mN))) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N mM (Monoid.toMulOneClass.{u1} N (CommMonoid.toMonoid.{u1} N mN))) M N (MulOneClass.toMul.{u2} M mM) (MulOneClass.toMul.{u1} N (Monoid.toMulOneClass.{u1} N (CommMonoid.toMonoid.{u1} N mN))) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N mM (Monoid.toMulOneClass.{u1} N (CommMonoid.toMonoid.{u1} N mN))) M N mM (Monoid.toMulOneClass.{u1} N (CommMonoid.toMonoid.{u1} N mN)) (MonoidHom.monoidHomClass.{u2, u1} M N mM (Monoid.toMulOneClass.{u1} N (CommMonoid.toMonoid.{u1} N mN))))) g x))
+  forall {M : Type.{u2}} {N : Type.{u1}} {mM : MulOneClass.{u2} M} {mN : CommMonoid.{u1} N} (f : MonoidHom.{u2, u1} M N mM (Monoid.toMulOneClass.{u1} N (CommMonoid.toMonoid.{u1} N mN))) (g : MonoidHom.{u2, u1} M N mM (Monoid.toMulOneClass.{u1} N (CommMonoid.toMonoid.{u1} N mN))) (x : M), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M N mM (Monoid.toMulOneClass.{u1} N (CommMonoid.toMonoid.{u1} N mN))) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N mM (Monoid.toMulOneClass.{u1} N (CommMonoid.toMonoid.{u1} N mN))) M N (MulOneClass.toMul.{u2} M mM) (MulOneClass.toMul.{u1} N (Monoid.toMulOneClass.{u1} N (CommMonoid.toMonoid.{u1} N mN))) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N mM (Monoid.toMulOneClass.{u1} N (CommMonoid.toMonoid.{u1} N mN))) M N mM (Monoid.toMulOneClass.{u1} N (CommMonoid.toMonoid.{u1} N mN)) (MonoidHom.monoidHomClass.{u2, u1} M N mM (Monoid.toMulOneClass.{u1} N (CommMonoid.toMonoid.{u1} N mN))))) (HMul.hMul.{max u2 u1, max u2 u1, max u2 u1} (MonoidHom.{u2, u1} M N mM (Monoid.toMulOneClass.{u1} N (CommMonoid.toMonoid.{u1} N mN))) (MonoidHom.{u2, u1} M N mM (Monoid.toMulOneClass.{u1} N (CommMonoid.toMonoid.{u1} N mN))) (MonoidHom.{u2, u1} M N mM (Monoid.toMulOneClass.{u1} N (CommMonoid.toMonoid.{u1} N mN))) (instHMul.{max u2 u1} (MonoidHom.{u2, u1} M N mM (Monoid.toMulOneClass.{u1} N (CommMonoid.toMonoid.{u1} N mN))) (MonoidHom.mul.{u2, u1} M N mM mN)) f g) x) (HMul.hMul.{u1, u1, u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) x) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) x) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) x) (instHMul.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) x) (MulOneClass.toMul.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) x) (Monoid.toMulOneClass.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) x) (CommMonoid.toMonoid.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) x) mN)))) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M N mM (Monoid.toMulOneClass.{u1} N (CommMonoid.toMonoid.{u1} N mN))) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N mM (Monoid.toMulOneClass.{u1} N (CommMonoid.toMonoid.{u1} N mN))) M N (MulOneClass.toMul.{u2} M mM) (MulOneClass.toMul.{u1} N (Monoid.toMulOneClass.{u1} N (CommMonoid.toMonoid.{u1} N mN))) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N mM (Monoid.toMulOneClass.{u1} N (CommMonoid.toMonoid.{u1} N mN))) M N mM (Monoid.toMulOneClass.{u1} N (CommMonoid.toMonoid.{u1} N mN)) (MonoidHom.monoidHomClass.{u2, u1} M N mM (Monoid.toMulOneClass.{u1} N (CommMonoid.toMonoid.{u1} N mN))))) f x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M N mM (Monoid.toMulOneClass.{u1} N (CommMonoid.toMonoid.{u1} N mN))) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N mM (Monoid.toMulOneClass.{u1} N (CommMonoid.toMonoid.{u1} N mN))) M N (MulOneClass.toMul.{u2} M mM) (MulOneClass.toMul.{u1} N (Monoid.toMulOneClass.{u1} N (CommMonoid.toMonoid.{u1} N mN))) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N mM (Monoid.toMulOneClass.{u1} N (CommMonoid.toMonoid.{u1} N mN))) M N mM (Monoid.toMulOneClass.{u1} N (CommMonoid.toMonoid.{u1} N mN)) (MonoidHom.monoidHomClass.{u2, u1} M N mM (Monoid.toMulOneClass.{u1} N (CommMonoid.toMonoid.{u1} N mN))))) g x))
 Case conversion may be inaccurate. Consider using '#align monoid_hom.mul_apply MonoidHom.mul_applyₓ'. -/
 @[simp, to_additive]
 theorem mul_apply {M N} {mM : MulOneClass M} {mN : CommMonoid N} (f g : M →* N) (x : M) :
@@ -2409,7 +2409,7 @@ theorem comp_mul [MulOneClass M] [CommMonoid N] [CommMonoid P] (g : N →* P) (f
 lean 3 declaration is
   forall {α : Type.{u1}} {β : Type.{u2}} [_inst_3 : Group.{u1} α] [_inst_4 : DivisionMonoid.{u2} β] (f : MonoidHom.{u1, u2} α β (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3))) (Monoid.toMulOneClass.{u2} β (DivInvMonoid.toMonoid.{u2} β (DivisionMonoid.toDivInvMonoid.{u2} β _inst_4)))) (a : α), Eq.{succ u2} β (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} α β (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3))) (Monoid.toMulOneClass.{u2} β (DivInvMonoid.toMonoid.{u2} β (DivisionMonoid.toDivInvMonoid.{u2} β _inst_4)))) (fun (_x : MonoidHom.{u1, u2} α β (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3))) (Monoid.toMulOneClass.{u2} β (DivInvMonoid.toMonoid.{u2} β (DivisionMonoid.toDivInvMonoid.{u2} β _inst_4)))) => α -> β) (MonoidHom.hasCoeToFun.{u1, u2} α β (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3))) (Monoid.toMulOneClass.{u2} β (DivInvMonoid.toMonoid.{u2} β (DivisionMonoid.toDivInvMonoid.{u2} β _inst_4)))) f (Inv.inv.{u1} α (DivInvMonoid.toHasInv.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3)) a)) (Inv.inv.{u2} β (DivInvMonoid.toHasInv.{u2} β (DivisionMonoid.toDivInvMonoid.{u2} β _inst_4)) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} α β (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3))) (Monoid.toMulOneClass.{u2} β (DivInvMonoid.toMonoid.{u2} β (DivisionMonoid.toDivInvMonoid.{u2} β _inst_4)))) (fun (_x : MonoidHom.{u1, u2} α β (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3))) (Monoid.toMulOneClass.{u2} β (DivInvMonoid.toMonoid.{u2} β (DivisionMonoid.toDivInvMonoid.{u2} β _inst_4)))) => α -> β) (MonoidHom.hasCoeToFun.{u1, u2} α β (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3))) (Monoid.toMulOneClass.{u2} β (DivInvMonoid.toMonoid.{u2} β (DivisionMonoid.toDivInvMonoid.{u2} β _inst_4)))) f a))
 but is expected to have type
-  forall {α : Type.{u2}} {β : Type.{u1}} [_inst_3 : Group.{u2} α] [_inst_4 : DivisionMonoid.{u1} β] (f : MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) (a : α), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : α) => β) (Inv.inv.{u2} α (InvOneClass.toInv.{u2} α (DivInvOneMonoid.toInvOneClass.{u2} α (DivisionMonoid.toDivInvOneMonoid.{u2} α (Group.toDivisionMonoid.{u2} α _inst_3)))) a)) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : α) => β) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) α β (MulOneClass.toMul.{u2} α (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3)))) (MulOneClass.toMul.{u1} β (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4))) (MonoidHom.monoidHomClass.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))))) f (Inv.inv.{u2} α (InvOneClass.toInv.{u2} α (DivInvOneMonoid.toInvOneClass.{u2} α (DivisionMonoid.toDivInvOneMonoid.{u2} α (Group.toDivisionMonoid.{u2} α _inst_3)))) a)) (Inv.inv.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : α) => β) a) (InvOneClass.toInv.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : α) => β) a) (DivInvOneMonoid.toInvOneClass.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : α) => β) a) (DivisionMonoid.toDivInvOneMonoid.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : α) => β) a) _inst_4))) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : α) => β) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) α β (MulOneClass.toMul.{u2} α (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3)))) (MulOneClass.toMul.{u1} β (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4))) (MonoidHom.monoidHomClass.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))))) f a))
+  forall {α : Type.{u2}} {β : Type.{u1}} [_inst_3 : Group.{u2} α] [_inst_4 : DivisionMonoid.{u1} β] (f : MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) (a : α), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : α) => β) (Inv.inv.{u2} α (InvOneClass.toInv.{u2} α (DivInvOneMonoid.toInvOneClass.{u2} α (DivisionMonoid.toDivInvOneMonoid.{u2} α (Group.toDivisionMonoid.{u2} α _inst_3)))) a)) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : α) => β) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) α β (MulOneClass.toMul.{u2} α (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3)))) (MulOneClass.toMul.{u1} β (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4))) (MonoidHom.monoidHomClass.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))))) f (Inv.inv.{u2} α (InvOneClass.toInv.{u2} α (DivInvOneMonoid.toInvOneClass.{u2} α (DivisionMonoid.toDivInvOneMonoid.{u2} α (Group.toDivisionMonoid.{u2} α _inst_3)))) a)) (Inv.inv.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : α) => β) a) (InvOneClass.toInv.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : α) => β) a) (DivInvOneMonoid.toInvOneClass.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : α) => β) a) (DivisionMonoid.toDivInvOneMonoid.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : α) => β) a) _inst_4))) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : α) => β) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) α β (MulOneClass.toMul.{u2} α (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3)))) (MulOneClass.toMul.{u1} β (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4))) (MonoidHom.monoidHomClass.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))))) f a))
 Case conversion may be inaccurate. Consider using '#align monoid_hom.map_inv MonoidHom.map_invₓ'. -/
 /-- Group homomorphisms preserve inverse. -/
 @[to_additive "Additive group homomorphisms preserve negation."]
@@ -2422,7 +2422,7 @@ protected theorem map_inv [Group α] [DivisionMonoid β] (f : α →* β) (a : 
 lean 3 declaration is
   forall {α : Type.{u1}} {β : Type.{u2}} [_inst_3 : Group.{u1} α] [_inst_4 : DivisionMonoid.{u2} β] (f : MonoidHom.{u1, u2} α β (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3))) (Monoid.toMulOneClass.{u2} β (DivInvMonoid.toMonoid.{u2} β (DivisionMonoid.toDivInvMonoid.{u2} β _inst_4)))) (g : α) (n : Int), Eq.{succ u2} β (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} α β (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3))) (Monoid.toMulOneClass.{u2} β (DivInvMonoid.toMonoid.{u2} β (DivisionMonoid.toDivInvMonoid.{u2} β _inst_4)))) (fun (_x : MonoidHom.{u1, u2} α β (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3))) (Monoid.toMulOneClass.{u2} β (DivInvMonoid.toMonoid.{u2} β (DivisionMonoid.toDivInvMonoid.{u2} β _inst_4)))) => α -> β) (MonoidHom.hasCoeToFun.{u1, u2} α β (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3))) (Monoid.toMulOneClass.{u2} β (DivInvMonoid.toMonoid.{u2} β (DivisionMonoid.toDivInvMonoid.{u2} β _inst_4)))) f (HPow.hPow.{u1, 0, u1} α Int α (instHPow.{u1, 0} α Int (DivInvMonoid.Pow.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3))) g n)) (HPow.hPow.{u2, 0, u2} β Int β (instHPow.{u2, 0} β Int (DivInvMonoid.Pow.{u2} β (DivisionMonoid.toDivInvMonoid.{u2} β _inst_4))) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} α β (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3))) (Monoid.toMulOneClass.{u2} β (DivInvMonoid.toMonoid.{u2} β (DivisionMonoid.toDivInvMonoid.{u2} β _inst_4)))) (fun (_x : MonoidHom.{u1, u2} α β (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3))) (Monoid.toMulOneClass.{u2} β (DivInvMonoid.toMonoid.{u2} β (DivisionMonoid.toDivInvMonoid.{u2} β _inst_4)))) => α -> β) (MonoidHom.hasCoeToFun.{u1, u2} α β (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3))) (Monoid.toMulOneClass.{u2} β (DivInvMonoid.toMonoid.{u2} β (DivisionMonoid.toDivInvMonoid.{u2} β _inst_4)))) f g) n)
 but is expected to have type
-  forall {α : Type.{u2}} {β : Type.{u1}} [_inst_3 : Group.{u2} α] [_inst_4 : DivisionMonoid.{u1} β] (f : MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) (g : α) (n : Int), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : α) => β) (HPow.hPow.{u2, 0, u2} α Int α (instHPow.{u2, 0} α Int (DivInvMonoid.Pow.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) g n)) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : α) => β) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) α β (MulOneClass.toMul.{u2} α (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3)))) (MulOneClass.toMul.{u1} β (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4))) (MonoidHom.monoidHomClass.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))))) f (HPow.hPow.{u2, 0, u2} α Int α (instHPow.{u2, 0} α Int (DivInvMonoid.Pow.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) g n)) (HPow.hPow.{u1, 0, u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : α) => β) g) Int ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : α) => β) g) (instHPow.{u1, 0} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : α) => β) g) Int (DivInvMonoid.Pow.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : α) => β) g) (DivisionMonoid.toDivInvMonoid.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : α) => β) g) _inst_4))) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : α) => β) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) α β (MulOneClass.toMul.{u2} α (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3)))) (MulOneClass.toMul.{u1} β (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4))) (MonoidHom.monoidHomClass.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))))) f g) n)
+  forall {α : Type.{u2}} {β : Type.{u1}} [_inst_3 : Group.{u2} α] [_inst_4 : DivisionMonoid.{u1} β] (f : MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) (g : α) (n : Int), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : α) => β) (HPow.hPow.{u2, 0, u2} α Int α (instHPow.{u2, 0} α Int (DivInvMonoid.Pow.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) g n)) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : α) => β) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) α β (MulOneClass.toMul.{u2} α (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3)))) (MulOneClass.toMul.{u1} β (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4))) (MonoidHom.monoidHomClass.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))))) f (HPow.hPow.{u2, 0, u2} α Int α (instHPow.{u2, 0} α Int (DivInvMonoid.Pow.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) g n)) (HPow.hPow.{u1, 0, u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : α) => β) g) Int ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : α) => β) g) (instHPow.{u1, 0} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : α) => β) g) Int (DivInvMonoid.Pow.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : α) => β) g) (DivisionMonoid.toDivInvMonoid.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : α) => β) g) _inst_4))) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : α) => β) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) α β (MulOneClass.toMul.{u2} α (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3)))) (MulOneClass.toMul.{u1} β (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4))) (MonoidHom.monoidHomClass.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))))) f g) n)
 Case conversion may be inaccurate. Consider using '#align monoid_hom.map_zpow MonoidHom.map_zpowₓ'. -/
 /-- Group homomorphisms preserve integer power. -/
 @[to_additive "Additive group homomorphisms preserve integer scaling."]
@@ -2436,7 +2436,7 @@ protected theorem map_zpow [Group α] [DivisionMonoid β] (f : α →* β) (g :
 lean 3 declaration is
   forall {α : Type.{u1}} {β : Type.{u2}} [_inst_3 : Group.{u1} α] [_inst_4 : DivisionMonoid.{u2} β] (f : MonoidHom.{u1, u2} α β (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3))) (Monoid.toMulOneClass.{u2} β (DivInvMonoid.toMonoid.{u2} β (DivisionMonoid.toDivInvMonoid.{u2} β _inst_4)))) (g : α) (h : α), Eq.{succ u2} β (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} α β (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3))) (Monoid.toMulOneClass.{u2} β (DivInvMonoid.toMonoid.{u2} β (DivisionMonoid.toDivInvMonoid.{u2} β _inst_4)))) (fun (_x : MonoidHom.{u1, u2} α β (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3))) (Monoid.toMulOneClass.{u2} β (DivInvMonoid.toMonoid.{u2} β (DivisionMonoid.toDivInvMonoid.{u2} β _inst_4)))) => α -> β) (MonoidHom.hasCoeToFun.{u1, u2} α β (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3))) (Monoid.toMulOneClass.{u2} β (DivInvMonoid.toMonoid.{u2} β (DivisionMonoid.toDivInvMonoid.{u2} β _inst_4)))) f (HDiv.hDiv.{u1, u1, u1} α α α (instHDiv.{u1} α (DivInvMonoid.toHasDiv.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3))) g h)) (HDiv.hDiv.{u2, u2, u2} β β β (instHDiv.{u2} β (DivInvMonoid.toHasDiv.{u2} β (DivisionMonoid.toDivInvMonoid.{u2} β _inst_4))) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} α β (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3))) (Monoid.toMulOneClass.{u2} β (DivInvMonoid.toMonoid.{u2} β (DivisionMonoid.toDivInvMonoid.{u2} β _inst_4)))) (fun (_x : MonoidHom.{u1, u2} α β (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3))) (Monoid.toMulOneClass.{u2} β (DivInvMonoid.toMonoid.{u2} β (DivisionMonoid.toDivInvMonoid.{u2} β _inst_4)))) => α -> β) (MonoidHom.hasCoeToFun.{u1, u2} α β (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3))) (Monoid.toMulOneClass.{u2} β (DivInvMonoid.toMonoid.{u2} β (DivisionMonoid.toDivInvMonoid.{u2} β _inst_4)))) f g) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} α β (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3))) (Monoid.toMulOneClass.{u2} β (DivInvMonoid.toMonoid.{u2} β (DivisionMonoid.toDivInvMonoid.{u2} β _inst_4)))) (fun (_x : MonoidHom.{u1, u2} α β (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3))) (Monoid.toMulOneClass.{u2} β (DivInvMonoid.toMonoid.{u2} β (DivisionMonoid.toDivInvMonoid.{u2} β _inst_4)))) => α -> β) (MonoidHom.hasCoeToFun.{u1, u2} α β (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3))) (Monoid.toMulOneClass.{u2} β (DivInvMonoid.toMonoid.{u2} β (DivisionMonoid.toDivInvMonoid.{u2} β _inst_4)))) f h))
 but is expected to have type
-  forall {α : Type.{u2}} {β : Type.{u1}} [_inst_3 : Group.{u2} α] [_inst_4 : DivisionMonoid.{u1} β] (f : MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) (g : α) (h : α), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : α) => β) (HDiv.hDiv.{u2, u2, u2} α α α (instHDiv.{u2} α (DivInvMonoid.toDiv.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) g h)) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : α) => β) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) α β (MulOneClass.toMul.{u2} α (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3)))) (MulOneClass.toMul.{u1} β (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4))) (MonoidHom.monoidHomClass.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))))) f (HDiv.hDiv.{u2, u2, u2} α α α (instHDiv.{u2} α (DivInvMonoid.toDiv.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) g h)) (HDiv.hDiv.{u1, u1, u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : α) => β) g) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : α) => β) h) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : α) => β) g) (instHDiv.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : α) => β) g) (DivInvMonoid.toDiv.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : α) => β) g) (DivisionMonoid.toDivInvMonoid.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : α) => β) g) _inst_4))) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : α) => β) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) α β (MulOneClass.toMul.{u2} α (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3)))) (MulOneClass.toMul.{u1} β (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4))) (MonoidHom.monoidHomClass.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))))) f g) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : α) => β) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) α β (MulOneClass.toMul.{u2} α (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3)))) (MulOneClass.toMul.{u1} β (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4))) (MonoidHom.monoidHomClass.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))))) f h))
+  forall {α : Type.{u2}} {β : Type.{u1}} [_inst_3 : Group.{u2} α] [_inst_4 : DivisionMonoid.{u1} β] (f : MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) (g : α) (h : α), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : α) => β) (HDiv.hDiv.{u2, u2, u2} α α α (instHDiv.{u2} α (DivInvMonoid.toDiv.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) g h)) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : α) => β) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) α β (MulOneClass.toMul.{u2} α (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3)))) (MulOneClass.toMul.{u1} β (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4))) (MonoidHom.monoidHomClass.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))))) f (HDiv.hDiv.{u2, u2, u2} α α α (instHDiv.{u2} α (DivInvMonoid.toDiv.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) g h)) (HDiv.hDiv.{u1, u1, u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : α) => β) g) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : α) => β) h) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : α) => β) g) (instHDiv.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : α) => β) g) (DivInvMonoid.toDiv.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : α) => β) g) (DivisionMonoid.toDivInvMonoid.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : α) => β) g) _inst_4))) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : α) => β) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) α β (MulOneClass.toMul.{u2} α (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3)))) (MulOneClass.toMul.{u1} β (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4))) (MonoidHom.monoidHomClass.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))))) f g) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : α) => β) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) α β (MulOneClass.toMul.{u2} α (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3)))) (MulOneClass.toMul.{u1} β (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4))) (MonoidHom.monoidHomClass.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))))) f h))
 Case conversion may be inaccurate. Consider using '#align monoid_hom.map_div MonoidHom.map_divₓ'. -/
 /-- Group homomorphisms preserve division. -/
 @[to_additive "Additive group homomorphisms preserve subtraction."]
@@ -2450,7 +2450,7 @@ protected theorem map_div [Group α] [DivisionMonoid β] (f : α →* β) (g h :
 lean 3 declaration is
   forall {α : Type.{u1}} {β : Type.{u2}} [_inst_3 : Group.{u1} α] [_inst_4 : DivisionMonoid.{u2} β] (f : MonoidHom.{u1, u2} α β (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3))) (Monoid.toMulOneClass.{u2} β (DivInvMonoid.toMonoid.{u2} β (DivisionMonoid.toDivInvMonoid.{u2} β _inst_4)))) (g : α) (h : α), Eq.{succ u2} β (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} α β (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3))) (Monoid.toMulOneClass.{u2} β (DivInvMonoid.toMonoid.{u2} β (DivisionMonoid.toDivInvMonoid.{u2} β _inst_4)))) (fun (_x : MonoidHom.{u1, u2} α β (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3))) (Monoid.toMulOneClass.{u2} β (DivInvMonoid.toMonoid.{u2} β (DivisionMonoid.toDivInvMonoid.{u2} β _inst_4)))) => α -> β) (MonoidHom.hasCoeToFun.{u1, u2} α β (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3))) (Monoid.toMulOneClass.{u2} β (DivInvMonoid.toMonoid.{u2} β (DivisionMonoid.toDivInvMonoid.{u2} β _inst_4)))) f (HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toHasMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3))))) g (Inv.inv.{u1} α (DivInvMonoid.toHasInv.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3)) h))) (HMul.hMul.{u2, u2, u2} β β β (instHMul.{u2} β (MulOneClass.toHasMul.{u2} β (Monoid.toMulOneClass.{u2} β (DivInvMonoid.toMonoid.{u2} β (DivisionMonoid.toDivInvMonoid.{u2} β _inst_4))))) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} α β (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3))) (Monoid.toMulOneClass.{u2} β (DivInvMonoid.toMonoid.{u2} β (DivisionMonoid.toDivInvMonoid.{u2} β _inst_4)))) (fun (_x : MonoidHom.{u1, u2} α β (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3))) (Monoid.toMulOneClass.{u2} β (DivInvMonoid.toMonoid.{u2} β (DivisionMonoid.toDivInvMonoid.{u2} β _inst_4)))) => α -> β) (MonoidHom.hasCoeToFun.{u1, u2} α β (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3))) (Monoid.toMulOneClass.{u2} β (DivInvMonoid.toMonoid.{u2} β (DivisionMonoid.toDivInvMonoid.{u2} β _inst_4)))) f g) (Inv.inv.{u2} β (DivInvMonoid.toHasInv.{u2} β (DivisionMonoid.toDivInvMonoid.{u2} β _inst_4)) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} α β (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3))) (Monoid.toMulOneClass.{u2} β (DivInvMonoid.toMonoid.{u2} β (DivisionMonoid.toDivInvMonoid.{u2} β _inst_4)))) (fun (_x : MonoidHom.{u1, u2} α β (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3))) (Monoid.toMulOneClass.{u2} β (DivInvMonoid.toMonoid.{u2} β (DivisionMonoid.toDivInvMonoid.{u2} β _inst_4)))) => α -> β) (MonoidHom.hasCoeToFun.{u1, u2} α β (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3))) (Monoid.toMulOneClass.{u2} β (DivInvMonoid.toMonoid.{u2} β (DivisionMonoid.toDivInvMonoid.{u2} β _inst_4)))) f h)))
 but is expected to have type
-  forall {α : Type.{u2}} {β : Type.{u1}} [_inst_3 : Group.{u2} α] [_inst_4 : DivisionMonoid.{u1} β] (f : MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) (g : α) (h : α), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : α) => β) (HMul.hMul.{u2, u2, u2} α α α (instHMul.{u2} α (MulOneClass.toMul.{u2} α (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))))) g (Inv.inv.{u2} α (InvOneClass.toInv.{u2} α (DivInvOneMonoid.toInvOneClass.{u2} α (DivisionMonoid.toDivInvOneMonoid.{u2} α (Group.toDivisionMonoid.{u2} α _inst_3)))) h))) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : α) => β) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) α β (MulOneClass.toMul.{u2} α (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3)))) (MulOneClass.toMul.{u1} β (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4))) (MonoidHom.monoidHomClass.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))))) f (HMul.hMul.{u2, u2, u2} α α α (instHMul.{u2} α (MulOneClass.toMul.{u2} α (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))))) g (Inv.inv.{u2} α (InvOneClass.toInv.{u2} α (DivInvOneMonoid.toInvOneClass.{u2} α (DivisionMonoid.toDivInvOneMonoid.{u2} α (Group.toDivisionMonoid.{u2} α _inst_3)))) h))) (HMul.hMul.{u1, u1, u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : α) => β) g) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : α) => β) h) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : α) => β) g) (instHMul.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : α) => β) g) (MulOneClass.toMul.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : α) => β) g) (Monoid.toMulOneClass.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : α) => β) g) (DivInvMonoid.toMonoid.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : α) => β) g) (DivisionMonoid.toDivInvMonoid.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : α) => β) g) _inst_4))))) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : α) => β) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) α β (MulOneClass.toMul.{u2} α (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3)))) (MulOneClass.toMul.{u1} β (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4))) (MonoidHom.monoidHomClass.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))))) f g) (Inv.inv.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : α) => β) h) (InvOneClass.toInv.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : α) => β) h) (DivInvOneMonoid.toInvOneClass.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : α) => β) h) (DivisionMonoid.toDivInvOneMonoid.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : α) => β) h) _inst_4))) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : α) => β) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) α β (MulOneClass.toMul.{u2} α (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3)))) (MulOneClass.toMul.{u1} β (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4))) (MonoidHom.monoidHomClass.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))))) f h)))
+  forall {α : Type.{u2}} {β : Type.{u1}} [_inst_3 : Group.{u2} α] [_inst_4 : DivisionMonoid.{u1} β] (f : MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) (g : α) (h : α), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : α) => β) (HMul.hMul.{u2, u2, u2} α α α (instHMul.{u2} α (MulOneClass.toMul.{u2} α (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))))) g (Inv.inv.{u2} α (InvOneClass.toInv.{u2} α (DivInvOneMonoid.toInvOneClass.{u2} α (DivisionMonoid.toDivInvOneMonoid.{u2} α (Group.toDivisionMonoid.{u2} α _inst_3)))) h))) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : α) => β) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) α β (MulOneClass.toMul.{u2} α (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3)))) (MulOneClass.toMul.{u1} β (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4))) (MonoidHom.monoidHomClass.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))))) f (HMul.hMul.{u2, u2, u2} α α α (instHMul.{u2} α (MulOneClass.toMul.{u2} α (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))))) g (Inv.inv.{u2} α (InvOneClass.toInv.{u2} α (DivInvOneMonoid.toInvOneClass.{u2} α (DivisionMonoid.toDivInvOneMonoid.{u2} α (Group.toDivisionMonoid.{u2} α _inst_3)))) h))) (HMul.hMul.{u1, u1, u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : α) => β) g) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : α) => β) h) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : α) => β) g) (instHMul.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : α) => β) g) (MulOneClass.toMul.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : α) => β) g) (Monoid.toMulOneClass.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : α) => β) g) (DivInvMonoid.toMonoid.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : α) => β) g) (DivisionMonoid.toDivInvMonoid.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : α) => β) g) _inst_4))))) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : α) => β) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) α β (MulOneClass.toMul.{u2} α (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3)))) (MulOneClass.toMul.{u1} β (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4))) (MonoidHom.monoidHomClass.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))))) f g) (Inv.inv.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : α) => β) h) (InvOneClass.toInv.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : α) => β) h) (DivInvOneMonoid.toInvOneClass.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : α) => β) h) (DivisionMonoid.toDivInvOneMonoid.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : α) => β) h) _inst_4))) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : α) => β) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) α β (MulOneClass.toMul.{u2} α (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3)))) (MulOneClass.toMul.{u1} β (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4))) (MonoidHom.monoidHomClass.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))))) f h)))
 Case conversion may be inaccurate. Consider using '#align monoid_hom.map_mul_inv MonoidHom.map_mul_invₓ'. -/
 /-- Group homomorphisms preserve division. -/
 @[to_additive "Additive group homomorphisms preserve subtraction."]
@@ -2464,7 +2464,7 @@ protected theorem map_mul_inv [Group α] [DivisionMonoid β] (f : α →* β) (g
 lean 3 declaration is
   forall {F : Type.{u1}} {G : Type.{u2}} {H : Type.{u3}} [_inst_3 : Group.{u2} G] [_inst_4 : MulOneClass.{u3} H] [_inst_5 : MonoidHomClass.{u1, u2, u3} F G H (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3))) _inst_4] (f : F), Iff (Function.Injective.{succ u2, succ u3} G H (coeFn.{succ u1, max (succ u2) (succ u3)} F (fun (_x : F) => G -> H) (FunLike.hasCoeToFun.{succ u1, succ u2, succ u3} F G (fun (_x : G) => H) (MulHomClass.toFunLike.{u1, u2, u3} F G H (MulOneClass.toHasMul.{u2} G (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))) (MulOneClass.toHasMul.{u3} H _inst_4) (MonoidHomClass.toMulHomClass.{u1, u2, u3} F G H (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3))) _inst_4 _inst_5))) f)) (forall (a : G), (Eq.{succ u3} H (coeFn.{succ u1, max (succ u2) (succ u3)} F (fun (_x : F) => G -> H) (FunLike.hasCoeToFun.{succ u1, succ u2, succ u3} F G (fun (_x : G) => H) (MulHomClass.toFunLike.{u1, u2, u3} F G H (MulOneClass.toHasMul.{u2} G (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))) (MulOneClass.toHasMul.{u3} H _inst_4) (MonoidHomClass.toMulHomClass.{u1, u2, u3} F G H (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3))) _inst_4 _inst_5))) f a) (OfNat.ofNat.{u3} H 1 (OfNat.mk.{u3} H 1 (One.one.{u3} H (MulOneClass.toHasOne.{u3} H _inst_4))))) -> (Eq.{succ u2} G a (OfNat.ofNat.{u2} G 1 (OfNat.mk.{u2} G 1 (One.one.{u2} G (MulOneClass.toHasOne.{u2} G (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))))))))
 but is expected to have type
-  forall {F : Type.{u1}} {G : Type.{u3}} {H : Type.{u2}} [_inst_3 : Group.{u3} G] [_inst_4 : MulOneClass.{u2} H] [_inst_5 : MonoidHomClass.{u1, u3, u2} F G H (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3))) _inst_4] (f : F), Iff (Function.Injective.{succ u3, succ u2} G H (FunLike.coe.{succ u1, succ u3, succ u2} F G (fun (_x : G) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : G) => H) _x) (MulHomClass.toFunLike.{u1, u3, u2} F G H (MulOneClass.toMul.{u3} G (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3)))) (MulOneClass.toMul.{u2} H _inst_4) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F G H (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3))) _inst_4 _inst_5)) f)) (forall (a : G), (Eq.{succ u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : G) => H) a) (FunLike.coe.{succ u1, succ u3, succ u2} F G (fun (_x : G) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : G) => H) _x) (MulHomClass.toFunLike.{u1, u3, u2} F G H (MulOneClass.toMul.{u3} G (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3)))) (MulOneClass.toMul.{u2} H _inst_4) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F G H (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3))) _inst_4 _inst_5)) f a) (OfNat.ofNat.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : G) => H) a) 1 (One.toOfNat1.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : G) => H) a) (MulOneClass.toOne.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : G) => H) a) _inst_4)))) -> (Eq.{succ u3} G a (OfNat.ofNat.{u3} G 1 (One.toOfNat1.{u3} G (InvOneClass.toOne.{u3} G (DivInvOneMonoid.toInvOneClass.{u3} G (DivisionMonoid.toDivInvOneMonoid.{u3} G (Group.toDivisionMonoid.{u3} G _inst_3))))))))
+  forall {F : Type.{u1}} {G : Type.{u3}} {H : Type.{u2}} [_inst_3 : Group.{u3} G] [_inst_4 : MulOneClass.{u2} H] [_inst_5 : MonoidHomClass.{u1, u3, u2} F G H (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3))) _inst_4] (f : F), Iff (Function.Injective.{succ u3, succ u2} G H (FunLike.coe.{succ u1, succ u3, succ u2} F G (fun (_x : G) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : G) => H) _x) (MulHomClass.toFunLike.{u1, u3, u2} F G H (MulOneClass.toMul.{u3} G (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3)))) (MulOneClass.toMul.{u2} H _inst_4) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F G H (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3))) _inst_4 _inst_5)) f)) (forall (a : G), (Eq.{succ u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : G) => H) a) (FunLike.coe.{succ u1, succ u3, succ u2} F G (fun (_x : G) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : G) => H) _x) (MulHomClass.toFunLike.{u1, u3, u2} F G H (MulOneClass.toMul.{u3} G (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3)))) (MulOneClass.toMul.{u2} H _inst_4) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F G H (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3))) _inst_4 _inst_5)) f a) (OfNat.ofNat.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : G) => H) a) 1 (One.toOfNat1.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : G) => H) a) (MulOneClass.toOne.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : G) => H) a) _inst_4)))) -> (Eq.{succ u3} G a (OfNat.ofNat.{u3} G 1 (One.toOfNat1.{u3} G (InvOneClass.toOne.{u3} G (DivInvOneMonoid.toInvOneClass.{u3} G (DivisionMonoid.toDivInvOneMonoid.{u3} G (Group.toDivisionMonoid.{u3} G _inst_3))))))))
 Case conversion may be inaccurate. Consider using '#align injective_iff_map_eq_one injective_iff_map_eq_oneₓ'. -/
 /-- A homomorphism from a group to a monoid is injective iff its kernel is trivial.
 For the iff statement on the triviality of the kernel, see `injective_iff_map_eq_one'`.  -/
@@ -2481,7 +2481,7 @@ theorem injective_iff_map_eq_one {G H} [Group G] [MulOneClass H] [MonoidHomClass
 lean 3 declaration is
   forall {F : Type.{u1}} {G : Type.{u2}} {H : Type.{u3}} [_inst_3 : Group.{u2} G] [_inst_4 : MulOneClass.{u3} H] [_inst_5 : MonoidHomClass.{u1, u2, u3} F G H (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3))) _inst_4] (f : F), Iff (Function.Injective.{succ u2, succ u3} G H (coeFn.{succ u1, max (succ u2) (succ u3)} F (fun (_x : F) => G -> H) (FunLike.hasCoeToFun.{succ u1, succ u2, succ u3} F G (fun (_x : G) => H) (MulHomClass.toFunLike.{u1, u2, u3} F G H (MulOneClass.toHasMul.{u2} G (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))) (MulOneClass.toHasMul.{u3} H _inst_4) (MonoidHomClass.toMulHomClass.{u1, u2, u3} F G H (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3))) _inst_4 _inst_5))) f)) (forall (a : G), Iff (Eq.{succ u3} H (coeFn.{succ u1, max (succ u2) (succ u3)} F (fun (_x : F) => G -> H) (FunLike.hasCoeToFun.{succ u1, succ u2, succ u3} F G (fun (_x : G) => H) (MulHomClass.toFunLike.{u1, u2, u3} F G H (MulOneClass.toHasMul.{u2} G (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))) (MulOneClass.toHasMul.{u3} H _inst_4) (MonoidHomClass.toMulHomClass.{u1, u2, u3} F G H (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3))) _inst_4 _inst_5))) f a) (OfNat.ofNat.{u3} H 1 (OfNat.mk.{u3} H 1 (One.one.{u3} H (MulOneClass.toHasOne.{u3} H _inst_4))))) (Eq.{succ u2} G a (OfNat.ofNat.{u2} G 1 (OfNat.mk.{u2} G 1 (One.one.{u2} G (MulOneClass.toHasOne.{u2} G (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))))))))
 but is expected to have type
-  forall {F : Type.{u1}} {G : Type.{u3}} {H : Type.{u2}} [_inst_3 : Group.{u3} G] [_inst_4 : MulOneClass.{u2} H] [_inst_5 : MonoidHomClass.{u1, u3, u2} F G H (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3))) _inst_4] (f : F), Iff (Function.Injective.{succ u3, succ u2} G H (FunLike.coe.{succ u1, succ u3, succ u2} F G (fun (_x : G) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : G) => H) _x) (MulHomClass.toFunLike.{u1, u3, u2} F G H (MulOneClass.toMul.{u3} G (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3)))) (MulOneClass.toMul.{u2} H _inst_4) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F G H (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3))) _inst_4 _inst_5)) f)) (forall (a : G), Iff (Eq.{succ u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : G) => H) a) (FunLike.coe.{succ u1, succ u3, succ u2} F G (fun (_x : G) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : G) => H) _x) (MulHomClass.toFunLike.{u1, u3, u2} F G H (MulOneClass.toMul.{u3} G (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3)))) (MulOneClass.toMul.{u2} H _inst_4) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F G H (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3))) _inst_4 _inst_5)) f a) (OfNat.ofNat.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : G) => H) a) 1 (One.toOfNat1.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : G) => H) a) (MulOneClass.toOne.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : G) => H) a) _inst_4)))) (Eq.{succ u3} G a (OfNat.ofNat.{u3} G 1 (One.toOfNat1.{u3} G (InvOneClass.toOne.{u3} G (DivInvOneMonoid.toInvOneClass.{u3} G (DivisionMonoid.toDivInvOneMonoid.{u3} G (Group.toDivisionMonoid.{u3} G _inst_3))))))))
+  forall {F : Type.{u1}} {G : Type.{u3}} {H : Type.{u2}} [_inst_3 : Group.{u3} G] [_inst_4 : MulOneClass.{u2} H] [_inst_5 : MonoidHomClass.{u1, u3, u2} F G H (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3))) _inst_4] (f : F), Iff (Function.Injective.{succ u3, succ u2} G H (FunLike.coe.{succ u1, succ u3, succ u2} F G (fun (_x : G) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : G) => H) _x) (MulHomClass.toFunLike.{u1, u3, u2} F G H (MulOneClass.toMul.{u3} G (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3)))) (MulOneClass.toMul.{u2} H _inst_4) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F G H (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3))) _inst_4 _inst_5)) f)) (forall (a : G), Iff (Eq.{succ u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : G) => H) a) (FunLike.coe.{succ u1, succ u3, succ u2} F G (fun (_x : G) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : G) => H) _x) (MulHomClass.toFunLike.{u1, u3, u2} F G H (MulOneClass.toMul.{u3} G (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3)))) (MulOneClass.toMul.{u2} H _inst_4) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F G H (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3))) _inst_4 _inst_5)) f a) (OfNat.ofNat.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : G) => H) a) 1 (One.toOfNat1.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : G) => H) a) (MulOneClass.toOne.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : G) => H) a) _inst_4)))) (Eq.{succ u3} G a (OfNat.ofNat.{u3} G 1 (One.toOfNat1.{u3} G (InvOneClass.toOne.{u3} G (DivInvOneMonoid.toInvOneClass.{u3} G (DivisionMonoid.toDivInvOneMonoid.{u3} G (Group.toDivisionMonoid.{u3} G _inst_3))))))))
 Case conversion may be inaccurate. Consider using '#align injective_iff_map_eq_one' injective_iff_map_eq_one'ₓ'. -/
 /-- A homomorphism from a group to a monoid is injective iff its kernel is trivial,
 stated as an iff on the triviality of the kernel.
@@ -2544,7 +2544,7 @@ def ofMapMulInv {H : Type _} [Group H] (f : G → H)
 lean 3 declaration is
   forall {G : Type.{u1}} [_inst_1 : Group.{u1} G] {H : Type.{u2}} [_inst_3 : Group.{u2} H] (f : G -> H) (map_div : forall (a : G) (b : G), Eq.{succ u2} H (f (HMul.hMul.{u1, u1, u1} G G G (instHMul.{u1} G (MulOneClass.toHasMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))))) a (Inv.inv.{u1} G (DivInvMonoid.toHasInv.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1)) b))) (HMul.hMul.{u2, u2, u2} H H H (instHMul.{u2} H (MulOneClass.toHasMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_3))))) (f a) (Inv.inv.{u2} H (DivInvMonoid.toHasInv.{u2} H (Group.toDivInvMonoid.{u2} H _inst_3)) (f b)))), Eq.{max (succ u1) (succ u2)} (G -> H) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_3)))) (fun (_x : MonoidHom.{u1, u2} G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_3)))) => G -> H) (MonoidHom.hasCoeToFun.{u1, u2} G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_3)))) (MonoidHom.ofMapMulInv.{u1, u2} G _inst_1 H _inst_3 f map_div)) f
 but is expected to have type
-  forall {G : Type.{u1}} [_inst_1 : Group.{u1} G] {H : Type.{u2}} [_inst_3 : Group.{u2} H] (f : G -> H) (map_div : forall (a : G) (b : G), Eq.{succ u2} H (f (HMul.hMul.{u1, u1, u1} G G G (instHMul.{u1} G (MulOneClass.toMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))))) a (Inv.inv.{u1} G (InvOneClass.toInv.{u1} G (DivInvOneMonoid.toInvOneClass.{u1} G (DivisionMonoid.toDivInvOneMonoid.{u1} G (Group.toDivisionMonoid.{u1} G _inst_1)))) b))) (HMul.hMul.{u2, u2, u2} H H H (instHMul.{u2} H (MulOneClass.toMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_3))))) (f a) (Inv.inv.{u2} H (InvOneClass.toInv.{u2} H (DivInvOneMonoid.toInvOneClass.{u2} H (DivisionMonoid.toDivInvOneMonoid.{u2} H (Group.toDivisionMonoid.{u2} H _inst_3)))) (f b)))), Eq.{max (succ u1) (succ u2)} (G -> H) (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (MonoidHom.{u1, u2} G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_3)))) G (fun (_x : G) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : G) => H) _x) (MulHomClass.toFunLike.{max u1 u2, u1, u2} (MonoidHom.{u1, u2} G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_3)))) G H (MulOneClass.toMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1)))) (MulOneClass.toMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_3)))) (MonoidHomClass.toMulHomClass.{max u1 u2, u1, u2} (MonoidHom.{u1, u2} G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_3)))) G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_3))) (MonoidHom.monoidHomClass.{u1, u2} G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_3)))))) (MonoidHom.ofMapMulInv.{u1, u2} G _inst_1 H _inst_3 f map_div)) f
+  forall {G : Type.{u1}} [_inst_1 : Group.{u1} G] {H : Type.{u2}} [_inst_3 : Group.{u2} H] (f : G -> H) (map_div : forall (a : G) (b : G), Eq.{succ u2} H (f (HMul.hMul.{u1, u1, u1} G G G (instHMul.{u1} G (MulOneClass.toMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))))) a (Inv.inv.{u1} G (InvOneClass.toInv.{u1} G (DivInvOneMonoid.toInvOneClass.{u1} G (DivisionMonoid.toDivInvOneMonoid.{u1} G (Group.toDivisionMonoid.{u1} G _inst_1)))) b))) (HMul.hMul.{u2, u2, u2} H H H (instHMul.{u2} H (MulOneClass.toMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_3))))) (f a) (Inv.inv.{u2} H (InvOneClass.toInv.{u2} H (DivInvOneMonoid.toInvOneClass.{u2} H (DivisionMonoid.toDivInvOneMonoid.{u2} H (Group.toDivisionMonoid.{u2} H _inst_3)))) (f b)))), Eq.{max (succ u1) (succ u2)} (G -> H) (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (MonoidHom.{u1, u2} G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_3)))) G (fun (_x : G) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : G) => H) _x) (MulHomClass.toFunLike.{max u1 u2, u1, u2} (MonoidHom.{u1, u2} G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_3)))) G H (MulOneClass.toMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1)))) (MulOneClass.toMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_3)))) (MonoidHomClass.toMulHomClass.{max u1 u2, u1, u2} (MonoidHom.{u1, u2} G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_3)))) G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_3))) (MonoidHom.monoidHomClass.{u1, u2} G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_3)))))) (MonoidHom.ofMapMulInv.{u1, u2} G _inst_1 H _inst_3 f map_div)) f
 Case conversion may be inaccurate. Consider using '#align monoid_hom.coe_of_map_mul_inv MonoidHom.coe_of_map_mul_invₓ'. -/
 @[simp, to_additive]
 theorem coe_of_map_mul_inv {H : Type _} [Group H] (f : G → H)
@@ -2570,7 +2570,7 @@ def ofMapDiv {H : Type _} [Group H] (f : G → H) (hf : ∀ x y, f (x / y) = f x
 lean 3 declaration is
   forall {G : Type.{u1}} [_inst_1 : Group.{u1} G] {H : Type.{u2}} [_inst_3 : Group.{u2} H] (f : G -> H) (hf : forall (x : G) (y : G), Eq.{succ u2} H (f (HDiv.hDiv.{u1, u1, u1} G G G (instHDiv.{u1} G (DivInvMonoid.toHasDiv.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) x y)) (HDiv.hDiv.{u2, u2, u2} H H H (instHDiv.{u2} H (DivInvMonoid.toHasDiv.{u2} H (Group.toDivInvMonoid.{u2} H _inst_3))) (f x) (f y))), Eq.{max (succ u1) (succ u2)} (G -> H) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_3)))) (fun (_x : MonoidHom.{u1, u2} G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_3)))) => G -> H) (MonoidHom.hasCoeToFun.{u1, u2} G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_3)))) (MonoidHom.ofMapDiv.{u1, u2} G _inst_1 H _inst_3 f hf)) f
 but is expected to have type
-  forall {G : Type.{u1}} [_inst_1 : Group.{u1} G] {H : Type.{u2}} [_inst_3 : Group.{u2} H] (f : G -> H) (hf : forall (x : G) (y : G), Eq.{succ u2} H (f (HDiv.hDiv.{u1, u1, u1} G G G (instHDiv.{u1} G (DivInvMonoid.toDiv.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) x y)) (HDiv.hDiv.{u2, u2, u2} H H H (instHDiv.{u2} H (DivInvMonoid.toDiv.{u2} H (Group.toDivInvMonoid.{u2} H _inst_3))) (f x) (f y))), Eq.{max (succ u1) (succ u2)} (G -> H) (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (MonoidHom.{u1, u2} G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_3)))) G (fun (_x : G) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : G) => H) _x) (MulHomClass.toFunLike.{max u1 u2, u1, u2} (MonoidHom.{u1, u2} G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_3)))) G H (MulOneClass.toMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1)))) (MulOneClass.toMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_3)))) (MonoidHomClass.toMulHomClass.{max u1 u2, u1, u2} (MonoidHom.{u1, u2} G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_3)))) G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_3))) (MonoidHom.monoidHomClass.{u1, u2} G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_3)))))) (MonoidHom.ofMapDiv.{u1, u2} G _inst_1 H _inst_3 f hf)) f
+  forall {G : Type.{u1}} [_inst_1 : Group.{u1} G] {H : Type.{u2}} [_inst_3 : Group.{u2} H] (f : G -> H) (hf : forall (x : G) (y : G), Eq.{succ u2} H (f (HDiv.hDiv.{u1, u1, u1} G G G (instHDiv.{u1} G (DivInvMonoid.toDiv.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) x y)) (HDiv.hDiv.{u2, u2, u2} H H H (instHDiv.{u2} H (DivInvMonoid.toDiv.{u2} H (Group.toDivInvMonoid.{u2} H _inst_3))) (f x) (f y))), Eq.{max (succ u1) (succ u2)} (G -> H) (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (MonoidHom.{u1, u2} G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_3)))) G (fun (_x : G) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : G) => H) _x) (MulHomClass.toFunLike.{max u1 u2, u1, u2} (MonoidHom.{u1, u2} G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_3)))) G H (MulOneClass.toMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1)))) (MulOneClass.toMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_3)))) (MonoidHomClass.toMulHomClass.{max u1 u2, u1, u2} (MonoidHom.{u1, u2} G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_3)))) G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_3))) (MonoidHom.monoidHomClass.{u1, u2} G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_3)))))) (MonoidHom.ofMapDiv.{u1, u2} G _inst_1 H _inst_3 f hf)) f
 Case conversion may be inaccurate. Consider using '#align monoid_hom.coe_of_map_div MonoidHom.coe_of_map_divₓ'. -/
 @[simp, to_additive]
 theorem coe_of_map_div {H : Type _} [Group H] (f : G → H) (hf : ∀ x y, f (x / y) = f x / f y) :
@@ -2593,7 +2593,7 @@ add_decl_doc AddMonoidHom.hasNeg
 lean 3 declaration is
   forall {M : Type.{u1}} {G : Type.{u2}} {mM : MulOneClass.{u1} M} {gG : CommGroup.{u2} G} (f : MonoidHom.{u1, u2} M G mM (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G (CommGroup.toGroup.{u2} G gG))))) (x : M), Eq.{succ u2} G (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} M G mM (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G (CommGroup.toGroup.{u2} G gG))))) (fun (_x : MonoidHom.{u1, u2} M G mM (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G (CommGroup.toGroup.{u2} G gG))))) => M -> G) (MonoidHom.hasCoeToFun.{u1, u2} M G mM (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G (CommGroup.toGroup.{u2} G gG))))) (Inv.inv.{max u2 u1} (MonoidHom.{u1, u2} M G mM (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G (CommGroup.toGroup.{u2} G gG))))) (MonoidHom.hasInv.{u1, u2} M G mM gG) f) x) (Inv.inv.{u2} G (DivInvMonoid.toHasInv.{u2} G (Group.toDivInvMonoid.{u2} G (CommGroup.toGroup.{u2} G gG))) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} M G mM (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G (CommGroup.toGroup.{u2} G gG))))) (fun (_x : MonoidHom.{u1, u2} M G mM (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G (CommGroup.toGroup.{u2} G gG))))) => M -> G) (MonoidHom.hasCoeToFun.{u1, u2} M G mM (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G (CommGroup.toGroup.{u2} G gG))))) f x))
 but is expected to have type
-  forall {M : Type.{u2}} {G : Type.{u1}} {mM : MulOneClass.{u2} M} {gG : CommGroup.{u1} G} (f : MonoidHom.{u2, u1} M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))) (x : M), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => G) x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => G) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))) M G (MulOneClass.toMul.{u2} M mM) (MulOneClass.toMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))) M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG)))) (MonoidHom.monoidHomClass.{u2, u1} M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))))) (Inv.inv.{max u2 u1} (MonoidHom.{u2, u1} M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))) (MonoidHom.instInvMonoidHomToMulOneClassToMonoidToDivInvMonoidToGroup.{u2, u1} M G mM gG) f) x) (Inv.inv.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => G) x) (InvOneClass.toInv.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => G) x) (DivInvOneMonoid.toInvOneClass.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => G) x) (DivisionMonoid.toDivInvOneMonoid.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => G) x) (DivisionCommMonoid.toDivisionMonoid.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => G) x) (CommGroup.toDivisionCommMonoid.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => G) x) gG))))) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => G) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))) M G (MulOneClass.toMul.{u2} M mM) (MulOneClass.toMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))) M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG)))) (MonoidHom.monoidHomClass.{u2, u1} M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))))) f x))
+  forall {M : Type.{u2}} {G : Type.{u1}} {mM : MulOneClass.{u2} M} {gG : CommGroup.{u1} G} (f : MonoidHom.{u2, u1} M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))) (x : M), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => G) x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => G) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))) M G (MulOneClass.toMul.{u2} M mM) (MulOneClass.toMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))) M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG)))) (MonoidHom.monoidHomClass.{u2, u1} M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))))) (Inv.inv.{max u2 u1} (MonoidHom.{u2, u1} M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))) (MonoidHom.instInvMonoidHomToMulOneClassToMonoidToDivInvMonoidToGroup.{u2, u1} M G mM gG) f) x) (Inv.inv.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => G) x) (InvOneClass.toInv.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => G) x) (DivInvOneMonoid.toInvOneClass.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => G) x) (DivisionMonoid.toDivInvOneMonoid.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => G) x) (DivisionCommMonoid.toDivisionMonoid.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => G) x) (CommGroup.toDivisionCommMonoid.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => G) x) gG))))) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => G) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))) M G (MulOneClass.toMul.{u2} M mM) (MulOneClass.toMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))) M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG)))) (MonoidHom.monoidHomClass.{u2, u1} M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))))) f x))
 Case conversion may be inaccurate. Consider using '#align monoid_hom.inv_apply MonoidHom.inv_applyₓ'. -/
 @[simp, to_additive]
 theorem inv_apply {M G} {mM : MulOneClass M} {gG : CommGroup G} (f : M →* G) (x : M) :
@@ -2646,7 +2646,7 @@ add_decl_doc AddMonoidHom.hasSub
 lean 3 declaration is
   forall {M : Type.{u1}} {G : Type.{u2}} {mM : MulOneClass.{u1} M} {gG : CommGroup.{u2} G} (f : MonoidHom.{u1, u2} M G mM (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G (CommGroup.toGroup.{u2} G gG))))) (g : MonoidHom.{u1, u2} M G mM (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G (CommGroup.toGroup.{u2} G gG))))) (x : M), Eq.{succ u2} G (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} M G mM (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G (CommGroup.toGroup.{u2} G gG))))) (fun (_x : MonoidHom.{u1, u2} M G mM (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G (CommGroup.toGroup.{u2} G gG))))) => M -> G) (MonoidHom.hasCoeToFun.{u1, u2} M G mM (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G (CommGroup.toGroup.{u2} G gG))))) (HDiv.hDiv.{max u2 u1, max u2 u1, max u2 u1} (MonoidHom.{u1, u2} M G mM (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G (CommGroup.toGroup.{u2} G gG))))) (MonoidHom.{u1, u2} M G mM (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G (CommGroup.toGroup.{u2} G gG))))) (MonoidHom.{u1, u2} M G mM (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G (CommGroup.toGroup.{u2} G gG))))) (instHDiv.{max u2 u1} (MonoidHom.{u1, u2} M G mM (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G (CommGroup.toGroup.{u2} G gG))))) (MonoidHom.hasDiv.{u1, u2} M G mM gG)) f g) x) (HDiv.hDiv.{u2, u2, u2} G G G (instHDiv.{u2} G (DivInvMonoid.toHasDiv.{u2} G (Group.toDivInvMonoid.{u2} G (CommGroup.toGroup.{u2} G gG)))) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} M G mM (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G (CommGroup.toGroup.{u2} G gG))))) (fun (_x : MonoidHom.{u1, u2} M G mM (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G (CommGroup.toGroup.{u2} G gG))))) => M -> G) (MonoidHom.hasCoeToFun.{u1, u2} M G mM (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G (CommGroup.toGroup.{u2} G gG))))) f x) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} M G mM (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G (CommGroup.toGroup.{u2} G gG))))) (fun (_x : MonoidHom.{u1, u2} M G mM (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G (CommGroup.toGroup.{u2} G gG))))) => M -> G) (MonoidHom.hasCoeToFun.{u1, u2} M G mM (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G (CommGroup.toGroup.{u2} G gG))))) g x))
 but is expected to have type
-  forall {M : Type.{u2}} {G : Type.{u1}} {mM : MulOneClass.{u2} M} {gG : CommGroup.{u1} G} (f : MonoidHom.{u2, u1} M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))) (g : MonoidHom.{u2, u1} M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))) (x : M), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => G) x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => G) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))) M G (MulOneClass.toMul.{u2} M mM) (MulOneClass.toMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))) M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG)))) (MonoidHom.monoidHomClass.{u2, u1} M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))))) (HDiv.hDiv.{max u2 u1, max u2 u1, max u2 u1} (MonoidHom.{u2, u1} M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))) (MonoidHom.{u2, u1} M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))) (MonoidHom.{u2, u1} M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))) (instHDiv.{max u2 u1} (MonoidHom.{u2, u1} M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))) (MonoidHom.instDivMonoidHomToMulOneClassToMonoidToDivInvMonoidToGroup.{u2, u1} M G mM gG)) f g) x) (HDiv.hDiv.{u1, u1, u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => G) x) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => G) x) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => G) x) (instHDiv.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => G) x) (DivInvMonoid.toDiv.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => G) x) (Group.toDivInvMonoid.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => G) x) (CommGroup.toGroup.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => G) x) gG)))) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => G) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))) M G (MulOneClass.toMul.{u2} M mM) (MulOneClass.toMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))) M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG)))) (MonoidHom.monoidHomClass.{u2, u1} M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))))) f x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => G) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))) M G (MulOneClass.toMul.{u2} M mM) (MulOneClass.toMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))) M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG)))) (MonoidHom.monoidHomClass.{u2, u1} M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))))) g x))
+  forall {M : Type.{u2}} {G : Type.{u1}} {mM : MulOneClass.{u2} M} {gG : CommGroup.{u1} G} (f : MonoidHom.{u2, u1} M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))) (g : MonoidHom.{u2, u1} M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))) (x : M), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => G) x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => G) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))) M G (MulOneClass.toMul.{u2} M mM) (MulOneClass.toMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))) M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG)))) (MonoidHom.monoidHomClass.{u2, u1} M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))))) (HDiv.hDiv.{max u2 u1, max u2 u1, max u2 u1} (MonoidHom.{u2, u1} M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))) (MonoidHom.{u2, u1} M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))) (MonoidHom.{u2, u1} M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))) (instHDiv.{max u2 u1} (MonoidHom.{u2, u1} M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))) (MonoidHom.instDivMonoidHomToMulOneClassToMonoidToDivInvMonoidToGroup.{u2, u1} M G mM gG)) f g) x) (HDiv.hDiv.{u1, u1, u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => G) x) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => G) x) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => G) x) (instHDiv.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => G) x) (DivInvMonoid.toDiv.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => G) x) (Group.toDivInvMonoid.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => G) x) (CommGroup.toGroup.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => G) x) gG)))) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => G) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))) M G (MulOneClass.toMul.{u2} M mM) (MulOneClass.toMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))) M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG)))) (MonoidHom.monoidHomClass.{u2, u1} M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))))) f x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2391 : M) => G) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))) M G (MulOneClass.toMul.{u2} M mM) (MulOneClass.toMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))) M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG)))) (MonoidHom.monoidHomClass.{u2, u1} M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))))) g x))
 Case conversion may be inaccurate. Consider using '#align monoid_hom.div_apply MonoidHom.div_applyₓ'. -/
 @[simp, to_additive]
 theorem div_apply {M G} {mM : MulOneClass M} {gG : CommGroup G} (f g : M →* G) (x : M) :
Diff
@@ -2663,5 +2663,5 @@ instance {M N} {hM : MulZeroOneClass M} [CommMonoidWithZero N] : Mul (M →*₀
   ⟨fun f g =>
     { (f * g : M →* N) with
       toFun := fun a => f a * g a
-      map_zero' := by rw [map_zero, zero_mul] }⟩
+      map_zero' := by rw [map_zero, MulZeroClass.zero_mul] }⟩
 
Diff
@@ -369,7 +369,7 @@ instance MulHom.mulHomClass : MulHomClass (M →ₙ* N) M N
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} {F : Type.{u3}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] [_inst_3 : MulHomClass.{u3, u1, u2} F M N _inst_1 _inst_2] (f : F) (x : M) (y : M), Eq.{succ u2} N (coeFn.{succ u3, max (succ u1) (succ u2)} F (fun (_x : F) => M -> N) (FunLike.hasCoeToFun.{succ u3, succ u1, succ u2} F M (fun (_x : M) => N) (MulHomClass.toFunLike.{u3, u1, u2} F M N _inst_1 _inst_2 _inst_3)) f (HMul.hMul.{u1, u1, u1} M M M (instHMul.{u1} M _inst_1) x y)) (HMul.hMul.{u2, u2, u2} N N N (instHMul.{u2} N _inst_2) (coeFn.{succ u3, max (succ u1) (succ u2)} F (fun (_x : F) => M -> N) (FunLike.hasCoeToFun.{succ u3, succ u1, succ u2} F M (fun (_x : M) => N) (MulHomClass.toFunLike.{u3, u1, u2} F M N _inst_1 _inst_2 _inst_3)) f x) (coeFn.{succ u3, max (succ u1) (succ u2)} F (fun (_x : F) => M -> N) (FunLike.hasCoeToFun.{succ u3, succ u1, succ u2} F M (fun (_x : M) => N) (MulHomClass.toFunLike.{u3, u1, u2} F M N _inst_1 _inst_2 _inst_3)) f y))
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} {F : Type.{u3}} [_inst_1 : Mul.{u2} M] [_inst_2 : Mul.{u1} N] [_inst_3 : MulHomClass.{u3, u2, u1} F M N _inst_1 _inst_2] (f : F) (x : M) (y : M), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) (HMul.hMul.{u2, u2, u2} M M M (instHMul.{u2} M _inst_1) x y)) (FunLike.coe.{succ u3, succ u2, succ u1} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) _x) (MulHomClass.toFunLike.{u3, u2, u1} F M N _inst_1 _inst_2 _inst_3) f (HMul.hMul.{u2, u2, u2} M M M (instHMul.{u2} M _inst_1) x y)) (HMul.hMul.{u1, u1, u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) x) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) y) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) x) (instHMul.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) x) _inst_2) (FunLike.coe.{succ u3, succ u2, succ u1} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) _x) (MulHomClass.toFunLike.{u3, u2, u1} F M N _inst_1 _inst_2 _inst_3) f x) (FunLike.coe.{succ u3, succ u2, succ u1} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) _x) (MulHomClass.toFunLike.{u3, u2, u1} F M N _inst_1 _inst_2 _inst_3) f y))
+  forall {M : Type.{u2}} {N : Type.{u1}} {F : Type.{u3}} [_inst_1 : Mul.{u2} M] [_inst_2 : Mul.{u1} N] [_inst_3 : MulHomClass.{u3, u2, u1} F M N _inst_1 _inst_2] (f : F) (x : M) (y : M), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) (HMul.hMul.{u2, u2, u2} M M M (instHMul.{u2} M _inst_1) x y)) (FunLike.coe.{succ u3, succ u2, succ u1} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{u3, u2, u1} F M N _inst_1 _inst_2 _inst_3) f (HMul.hMul.{u2, u2, u2} M M M (instHMul.{u2} M _inst_1) x y)) (HMul.hMul.{u1, u1, u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) x) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) y) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) x) (instHMul.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) x) _inst_2) (FunLike.coe.{succ u3, succ u2, succ u1} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{u3, u2, u1} F M N _inst_1 _inst_2 _inst_3) f x) (FunLike.coe.{succ u3, succ u2, succ u1} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{u3, u2, u1} F M N _inst_1 _inst_2 _inst_3) f y))
 Case conversion may be inaccurate. Consider using '#align map_mul map_mulₓ'. -/
 @[simp, to_additive]
 theorem map_mul [MulHomClass F M N] (f : F) (x y : M) : f (x * y) = f x * f y :=
@@ -387,7 +387,7 @@ instance [MulHomClass F M N] : CoeTC F (M →ₙ* N) :=
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} {F : Type.{u3}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] [_inst_3 : MulHomClass.{u3, u1, u2} F M N _inst_1 _inst_2] (f : F), Eq.{max (succ u1) (succ u2)} ((fun (_x : MulHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) ((fun (a : Type.{u3}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{succ u3, max (succ u2) (succ u1)} a b] => self.0) F (MulHom.{u1, u2} M N _inst_1 _inst_2) (HasLiftT.mk.{succ u3, max (succ u2) (succ u1)} F (MulHom.{u1, u2} M N _inst_1 _inst_2) (CoeTCₓ.coe.{succ u3, max (succ u2) (succ u1)} F (MulHom.{u1, u2} M N _inst_1 _inst_2) (MulHom.hasCoeT.{u1, u2, u3} M N F _inst_1 _inst_2 _inst_3))) f)) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MulHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MulHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (FunLike.hasCoeToFun.{max (succ u2) (succ u1), succ u1, succ u2} (MulHom.{u1, u2} M N _inst_1 _inst_2) M (fun (_x : M) => N) (MulHomClass.toFunLike.{max u2 u1, u1, u2} (MulHom.{u1, u2} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u1, u2} M N _inst_1 _inst_2))) ((fun (a : Type.{u3}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{succ u3, max (succ u2) (succ u1)} a b] => self.0) F (MulHom.{u1, u2} M N _inst_1 _inst_2) (HasLiftT.mk.{succ u3, max (succ u2) (succ u1)} F (MulHom.{u1, u2} M N _inst_1 _inst_2) (CoeTCₓ.coe.{succ u3, max (succ u2) (succ u1)} F (MulHom.{u1, u2} M N _inst_1 _inst_2) (MulHom.hasCoeT.{u1, u2, u3} M N F _inst_1 _inst_2 _inst_3))) f)) (coeFn.{succ u3, max (succ u1) (succ u2)} F (fun (_x : F) => M -> N) (FunLike.hasCoeToFun.{succ u3, succ u1, succ u2} F M (fun (_x : M) => N) (MulHomClass.toFunLike.{u3, u1, u2} F M N _inst_1 _inst_2 _inst_3)) f)
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} {F : Type.{u3}} [_inst_1 : Mul.{u2} M] [_inst_2 : Mul.{u1} N] [_inst_3 : MulHomClass.{u3, u2, u1} F M N _inst_1 _inst_2] (f : F), Eq.{max (succ u2) (succ u1)} (forall (a : M), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) a) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) (MulHomClass.toMulHom.{u2, u1, u3} M N F _inst_1 _inst_2 _inst_3 f)) (FunLike.coe.{succ u3, succ u2, succ u1} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) _x) (MulHomClass.toFunLike.{u3, u2, u1} F M N _inst_1 _inst_2 _inst_3) f)
+  forall {M : Type.{u2}} {N : Type.{u1}} {F : Type.{u3}} [_inst_1 : Mul.{u2} M] [_inst_2 : Mul.{u1} N] [_inst_3 : MulHomClass.{u3, u2, u1} F M N _inst_1 _inst_2] (f : F), Eq.{max (succ u2) (succ u1)} (forall (a : M), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) a) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) (MulHomClass.toMulHom.{u2, u1, u3} M N F _inst_1 _inst_2 _inst_3 f)) (FunLike.coe.{succ u3, succ u2, succ u1} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{u3, u2, u1} F M N _inst_1 _inst_2 _inst_3) f)
 Case conversion may be inaccurate. Consider using '#align mul_hom.coe_coe MulHom.coe_coeₓ'. -/
 @[simp, to_additive]
 theorem MulHom.coe_coe [MulHomClass F M N] (f : F) : ((f : MulHom M N) : M → N) = f :=
@@ -458,7 +458,7 @@ instance [MonoidHomClass F M N] : CoeTC F (M →* N) :=
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} {F : Type.{u3}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N] [_inst_3 : MonoidHomClass.{u3, u1, u2} F M N _inst_1 _inst_2] (f : F), Eq.{max (succ u1) (succ u2)} ((fun (_x : MonoidHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) ((fun (a : Type.{u3}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{succ u3, max (succ u2) (succ u1)} a b] => self.0) F (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (HasLiftT.mk.{succ u3, max (succ u2) (succ u1)} F (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (CoeTCₓ.coe.{succ u3, max (succ u2) (succ u1)} F (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.hasCoeT.{u1, u2, u3} M N F _inst_1 _inst_2 _inst_3))) f)) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MonoidHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (FunLike.hasCoeToFun.{max (succ u2) (succ u1), succ u1, succ u2} (MonoidHom.{u1, u2} M N _inst_1 _inst_2) M (fun (_x : M) => N) (MulHomClass.toFunLike.{max u2 u1, u1, u2} (MonoidHom.{u1, u2} M N _inst_1 _inst_2) M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2) (MonoidHomClass.toMulHomClass.{max u2 u1, u1, u2} (MonoidHom.{u1, u2} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidHom.monoidHomClass.{u1, u2} M N _inst_1 _inst_2)))) ((fun (a : Type.{u3}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{succ u3, max (succ u2) (succ u1)} a b] => self.0) F (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (HasLiftT.mk.{succ u3, max (succ u2) (succ u1)} F (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (CoeTCₓ.coe.{succ u3, max (succ u2) (succ u1)} F (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.hasCoeT.{u1, u2, u3} M N F _inst_1 _inst_2 _inst_3))) f)) (coeFn.{succ u3, max (succ u1) (succ u2)} F (fun (_x : F) => M -> N) (FunLike.hasCoeToFun.{succ u3, succ u1, succ u2} F M (fun (_x : M) => N) (MulHomClass.toFunLike.{u3, u1, u2} F M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2) (MonoidHomClass.toMulHomClass.{u3, u1, u2} F M N _inst_1 _inst_2 _inst_3))) f)
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} {F : Type.{u3}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u1} N] [_inst_3 : MonoidHomClass.{u3, u2, u1} F M N _inst_1 _inst_2] (f : F), Eq.{max (succ u2) (succ u1)} (forall (a : M), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) a) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2))) (MonoidHomClass.toMonoidHom.{u2, u1, u3} M N F _inst_1 _inst_2 _inst_3 f)) (FunLike.coe.{succ u3, succ u2, succ u1} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) _x) (MulHomClass.toFunLike.{u3, u2, u1} F M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2) (MonoidHomClass.toMulHomClass.{u3, u2, u1} F M N _inst_1 _inst_2 _inst_3)) f)
+  forall {M : Type.{u2}} {N : Type.{u1}} {F : Type.{u3}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u1} N] [_inst_3 : MonoidHomClass.{u3, u2, u1} F M N _inst_1 _inst_2] (f : F), Eq.{max (succ u2) (succ u1)} (forall (a : M), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) a) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2))) (MonoidHomClass.toMonoidHom.{u2, u1, u3} M N F _inst_1 _inst_2 _inst_3 f)) (FunLike.coe.{succ u3, succ u2, succ u1} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{u3, u2, u1} F M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2) (MonoidHomClass.toMulHomClass.{u3, u2, u1} F M N _inst_1 _inst_2 _inst_3)) f)
 Case conversion may be inaccurate. Consider using '#align monoid_hom.coe_coe MonoidHom.coe_coeₓ'. -/
 @[simp, to_additive]
 theorem MonoidHom.coe_coe [MonoidHomClass F M N] (f : F) : ((f : M →* N) : M → N) = f :=
@@ -470,7 +470,7 @@ theorem MonoidHom.coe_coe [MonoidHomClass F M N] (f : F) : ((f : M →* N) : M 
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} {F : Type.{u3}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N] [_inst_3 : MonoidHomClass.{u3, u1, u2} F M N _inst_1 _inst_2] (f : F) {a : M} {b : M}, (Eq.{succ u1} M (HMul.hMul.{u1, u1, u1} M M M (instHMul.{u1} M (MulOneClass.toHasMul.{u1} M _inst_1)) a b) (OfNat.ofNat.{u1} M 1 (OfNat.mk.{u1} M 1 (One.one.{u1} M (MulOneClass.toHasOne.{u1} M _inst_1))))) -> (Eq.{succ u2} N (HMul.hMul.{u2, u2, u2} N N N (instHMul.{u2} N (MulOneClass.toHasMul.{u2} N _inst_2)) (coeFn.{succ u3, max (succ u1) (succ u2)} F (fun (_x : F) => M -> N) (FunLike.hasCoeToFun.{succ u3, succ u1, succ u2} F M (fun (_x : M) => N) (MulHomClass.toFunLike.{u3, u1, u2} F M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2) (MonoidHomClass.toMulHomClass.{u3, u1, u2} F M N _inst_1 _inst_2 _inst_3))) f a) (coeFn.{succ u3, max (succ u1) (succ u2)} F (fun (_x : F) => M -> N) (FunLike.hasCoeToFun.{succ u3, succ u1, succ u2} F M (fun (_x : M) => N) (MulHomClass.toFunLike.{u3, u1, u2} F M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2) (MonoidHomClass.toMulHomClass.{u3, u1, u2} F M N _inst_1 _inst_2 _inst_3))) f b)) (OfNat.ofNat.{u2} N 1 (OfNat.mk.{u2} N 1 (One.one.{u2} N (MulOneClass.toHasOne.{u2} N _inst_2)))))
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} {F : Type.{u3}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u1} N] [_inst_3 : MonoidHomClass.{u3, u2, u1} F M N _inst_1 _inst_2] (f : F) {a : M} {b : M}, (Eq.{succ u2} M (HMul.hMul.{u2, u2, u2} M M M (instHMul.{u2} M (MulOneClass.toMul.{u2} M _inst_1)) a b) (OfNat.ofNat.{u2} M 1 (One.toOfNat1.{u2} M (MulOneClass.toOne.{u2} M _inst_1)))) -> (Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) a) (HMul.hMul.{u1, u1, u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) a) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) b) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) a) (instHMul.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) a) (MulOneClass.toMul.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) a) _inst_2)) (FunLike.coe.{succ u3, succ u2, succ u1} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) _x) (MulHomClass.toFunLike.{u3, u2, u1} F M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2) (MonoidHomClass.toMulHomClass.{u3, u2, u1} F M N _inst_1 _inst_2 _inst_3)) f a) (FunLike.coe.{succ u3, succ u2, succ u1} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) _x) (MulHomClass.toFunLike.{u3, u2, u1} F M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2) (MonoidHomClass.toMulHomClass.{u3, u2, u1} F M N _inst_1 _inst_2 _inst_3)) f b)) (OfNat.ofNat.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) a) 1 (One.toOfNat1.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) a) (MulOneClass.toOne.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) a) _inst_2))))
+  forall {M : Type.{u2}} {N : Type.{u1}} {F : Type.{u3}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u1} N] [_inst_3 : MonoidHomClass.{u3, u2, u1} F M N _inst_1 _inst_2] (f : F) {a : M} {b : M}, (Eq.{succ u2} M (HMul.hMul.{u2, u2, u2} M M M (instHMul.{u2} M (MulOneClass.toMul.{u2} M _inst_1)) a b) (OfNat.ofNat.{u2} M 1 (One.toOfNat1.{u2} M (MulOneClass.toOne.{u2} M _inst_1)))) -> (Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) a) (HMul.hMul.{u1, u1, u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) a) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) b) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) a) (instHMul.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) a) (MulOneClass.toMul.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) a) _inst_2)) (FunLike.coe.{succ u3, succ u2, succ u1} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{u3, u2, u1} F M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2) (MonoidHomClass.toMulHomClass.{u3, u2, u1} F M N _inst_1 _inst_2 _inst_3)) f a) (FunLike.coe.{succ u3, succ u2, succ u1} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{u3, u2, u1} F M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2) (MonoidHomClass.toMulHomClass.{u3, u2, u1} F M N _inst_1 _inst_2 _inst_3)) f b)) (OfNat.ofNat.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) a) 1 (One.toOfNat1.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) a) (MulOneClass.toOne.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) a) _inst_2))))
 Case conversion may be inaccurate. Consider using '#align map_mul_eq_one map_mul_eq_oneₓ'. -/
 @[to_additive]
 theorem map_mul_eq_one [MonoidHomClass F M N] (f : F) {a b : M} (h : a * b = 1) : f a * f b = 1 :=
@@ -482,7 +482,7 @@ theorem map_mul_eq_one [MonoidHomClass F M N] (f : F) {a b : M} (h : a * b = 1)
 lean 3 declaration is
   forall {G : Type.{u1}} {H : Type.{u2}} {F : Type.{u3}} [_inst_3 : DivInvMonoid.{u1} G] [_inst_4 : DivInvMonoid.{u2} H] [_inst_5 : MonoidHomClass.{u3, u1, u2} F G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G _inst_3)) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H _inst_4))] (f : F), (forall (a : G), Eq.{succ u2} H (coeFn.{succ u3, max (succ u1) (succ u2)} F (fun (_x : F) => G -> H) (FunLike.hasCoeToFun.{succ u3, succ u1, succ u2} F G (fun (_x : G) => H) (MulHomClass.toFunLike.{u3, u1, u2} F G H (MulOneClass.toHasMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G _inst_3))) (MulOneClass.toHasMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H _inst_4))) (MonoidHomClass.toMulHomClass.{u3, u1, u2} F G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G _inst_3)) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H _inst_4)) _inst_5))) f (Inv.inv.{u1} G (DivInvMonoid.toHasInv.{u1} G _inst_3) a)) (Inv.inv.{u2} H (DivInvMonoid.toHasInv.{u2} H _inst_4) (coeFn.{succ u3, max (succ u1) (succ u2)} F (fun (_x : F) => G -> H) (FunLike.hasCoeToFun.{succ u3, succ u1, succ u2} F G (fun (_x : G) => H) (MulHomClass.toFunLike.{u3, u1, u2} F G H (MulOneClass.toHasMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G _inst_3))) (MulOneClass.toHasMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H _inst_4))) (MonoidHomClass.toMulHomClass.{u3, u1, u2} F G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G _inst_3)) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H _inst_4)) _inst_5))) f a))) -> (forall (a : G) (b : G), Eq.{succ u2} H (coeFn.{succ u3, max (succ u1) (succ u2)} F (fun (_x : F) => G -> H) (FunLike.hasCoeToFun.{succ u3, succ u1, succ u2} F G (fun (_x : G) => H) (MulHomClass.toFunLike.{u3, u1, u2} F G H (MulOneClass.toHasMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G _inst_3))) (MulOneClass.toHasMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H _inst_4))) (MonoidHomClass.toMulHomClass.{u3, u1, u2} F G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G _inst_3)) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H _inst_4)) _inst_5))) f (HDiv.hDiv.{u1, u1, u1} G G G (instHDiv.{u1} G (DivInvMonoid.toHasDiv.{u1} G _inst_3)) a b)) (HDiv.hDiv.{u2, u2, u2} H H H (instHDiv.{u2} H (DivInvMonoid.toHasDiv.{u2} H _inst_4)) (coeFn.{succ u3, max (succ u1) (succ u2)} F (fun (_x : F) => G -> H) (FunLike.hasCoeToFun.{succ u3, succ u1, succ u2} F G (fun (_x : G) => H) (MulHomClass.toFunLike.{u3, u1, u2} F G H (MulOneClass.toHasMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G _inst_3))) (MulOneClass.toHasMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H _inst_4))) (MonoidHomClass.toMulHomClass.{u3, u1, u2} F G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G _inst_3)) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H _inst_4)) _inst_5))) f a) (coeFn.{succ u3, max (succ u1) (succ u2)} F (fun (_x : F) => G -> H) (FunLike.hasCoeToFun.{succ u3, succ u1, succ u2} F G (fun (_x : G) => H) (MulHomClass.toFunLike.{u3, u1, u2} F G H (MulOneClass.toHasMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G _inst_3))) (MulOneClass.toHasMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H _inst_4))) (MonoidHomClass.toMulHomClass.{u3, u1, u2} F G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G _inst_3)) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H _inst_4)) _inst_5))) f b)))
 but is expected to have type
-  forall {G : Type.{u3}} {H : Type.{u2}} {F : Type.{u1}} [_inst_3 : DivInvMonoid.{u3} G] [_inst_4 : DivInvMonoid.{u2} H] [_inst_5 : MonoidHomClass.{u1, u3, u2} F G H (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G _inst_3)) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H _inst_4))] (f : F), (forall (a : G), Eq.{succ u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : G) => H) (Inv.inv.{u3} G (DivInvMonoid.toInv.{u3} G _inst_3) a)) (FunLike.coe.{succ u1, succ u3, succ u2} F G (fun (_x : G) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : G) => H) _x) (MulHomClass.toFunLike.{u1, u3, u2} F G H (MulOneClass.toMul.{u3} G (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G _inst_3))) (MulOneClass.toMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H _inst_4))) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F G H (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G _inst_3)) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H _inst_4)) _inst_5)) f (Inv.inv.{u3} G (DivInvMonoid.toInv.{u3} G _inst_3) a)) (Inv.inv.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : G) => H) a) (DivInvMonoid.toInv.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : G) => H) a) _inst_4) (FunLike.coe.{succ u1, succ u3, succ u2} F G (fun (_x : G) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : G) => H) _x) (MulHomClass.toFunLike.{u1, u3, u2} F G H (MulOneClass.toMul.{u3} G (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G _inst_3))) (MulOneClass.toMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H _inst_4))) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F G H (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G _inst_3)) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H _inst_4)) _inst_5)) f a))) -> (forall (a : G) (b : G), Eq.{succ u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : G) => H) (HDiv.hDiv.{u3, u3, u3} G G G (instHDiv.{u3} G (DivInvMonoid.toDiv.{u3} G _inst_3)) a b)) (FunLike.coe.{succ u1, succ u3, succ u2} F G (fun (_x : G) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : G) => H) _x) (MulHomClass.toFunLike.{u1, u3, u2} F G H (MulOneClass.toMul.{u3} G (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G _inst_3))) (MulOneClass.toMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H _inst_4))) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F G H (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G _inst_3)) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H _inst_4)) _inst_5)) f (HDiv.hDiv.{u3, u3, u3} G G G (instHDiv.{u3} G (DivInvMonoid.toDiv.{u3} G _inst_3)) a b)) (HDiv.hDiv.{u2, u2, u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : G) => H) a) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : G) => H) b) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : G) => H) a) (instHDiv.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : G) => H) a) (DivInvMonoid.toDiv.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : G) => H) a) _inst_4)) (FunLike.coe.{succ u1, succ u3, succ u2} F G (fun (_x : G) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : G) => H) _x) (MulHomClass.toFunLike.{u1, u3, u2} F G H (MulOneClass.toMul.{u3} G (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G _inst_3))) (MulOneClass.toMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H _inst_4))) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F G H (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G _inst_3)) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H _inst_4)) _inst_5)) f a) (FunLike.coe.{succ u1, succ u3, succ u2} F G (fun (_x : G) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : G) => H) _x) (MulHomClass.toFunLike.{u1, u3, u2} F G H (MulOneClass.toMul.{u3} G (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G _inst_3))) (MulOneClass.toMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H _inst_4))) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F G H (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G _inst_3)) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H _inst_4)) _inst_5)) f b)))
+  forall {G : Type.{u3}} {H : Type.{u2}} {F : Type.{u1}} [_inst_3 : DivInvMonoid.{u3} G] [_inst_4 : DivInvMonoid.{u2} H] [_inst_5 : MonoidHomClass.{u1, u3, u2} F G H (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G _inst_3)) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H _inst_4))] (f : F), (forall (a : G), Eq.{succ u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : G) => H) (Inv.inv.{u3} G (DivInvMonoid.toInv.{u3} G _inst_3) a)) (FunLike.coe.{succ u1, succ u3, succ u2} F G (fun (_x : G) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : G) => H) _x) (MulHomClass.toFunLike.{u1, u3, u2} F G H (MulOneClass.toMul.{u3} G (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G _inst_3))) (MulOneClass.toMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H _inst_4))) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F G H (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G _inst_3)) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H _inst_4)) _inst_5)) f (Inv.inv.{u3} G (DivInvMonoid.toInv.{u3} G _inst_3) a)) (Inv.inv.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : G) => H) a) (DivInvMonoid.toInv.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : G) => H) a) _inst_4) (FunLike.coe.{succ u1, succ u3, succ u2} F G (fun (_x : G) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : G) => H) _x) (MulHomClass.toFunLike.{u1, u3, u2} F G H (MulOneClass.toMul.{u3} G (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G _inst_3))) (MulOneClass.toMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H _inst_4))) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F G H (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G _inst_3)) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H _inst_4)) _inst_5)) f a))) -> (forall (a : G) (b : G), Eq.{succ u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : G) => H) (HDiv.hDiv.{u3, u3, u3} G G G (instHDiv.{u3} G (DivInvMonoid.toDiv.{u3} G _inst_3)) a b)) (FunLike.coe.{succ u1, succ u3, succ u2} F G (fun (_x : G) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : G) => H) _x) (MulHomClass.toFunLike.{u1, u3, u2} F G H (MulOneClass.toMul.{u3} G (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G _inst_3))) (MulOneClass.toMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H _inst_4))) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F G H (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G _inst_3)) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H _inst_4)) _inst_5)) f (HDiv.hDiv.{u3, u3, u3} G G G (instHDiv.{u3} G (DivInvMonoid.toDiv.{u3} G _inst_3)) a b)) (HDiv.hDiv.{u2, u2, u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : G) => H) a) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : G) => H) b) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : G) => H) a) (instHDiv.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : G) => H) a) (DivInvMonoid.toDiv.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : G) => H) a) _inst_4)) (FunLike.coe.{succ u1, succ u3, succ u2} F G (fun (_x : G) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : G) => H) _x) (MulHomClass.toFunLike.{u1, u3, u2} F G H (MulOneClass.toMul.{u3} G (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G _inst_3))) (MulOneClass.toMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H _inst_4))) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F G H (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G _inst_3)) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H _inst_4)) _inst_5)) f a) (FunLike.coe.{succ u1, succ u3, succ u2} F G (fun (_x : G) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : G) => H) _x) (MulHomClass.toFunLike.{u1, u3, u2} F G H (MulOneClass.toMul.{u3} G (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G _inst_3))) (MulOneClass.toMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H _inst_4))) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F G H (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G _inst_3)) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H _inst_4)) _inst_5)) f b)))
 Case conversion may be inaccurate. Consider using '#align map_div' map_div'ₓ'. -/
 @[to_additive]
 theorem map_div' [DivInvMonoid G] [DivInvMonoid H] [MonoidHomClass F G H] (f : F)
@@ -495,7 +495,7 @@ theorem map_div' [DivInvMonoid G] [DivInvMonoid H] [MonoidHomClass F G H] (f : F
 lean 3 declaration is
   forall {G : Type.{u1}} {H : Type.{u2}} {F : Type.{u3}} [_inst_3 : Group.{u1} G] [_inst_4 : DivisionMonoid.{u2} H] [_inst_5 : MonoidHomClass.{u3, u1, u2} F G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4)))] (f : F) (a : G), Eq.{succ u2} H (coeFn.{succ u3, max (succ u1) (succ u2)} F (fun (_x : F) => G -> H) (FunLike.hasCoeToFun.{succ u3, succ u1, succ u2} F G (fun (_x : G) => H) (MulHomClass.toFunLike.{u3, u1, u2} F G H (MulOneClass.toHasMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (MulOneClass.toHasMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4)))) (MonoidHomClass.toMulHomClass.{u3, u1, u2} F G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4))) _inst_5))) f (Inv.inv.{u1} G (DivInvMonoid.toHasInv.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)) a)) (Inv.inv.{u2} H (DivInvMonoid.toHasInv.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4)) (coeFn.{succ u3, max (succ u1) (succ u2)} F (fun (_x : F) => G -> H) (FunLike.hasCoeToFun.{succ u3, succ u1, succ u2} F G (fun (_x : G) => H) (MulHomClass.toFunLike.{u3, u1, u2} F G H (MulOneClass.toHasMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (MulOneClass.toHasMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4)))) (MonoidHomClass.toMulHomClass.{u3, u1, u2} F G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4))) _inst_5))) f a))
 but is expected to have type
-  forall {G : Type.{u3}} {H : Type.{u2}} {F : Type.{u1}} [_inst_3 : Group.{u3} G] [_inst_4 : DivisionMonoid.{u2} H] [_inst_5 : MonoidHomClass.{u1, u3, u2} F G H (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4)))] (f : F) (a : G), Eq.{succ u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : G) => H) (Inv.inv.{u3} G (InvOneClass.toInv.{u3} G (DivInvOneMonoid.toInvOneClass.{u3} G (DivisionMonoid.toDivInvOneMonoid.{u3} G (Group.toDivisionMonoid.{u3} G _inst_3)))) a)) (FunLike.coe.{succ u1, succ u3, succ u2} F G (fun (_x : G) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : G) => H) _x) (MulHomClass.toFunLike.{u1, u3, u2} F G H (MulOneClass.toMul.{u3} G (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3)))) (MulOneClass.toMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4)))) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F G H (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4))) _inst_5)) f (Inv.inv.{u3} G (InvOneClass.toInv.{u3} G (DivInvOneMonoid.toInvOneClass.{u3} G (DivisionMonoid.toDivInvOneMonoid.{u3} G (Group.toDivisionMonoid.{u3} G _inst_3)))) a)) (Inv.inv.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : G) => H) a) (InvOneClass.toInv.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : G) => H) a) (DivInvOneMonoid.toInvOneClass.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : G) => H) a) (DivisionMonoid.toDivInvOneMonoid.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : G) => H) a) _inst_4))) (FunLike.coe.{succ u1, succ u3, succ u2} F G (fun (_x : G) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : G) => H) _x) (MulHomClass.toFunLike.{u1, u3, u2} F G H (MulOneClass.toMul.{u3} G (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3)))) (MulOneClass.toMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4)))) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F G H (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4))) _inst_5)) f a))
+  forall {G : Type.{u3}} {H : Type.{u2}} {F : Type.{u1}} [_inst_3 : Group.{u3} G] [_inst_4 : DivisionMonoid.{u2} H] [_inst_5 : MonoidHomClass.{u1, u3, u2} F G H (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4)))] (f : F) (a : G), Eq.{succ u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : G) => H) (Inv.inv.{u3} G (InvOneClass.toInv.{u3} G (DivInvOneMonoid.toInvOneClass.{u3} G (DivisionMonoid.toDivInvOneMonoid.{u3} G (Group.toDivisionMonoid.{u3} G _inst_3)))) a)) (FunLike.coe.{succ u1, succ u3, succ u2} F G (fun (_x : G) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : G) => H) _x) (MulHomClass.toFunLike.{u1, u3, u2} F G H (MulOneClass.toMul.{u3} G (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3)))) (MulOneClass.toMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4)))) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F G H (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4))) _inst_5)) f (Inv.inv.{u3} G (InvOneClass.toInv.{u3} G (DivInvOneMonoid.toInvOneClass.{u3} G (DivisionMonoid.toDivInvOneMonoid.{u3} G (Group.toDivisionMonoid.{u3} G _inst_3)))) a)) (Inv.inv.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : G) => H) a) (InvOneClass.toInv.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : G) => H) a) (DivInvOneMonoid.toInvOneClass.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : G) => H) a) (DivisionMonoid.toDivInvOneMonoid.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : G) => H) a) _inst_4))) (FunLike.coe.{succ u1, succ u3, succ u2} F G (fun (_x : G) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : G) => H) _x) (MulHomClass.toFunLike.{u1, u3, u2} F G H (MulOneClass.toMul.{u3} G (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3)))) (MulOneClass.toMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4)))) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F G H (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4))) _inst_5)) f a))
 Case conversion may be inaccurate. Consider using '#align map_inv map_invₓ'. -/
 /-- Group homomorphisms preserve inverse. -/
 @[simp, to_additive "Additive group homomorphisms preserve negation."]
@@ -509,7 +509,7 @@ theorem map_inv [Group G] [DivisionMonoid H] [MonoidHomClass F G H] (f : F) (a :
 lean 3 declaration is
   forall {G : Type.{u1}} {H : Type.{u2}} {F : Type.{u3}} [_inst_3 : Group.{u1} G] [_inst_4 : DivisionMonoid.{u2} H] [_inst_5 : MonoidHomClass.{u3, u1, u2} F G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4)))] (f : F) (a : G) (b : G), Eq.{succ u2} H (coeFn.{succ u3, max (succ u1) (succ u2)} F (fun (_x : F) => G -> H) (FunLike.hasCoeToFun.{succ u3, succ u1, succ u2} F G (fun (_x : G) => H) (MulHomClass.toFunLike.{u3, u1, u2} F G H (MulOneClass.toHasMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (MulOneClass.toHasMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4)))) (MonoidHomClass.toMulHomClass.{u3, u1, u2} F G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4))) _inst_5))) f (HMul.hMul.{u1, u1, u1} G G G (instHMul.{u1} G (MulOneClass.toHasMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3))))) a (Inv.inv.{u1} G (DivInvMonoid.toHasInv.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)) b))) (HMul.hMul.{u2, u2, u2} H H H (instHMul.{u2} H (MulOneClass.toHasMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4))))) (coeFn.{succ u3, max (succ u1) (succ u2)} F (fun (_x : F) => G -> H) (FunLike.hasCoeToFun.{succ u3, succ u1, succ u2} F G (fun (_x : G) => H) (MulHomClass.toFunLike.{u3, u1, u2} F G H (MulOneClass.toHasMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (MulOneClass.toHasMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4)))) (MonoidHomClass.toMulHomClass.{u3, u1, u2} F G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4))) _inst_5))) f a) (Inv.inv.{u2} H (DivInvMonoid.toHasInv.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4)) (coeFn.{succ u3, max (succ u1) (succ u2)} F (fun (_x : F) => G -> H) (FunLike.hasCoeToFun.{succ u3, succ u1, succ u2} F G (fun (_x : G) => H) (MulHomClass.toFunLike.{u3, u1, u2} F G H (MulOneClass.toHasMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (MulOneClass.toHasMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4)))) (MonoidHomClass.toMulHomClass.{u3, u1, u2} F G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4))) _inst_5))) f b)))
 but is expected to have type
-  forall {G : Type.{u3}} {H : Type.{u2}} {F : Type.{u1}} [_inst_3 : Group.{u3} G] [_inst_4 : DivisionMonoid.{u2} H] [_inst_5 : MonoidHomClass.{u1, u3, u2} F G H (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4)))] (f : F) (a : G) (b : G), Eq.{succ u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : G) => H) (HMul.hMul.{u3, u3, u3} G G G (instHMul.{u3} G (MulOneClass.toMul.{u3} G (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3))))) a (Inv.inv.{u3} G (InvOneClass.toInv.{u3} G (DivInvOneMonoid.toInvOneClass.{u3} G (DivisionMonoid.toDivInvOneMonoid.{u3} G (Group.toDivisionMonoid.{u3} G _inst_3)))) b))) (FunLike.coe.{succ u1, succ u3, succ u2} F G (fun (_x : G) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : G) => H) _x) (MulHomClass.toFunLike.{u1, u3, u2} F G H (MulOneClass.toMul.{u3} G (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3)))) (MulOneClass.toMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4)))) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F G H (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4))) _inst_5)) f (HMul.hMul.{u3, u3, u3} G G G (instHMul.{u3} G (MulOneClass.toMul.{u3} G (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3))))) a (Inv.inv.{u3} G (InvOneClass.toInv.{u3} G (DivInvOneMonoid.toInvOneClass.{u3} G (DivisionMonoid.toDivInvOneMonoid.{u3} G (Group.toDivisionMonoid.{u3} G _inst_3)))) b))) (HMul.hMul.{u2, u2, u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : G) => H) a) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : G) => H) b) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : G) => H) a) (instHMul.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : G) => H) a) (MulOneClass.toMul.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : G) => H) a) (Monoid.toMulOneClass.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : G) => H) a) (DivInvMonoid.toMonoid.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : G) => H) a) (DivisionMonoid.toDivInvMonoid.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : G) => H) a) _inst_4))))) (FunLike.coe.{succ u1, succ u3, succ u2} F G (fun (_x : G) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : G) => H) _x) (MulHomClass.toFunLike.{u1, u3, u2} F G H (MulOneClass.toMul.{u3} G (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3)))) (MulOneClass.toMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4)))) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F G H (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4))) _inst_5)) f a) (Inv.inv.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : G) => H) b) (InvOneClass.toInv.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : G) => H) b) (DivInvOneMonoid.toInvOneClass.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : G) => H) b) (DivisionMonoid.toDivInvOneMonoid.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : G) => H) b) _inst_4))) (FunLike.coe.{succ u1, succ u3, succ u2} F G (fun (_x : G) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : G) => H) _x) (MulHomClass.toFunLike.{u1, u3, u2} F G H (MulOneClass.toMul.{u3} G (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3)))) (MulOneClass.toMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4)))) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F G H (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4))) _inst_5)) f b)))
+  forall {G : Type.{u3}} {H : Type.{u2}} {F : Type.{u1}} [_inst_3 : Group.{u3} G] [_inst_4 : DivisionMonoid.{u2} H] [_inst_5 : MonoidHomClass.{u1, u3, u2} F G H (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4)))] (f : F) (a : G) (b : G), Eq.{succ u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : G) => H) (HMul.hMul.{u3, u3, u3} G G G (instHMul.{u3} G (MulOneClass.toMul.{u3} G (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3))))) a (Inv.inv.{u3} G (InvOneClass.toInv.{u3} G (DivInvOneMonoid.toInvOneClass.{u3} G (DivisionMonoid.toDivInvOneMonoid.{u3} G (Group.toDivisionMonoid.{u3} G _inst_3)))) b))) (FunLike.coe.{succ u1, succ u3, succ u2} F G (fun (_x : G) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : G) => H) _x) (MulHomClass.toFunLike.{u1, u3, u2} F G H (MulOneClass.toMul.{u3} G (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3)))) (MulOneClass.toMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4)))) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F G H (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4))) _inst_5)) f (HMul.hMul.{u3, u3, u3} G G G (instHMul.{u3} G (MulOneClass.toMul.{u3} G (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3))))) a (Inv.inv.{u3} G (InvOneClass.toInv.{u3} G (DivInvOneMonoid.toInvOneClass.{u3} G (DivisionMonoid.toDivInvOneMonoid.{u3} G (Group.toDivisionMonoid.{u3} G _inst_3)))) b))) (HMul.hMul.{u2, u2, u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : G) => H) a) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : G) => H) b) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : G) => H) a) (instHMul.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : G) => H) a) (MulOneClass.toMul.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : G) => H) a) (Monoid.toMulOneClass.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : G) => H) a) (DivInvMonoid.toMonoid.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : G) => H) a) (DivisionMonoid.toDivInvMonoid.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : G) => H) a) _inst_4))))) (FunLike.coe.{succ u1, succ u3, succ u2} F G (fun (_x : G) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : G) => H) _x) (MulHomClass.toFunLike.{u1, u3, u2} F G H (MulOneClass.toMul.{u3} G (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3)))) (MulOneClass.toMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4)))) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F G H (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4))) _inst_5)) f a) (Inv.inv.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : G) => H) b) (InvOneClass.toInv.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : G) => H) b) (DivInvOneMonoid.toInvOneClass.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : G) => H) b) (DivisionMonoid.toDivInvOneMonoid.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : G) => H) b) _inst_4))) (FunLike.coe.{succ u1, succ u3, succ u2} F G (fun (_x : G) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : G) => H) _x) (MulHomClass.toFunLike.{u1, u3, u2} F G H (MulOneClass.toMul.{u3} G (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3)))) (MulOneClass.toMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4)))) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F G H (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4))) _inst_5)) f b)))
 Case conversion may be inaccurate. Consider using '#align map_mul_inv map_mul_invₓ'. -/
 /-- Group homomorphisms preserve division. -/
 @[simp, to_additive "Additive group homomorphisms preserve subtraction."]
@@ -522,7 +522,7 @@ theorem map_mul_inv [Group G] [DivisionMonoid H] [MonoidHomClass F G H] (f : F)
 lean 3 declaration is
   forall {G : Type.{u1}} {H : Type.{u2}} {F : Type.{u3}} [_inst_3 : Group.{u1} G] [_inst_4 : DivisionMonoid.{u2} H] [_inst_5 : MonoidHomClass.{u3, u1, u2} F G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4)))] (f : F) (a : G) (b : G), Eq.{succ u2} H (coeFn.{succ u3, max (succ u1) (succ u2)} F (fun (_x : F) => G -> H) (FunLike.hasCoeToFun.{succ u3, succ u1, succ u2} F G (fun (_x : G) => H) (MulHomClass.toFunLike.{u3, u1, u2} F G H (MulOneClass.toHasMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (MulOneClass.toHasMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4)))) (MonoidHomClass.toMulHomClass.{u3, u1, u2} F G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4))) _inst_5))) f (HDiv.hDiv.{u1, u1, u1} G G G (instHDiv.{u1} G (DivInvMonoid.toHasDiv.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3))) a b)) (HDiv.hDiv.{u2, u2, u2} H H H (instHDiv.{u2} H (DivInvMonoid.toHasDiv.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4))) (coeFn.{succ u3, max (succ u1) (succ u2)} F (fun (_x : F) => G -> H) (FunLike.hasCoeToFun.{succ u3, succ u1, succ u2} F G (fun (_x : G) => H) (MulHomClass.toFunLike.{u3, u1, u2} F G H (MulOneClass.toHasMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (MulOneClass.toHasMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4)))) (MonoidHomClass.toMulHomClass.{u3, u1, u2} F G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4))) _inst_5))) f a) (coeFn.{succ u3, max (succ u1) (succ u2)} F (fun (_x : F) => G -> H) (FunLike.hasCoeToFun.{succ u3, succ u1, succ u2} F G (fun (_x : G) => H) (MulHomClass.toFunLike.{u3, u1, u2} F G H (MulOneClass.toHasMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (MulOneClass.toHasMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4)))) (MonoidHomClass.toMulHomClass.{u3, u1, u2} F G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4))) _inst_5))) f b))
 but is expected to have type
-  forall {G : Type.{u3}} {H : Type.{u2}} {F : Type.{u1}} [_inst_3 : Group.{u3} G] [_inst_4 : DivisionMonoid.{u2} H] [_inst_5 : MonoidHomClass.{u1, u3, u2} F G H (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4)))] (f : F) (a : G) (b : G), Eq.{succ u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : G) => H) (HDiv.hDiv.{u3, u3, u3} G G G (instHDiv.{u3} G (DivInvMonoid.toDiv.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3))) a b)) (FunLike.coe.{succ u1, succ u3, succ u2} F G (fun (_x : G) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : G) => H) _x) (MulHomClass.toFunLike.{u1, u3, u2} F G H (MulOneClass.toMul.{u3} G (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3)))) (MulOneClass.toMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4)))) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F G H (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4))) _inst_5)) f (HDiv.hDiv.{u3, u3, u3} G G G (instHDiv.{u3} G (DivInvMonoid.toDiv.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3))) a b)) (HDiv.hDiv.{u2, u2, u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : G) => H) a) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : G) => H) b) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : G) => H) a) (instHDiv.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : G) => H) a) (DivInvMonoid.toDiv.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : G) => H) a) (DivisionMonoid.toDivInvMonoid.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : G) => H) a) _inst_4))) (FunLike.coe.{succ u1, succ u3, succ u2} F G (fun (_x : G) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : G) => H) _x) (MulHomClass.toFunLike.{u1, u3, u2} F G H (MulOneClass.toMul.{u3} G (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3)))) (MulOneClass.toMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4)))) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F G H (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4))) _inst_5)) f a) (FunLike.coe.{succ u1, succ u3, succ u2} F G (fun (_x : G) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : G) => H) _x) (MulHomClass.toFunLike.{u1, u3, u2} F G H (MulOneClass.toMul.{u3} G (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3)))) (MulOneClass.toMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4)))) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F G H (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4))) _inst_5)) f b))
+  forall {G : Type.{u3}} {H : Type.{u2}} {F : Type.{u1}} [_inst_3 : Group.{u3} G] [_inst_4 : DivisionMonoid.{u2} H] [_inst_5 : MonoidHomClass.{u1, u3, u2} F G H (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4)))] (f : F) (a : G) (b : G), Eq.{succ u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : G) => H) (HDiv.hDiv.{u3, u3, u3} G G G (instHDiv.{u3} G (DivInvMonoid.toDiv.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3))) a b)) (FunLike.coe.{succ u1, succ u3, succ u2} F G (fun (_x : G) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : G) => H) _x) (MulHomClass.toFunLike.{u1, u3, u2} F G H (MulOneClass.toMul.{u3} G (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3)))) (MulOneClass.toMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4)))) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F G H (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4))) _inst_5)) f (HDiv.hDiv.{u3, u3, u3} G G G (instHDiv.{u3} G (DivInvMonoid.toDiv.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3))) a b)) (HDiv.hDiv.{u2, u2, u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : G) => H) a) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : G) => H) b) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : G) => H) a) (instHDiv.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : G) => H) a) (DivInvMonoid.toDiv.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : G) => H) a) (DivisionMonoid.toDivInvMonoid.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : G) => H) a) _inst_4))) (FunLike.coe.{succ u1, succ u3, succ u2} F G (fun (_x : G) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : G) => H) _x) (MulHomClass.toFunLike.{u1, u3, u2} F G H (MulOneClass.toMul.{u3} G (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3)))) (MulOneClass.toMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4)))) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F G H (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4))) _inst_5)) f a) (FunLike.coe.{succ u1, succ u3, succ u2} F G (fun (_x : G) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : G) => H) _x) (MulHomClass.toFunLike.{u1, u3, u2} F G H (MulOneClass.toMul.{u3} G (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3)))) (MulOneClass.toMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4)))) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F G H (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4))) _inst_5)) f b))
 Case conversion may be inaccurate. Consider using '#align map_div map_divₓ'. -/
 /-- Group homomorphisms preserve division. -/
 @[simp, to_additive "Additive group homomorphisms preserve subtraction."]
@@ -536,7 +536,7 @@ theorem map_div [Group G] [DivisionMonoid H] [MonoidHomClass F G H] (f : F) :
 lean 3 declaration is
   forall {G : Type.{u1}} {H : Type.{u2}} {F : Type.{u3}} [_inst_3 : Monoid.{u1} G] [_inst_4 : Monoid.{u2} H] [_inst_5 : MonoidHomClass.{u3, u1, u2} F G H (Monoid.toMulOneClass.{u1} G _inst_3) (Monoid.toMulOneClass.{u2} H _inst_4)] (f : F) (a : G) (n : Nat), Eq.{succ u2} H (coeFn.{succ u3, max (succ u1) (succ u2)} F (fun (_x : F) => G -> H) (FunLike.hasCoeToFun.{succ u3, succ u1, succ u2} F G (fun (_x : G) => H) (MulHomClass.toFunLike.{u3, u1, u2} F G H (MulOneClass.toHasMul.{u1} G (Monoid.toMulOneClass.{u1} G _inst_3)) (MulOneClass.toHasMul.{u2} H (Monoid.toMulOneClass.{u2} H _inst_4)) (MonoidHomClass.toMulHomClass.{u3, u1, u2} F G H (Monoid.toMulOneClass.{u1} G _inst_3) (Monoid.toMulOneClass.{u2} H _inst_4) _inst_5))) f (HPow.hPow.{u1, 0, u1} G Nat G (instHPow.{u1, 0} G Nat (Monoid.Pow.{u1} G _inst_3)) a n)) (HPow.hPow.{u2, 0, u2} H Nat H (instHPow.{u2, 0} H Nat (Monoid.Pow.{u2} H _inst_4)) (coeFn.{succ u3, max (succ u1) (succ u2)} F (fun (_x : F) => G -> H) (FunLike.hasCoeToFun.{succ u3, succ u1, succ u2} F G (fun (_x : G) => H) (MulHomClass.toFunLike.{u3, u1, u2} F G H (MulOneClass.toHasMul.{u1} G (Monoid.toMulOneClass.{u1} G _inst_3)) (MulOneClass.toHasMul.{u2} H (Monoid.toMulOneClass.{u2} H _inst_4)) (MonoidHomClass.toMulHomClass.{u3, u1, u2} F G H (Monoid.toMulOneClass.{u1} G _inst_3) (Monoid.toMulOneClass.{u2} H _inst_4) _inst_5))) f a) n)
 but is expected to have type
-  forall {G : Type.{u3}} {H : Type.{u2}} {F : Type.{u1}} [_inst_3 : Monoid.{u3} G] [_inst_4 : Monoid.{u2} H] [_inst_5 : MonoidHomClass.{u1, u3, u2} F G H (Monoid.toMulOneClass.{u3} G _inst_3) (Monoid.toMulOneClass.{u2} H _inst_4)] (f : F) (a : G) (n : Nat), Eq.{succ u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : G) => H) (HPow.hPow.{u3, 0, u3} G Nat G (instHPow.{u3, 0} G Nat (Monoid.Pow.{u3} G _inst_3)) a n)) (FunLike.coe.{succ u1, succ u3, succ u2} F G (fun (_x : G) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : G) => H) _x) (MulHomClass.toFunLike.{u1, u3, u2} F G H (MulOneClass.toMul.{u3} G (Monoid.toMulOneClass.{u3} G _inst_3)) (MulOneClass.toMul.{u2} H (Monoid.toMulOneClass.{u2} H _inst_4)) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F G H (Monoid.toMulOneClass.{u3} G _inst_3) (Monoid.toMulOneClass.{u2} H _inst_4) _inst_5)) f (HPow.hPow.{u3, 0, u3} G Nat G (instHPow.{u3, 0} G Nat (Monoid.Pow.{u3} G _inst_3)) a n)) (HPow.hPow.{u2, 0, u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : G) => H) a) Nat ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : G) => H) a) (instHPow.{u2, 0} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : G) => H) a) Nat (Monoid.Pow.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : G) => H) a) _inst_4)) (FunLike.coe.{succ u1, succ u3, succ u2} F G (fun (_x : G) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : G) => H) _x) (MulHomClass.toFunLike.{u1, u3, u2} F G H (MulOneClass.toMul.{u3} G (Monoid.toMulOneClass.{u3} G _inst_3)) (MulOneClass.toMul.{u2} H (Monoid.toMulOneClass.{u2} H _inst_4)) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F G H (Monoid.toMulOneClass.{u3} G _inst_3) (Monoid.toMulOneClass.{u2} H _inst_4) _inst_5)) f a) n)
+  forall {G : Type.{u3}} {H : Type.{u2}} {F : Type.{u1}} [_inst_3 : Monoid.{u3} G] [_inst_4 : Monoid.{u2} H] [_inst_5 : MonoidHomClass.{u1, u3, u2} F G H (Monoid.toMulOneClass.{u3} G _inst_3) (Monoid.toMulOneClass.{u2} H _inst_4)] (f : F) (a : G) (n : Nat), Eq.{succ u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : G) => H) (HPow.hPow.{u3, 0, u3} G Nat G (instHPow.{u3, 0} G Nat (Monoid.Pow.{u3} G _inst_3)) a n)) (FunLike.coe.{succ u1, succ u3, succ u2} F G (fun (_x : G) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : G) => H) _x) (MulHomClass.toFunLike.{u1, u3, u2} F G H (MulOneClass.toMul.{u3} G (Monoid.toMulOneClass.{u3} G _inst_3)) (MulOneClass.toMul.{u2} H (Monoid.toMulOneClass.{u2} H _inst_4)) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F G H (Monoid.toMulOneClass.{u3} G _inst_3) (Monoid.toMulOneClass.{u2} H _inst_4) _inst_5)) f (HPow.hPow.{u3, 0, u3} G Nat G (instHPow.{u3, 0} G Nat (Monoid.Pow.{u3} G _inst_3)) a n)) (HPow.hPow.{u2, 0, u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : G) => H) a) Nat ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : G) => H) a) (instHPow.{u2, 0} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : G) => H) a) Nat (Monoid.Pow.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : G) => H) a) _inst_4)) (FunLike.coe.{succ u1, succ u3, succ u2} F G (fun (_x : G) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : G) => H) _x) (MulHomClass.toFunLike.{u1, u3, u2} F G H (MulOneClass.toMul.{u3} G (Monoid.toMulOneClass.{u3} G _inst_3)) (MulOneClass.toMul.{u2} H (Monoid.toMulOneClass.{u2} H _inst_4)) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F G H (Monoid.toMulOneClass.{u3} G _inst_3) (Monoid.toMulOneClass.{u2} H _inst_4) _inst_5)) f a) n)
 Case conversion may be inaccurate. Consider using '#align map_pow map_powₓ'. -/
 -- to_additive puts the arguments in the wrong order, so generate an auxiliary lemma, then
 -- swap its arguments.
@@ -552,7 +552,7 @@ theorem map_pow [Monoid G] [Monoid H] [MonoidHomClass F G H] (f : F) (a : G) :
 lean 3 declaration is
   forall {G : Type.{u1}} {H : Type.{u2}} {F : Type.{u3}} [_inst_3 : AddMonoid.{u1} G] [_inst_4 : AddMonoid.{u2} H] [_inst_5 : AddMonoidHomClass.{u3, u1, u2} F G H (AddMonoid.toAddZeroClass.{u1} G _inst_3) (AddMonoid.toAddZeroClass.{u2} H _inst_4)] (f : F) (n : Nat) (a : G), Eq.{succ u2} H (coeFn.{succ u3, max (succ u1) (succ u2)} F (fun (_x : F) => G -> H) (FunLike.hasCoeToFun.{succ u3, succ u1, succ u2} F G (fun (_x : G) => H) (AddHomClass.toFunLike.{u3, u1, u2} F G H (AddZeroClass.toHasAdd.{u1} G (AddMonoid.toAddZeroClass.{u1} G _inst_3)) (AddZeroClass.toHasAdd.{u2} H (AddMonoid.toAddZeroClass.{u2} H _inst_4)) (AddMonoidHomClass.toAddHomClass.{u3, u1, u2} F G H (AddMonoid.toAddZeroClass.{u1} G _inst_3) (AddMonoid.toAddZeroClass.{u2} H _inst_4) _inst_5))) f (SMul.smul.{0, u1} Nat G (AddMonoid.SMul.{u1} G _inst_3) n a)) (SMul.smul.{0, u2} Nat H (AddMonoid.SMul.{u2} H _inst_4) n (coeFn.{succ u3, max (succ u1) (succ u2)} F (fun (_x : F) => G -> H) (FunLike.hasCoeToFun.{succ u3, succ u1, succ u2} F G (fun (_x : G) => H) (AddHomClass.toFunLike.{u3, u1, u2} F G H (AddZeroClass.toHasAdd.{u1} G (AddMonoid.toAddZeroClass.{u1} G _inst_3)) (AddZeroClass.toHasAdd.{u2} H (AddMonoid.toAddZeroClass.{u2} H _inst_4)) (AddMonoidHomClass.toAddHomClass.{u3, u1, u2} F G H (AddMonoid.toAddZeroClass.{u1} G _inst_3) (AddMonoid.toAddZeroClass.{u2} H _inst_4) _inst_5))) f a))
 but is expected to have type
-  forall {G : Type.{u3}} {H : Type.{u2}} {F : Type.{u1}} [_inst_3 : AddMonoid.{u3} G] [_inst_4 : AddMonoid.{u2} H] [_inst_5 : AddMonoidHomClass.{u1, u3, u2} F G H (AddMonoid.toAddZeroClass.{u3} G _inst_3) (AddMonoid.toAddZeroClass.{u2} H _inst_4)] (f : F) (n : Nat) (a : G), Eq.{succ u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : G) => H) (HSMul.hSMul.{0, u3, u3} Nat G G (instHSMul.{0, u3} Nat G (AddMonoid.SMul.{u3} G _inst_3)) n a)) (FunLike.coe.{succ u1, succ u3, succ u2} F G (fun (_x : G) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : G) => H) _x) (AddHomClass.toFunLike.{u1, u3, u2} F G H (AddZeroClass.toAdd.{u3} G (AddMonoid.toAddZeroClass.{u3} G _inst_3)) (AddZeroClass.toAdd.{u2} H (AddMonoid.toAddZeroClass.{u2} H _inst_4)) (AddMonoidHomClass.toAddHomClass.{u1, u3, u2} F G H (AddMonoid.toAddZeroClass.{u3} G _inst_3) (AddMonoid.toAddZeroClass.{u2} H _inst_4) _inst_5)) f (HSMul.hSMul.{0, u3, u3} Nat G G (instHSMul.{0, u3} Nat G (AddMonoid.SMul.{u3} G _inst_3)) n a)) (HSMul.hSMul.{0, u2, u2} Nat ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : G) => H) a) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : G) => H) a) (instHSMul.{0, u2} Nat ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : G) => H) a) (AddMonoid.SMul.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : G) => H) a) _inst_4)) n (FunLike.coe.{succ u1, succ u3, succ u2} F G (fun (_x : G) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : G) => H) _x) (AddHomClass.toFunLike.{u1, u3, u2} F G H (AddZeroClass.toAdd.{u3} G (AddMonoid.toAddZeroClass.{u3} G _inst_3)) (AddZeroClass.toAdd.{u2} H (AddMonoid.toAddZeroClass.{u2} H _inst_4)) (AddMonoidHomClass.toAddHomClass.{u1, u3, u2} F G H (AddMonoid.toAddZeroClass.{u3} G _inst_3) (AddMonoid.toAddZeroClass.{u2} H _inst_4) _inst_5)) f a))
+  forall {G : Type.{u3}} {H : Type.{u2}} {F : Type.{u1}} [_inst_3 : AddMonoid.{u3} G] [_inst_4 : AddMonoid.{u2} H] [_inst_5 : AddMonoidHomClass.{u1, u3, u2} F G H (AddMonoid.toAddZeroClass.{u3} G _inst_3) (AddMonoid.toAddZeroClass.{u2} H _inst_4)] (f : F) (n : Nat) (a : G), Eq.{succ u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : G) => H) (HSMul.hSMul.{0, u3, u3} Nat G G (instHSMul.{0, u3} Nat G (AddMonoid.SMul.{u3} G _inst_3)) n a)) (FunLike.coe.{succ u1, succ u3, succ u2} F G (fun (_x : G) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : G) => H) _x) (AddHomClass.toFunLike.{u1, u3, u2} F G H (AddZeroClass.toAdd.{u3} G (AddMonoid.toAddZeroClass.{u3} G _inst_3)) (AddZeroClass.toAdd.{u2} H (AddMonoid.toAddZeroClass.{u2} H _inst_4)) (AddMonoidHomClass.toAddHomClass.{u1, u3, u2} F G H (AddMonoid.toAddZeroClass.{u3} G _inst_3) (AddMonoid.toAddZeroClass.{u2} H _inst_4) _inst_5)) f (HSMul.hSMul.{0, u3, u3} Nat G G (instHSMul.{0, u3} Nat G (AddMonoid.SMul.{u3} G _inst_3)) n a)) (HSMul.hSMul.{0, u2, u2} Nat ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : G) => H) a) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : G) => H) a) (instHSMul.{0, u2} Nat ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : G) => H) a) (AddMonoid.SMul.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : G) => H) a) _inst_4)) n (FunLike.coe.{succ u1, succ u3, succ u2} F G (fun (_x : G) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : G) => H) _x) (AddHomClass.toFunLike.{u1, u3, u2} F G H (AddZeroClass.toAdd.{u3} G (AddMonoid.toAddZeroClass.{u3} G _inst_3)) (AddZeroClass.toAdd.{u2} H (AddMonoid.toAddZeroClass.{u2} H _inst_4)) (AddMonoidHomClass.toAddHomClass.{u1, u3, u2} F G H (AddMonoid.toAddZeroClass.{u3} G _inst_3) (AddMonoid.toAddZeroClass.{u2} H _inst_4) _inst_5)) f a))
 Case conversion may be inaccurate. Consider using '#align map_nsmul map_nsmulₓ'. -/
 @[simp]
 theorem map_nsmul [AddMonoid G] [AddMonoid H] [AddMonoidHomClass F G H] (f : F) (n : ℕ) (a : G) :
@@ -566,7 +566,7 @@ attribute [to_additive_reorder 8, to_additive] map_pow
 lean 3 declaration is
   forall {G : Type.{u1}} {H : Type.{u2}} {F : Type.{u3}} [_inst_3 : DivInvMonoid.{u1} G] [_inst_4 : DivInvMonoid.{u2} H] [_inst_5 : MonoidHomClass.{u3, u1, u2} F G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G _inst_3)) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H _inst_4))] (f : F), (forall (x : G), Eq.{succ u2} H (coeFn.{succ u3, max (succ u1) (succ u2)} F (fun (_x : F) => G -> H) (FunLike.hasCoeToFun.{succ u3, succ u1, succ u2} F G (fun (_x : G) => H) (MulHomClass.toFunLike.{u3, u1, u2} F G H (MulOneClass.toHasMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G _inst_3))) (MulOneClass.toHasMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H _inst_4))) (MonoidHomClass.toMulHomClass.{u3, u1, u2} F G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G _inst_3)) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H _inst_4)) _inst_5))) f (Inv.inv.{u1} G (DivInvMonoid.toHasInv.{u1} G _inst_3) x)) (Inv.inv.{u2} H (DivInvMonoid.toHasInv.{u2} H _inst_4) (coeFn.{succ u3, max (succ u1) (succ u2)} F (fun (_x : F) => G -> H) (FunLike.hasCoeToFun.{succ u3, succ u1, succ u2} F G (fun (_x : G) => H) (MulHomClass.toFunLike.{u3, u1, u2} F G H (MulOneClass.toHasMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G _inst_3))) (MulOneClass.toHasMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H _inst_4))) (MonoidHomClass.toMulHomClass.{u3, u1, u2} F G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G _inst_3)) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H _inst_4)) _inst_5))) f x))) -> (forall (a : G) (n : Int), Eq.{succ u2} H (coeFn.{succ u3, max (succ u1) (succ u2)} F (fun (_x : F) => G -> H) (FunLike.hasCoeToFun.{succ u3, succ u1, succ u2} F G (fun (_x : G) => H) (MulHomClass.toFunLike.{u3, u1, u2} F G H (MulOneClass.toHasMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G _inst_3))) (MulOneClass.toHasMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H _inst_4))) (MonoidHomClass.toMulHomClass.{u3, u1, u2} F G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G _inst_3)) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H _inst_4)) _inst_5))) f (HPow.hPow.{u1, 0, u1} G Int G (instHPow.{u1, 0} G Int (DivInvMonoid.Pow.{u1} G _inst_3)) a n)) (HPow.hPow.{u2, 0, u2} H Int H (instHPow.{u2, 0} H Int (DivInvMonoid.Pow.{u2} H _inst_4)) (coeFn.{succ u3, max (succ u1) (succ u2)} F (fun (_x : F) => G -> H) (FunLike.hasCoeToFun.{succ u3, succ u1, succ u2} F G (fun (_x : G) => H) (MulHomClass.toFunLike.{u3, u1, u2} F G H (MulOneClass.toHasMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G _inst_3))) (MulOneClass.toHasMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H _inst_4))) (MonoidHomClass.toMulHomClass.{u3, u1, u2} F G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G _inst_3)) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H _inst_4)) _inst_5))) f a) n))
 but is expected to have type
-  forall {G : Type.{u3}} {H : Type.{u2}} {F : Type.{u1}} [_inst_3 : DivInvMonoid.{u3} G] [_inst_4 : DivInvMonoid.{u2} H] [_inst_5 : MonoidHomClass.{u1, u3, u2} F G H (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G _inst_3)) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H _inst_4))] (f : F), (forall (x : G), Eq.{succ u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : G) => H) (Inv.inv.{u3} G (DivInvMonoid.toInv.{u3} G _inst_3) x)) (FunLike.coe.{succ u1, succ u3, succ u2} F G (fun (_x : G) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : G) => H) _x) (MulHomClass.toFunLike.{u1, u3, u2} F G H (MulOneClass.toMul.{u3} G (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G _inst_3))) (MulOneClass.toMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H _inst_4))) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F G H (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G _inst_3)) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H _inst_4)) _inst_5)) f (Inv.inv.{u3} G (DivInvMonoid.toInv.{u3} G _inst_3) x)) (Inv.inv.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : G) => H) x) (DivInvMonoid.toInv.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : G) => H) x) _inst_4) (FunLike.coe.{succ u1, succ u3, succ u2} F G (fun (_x : G) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : G) => H) _x) (MulHomClass.toFunLike.{u1, u3, u2} F G H (MulOneClass.toMul.{u3} G (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G _inst_3))) (MulOneClass.toMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H _inst_4))) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F G H (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G _inst_3)) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H _inst_4)) _inst_5)) f x))) -> (forall (a : G) (n : Int), Eq.{succ u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : G) => H) (HPow.hPow.{u3, 0, u3} G Int G (instHPow.{u3, 0} G Int (DivInvMonoid.Pow.{u3} G _inst_3)) a n)) (FunLike.coe.{succ u1, succ u3, succ u2} F G (fun (_x : G) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : G) => H) _x) (MulHomClass.toFunLike.{u1, u3, u2} F G H (MulOneClass.toMul.{u3} G (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G _inst_3))) (MulOneClass.toMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H _inst_4))) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F G H (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G _inst_3)) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H _inst_4)) _inst_5)) f (HPow.hPow.{u3, 0, u3} G Int G (instHPow.{u3, 0} G Int (DivInvMonoid.Pow.{u3} G _inst_3)) a n)) (HPow.hPow.{u2, 0, u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : G) => H) a) Int ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : G) => H) a) (instHPow.{u2, 0} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : G) => H) a) Int (DivInvMonoid.Pow.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : G) => H) a) _inst_4)) (FunLike.coe.{succ u1, succ u3, succ u2} F G (fun (_x : G) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : G) => H) _x) (MulHomClass.toFunLike.{u1, u3, u2} F G H (MulOneClass.toMul.{u3} G (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G _inst_3))) (MulOneClass.toMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H _inst_4))) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F G H (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G _inst_3)) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H _inst_4)) _inst_5)) f a) n))
+  forall {G : Type.{u3}} {H : Type.{u2}} {F : Type.{u1}} [_inst_3 : DivInvMonoid.{u3} G] [_inst_4 : DivInvMonoid.{u2} H] [_inst_5 : MonoidHomClass.{u1, u3, u2} F G H (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G _inst_3)) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H _inst_4))] (f : F), (forall (x : G), Eq.{succ u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : G) => H) (Inv.inv.{u3} G (DivInvMonoid.toInv.{u3} G _inst_3) x)) (FunLike.coe.{succ u1, succ u3, succ u2} F G (fun (_x : G) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : G) => H) _x) (MulHomClass.toFunLike.{u1, u3, u2} F G H (MulOneClass.toMul.{u3} G (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G _inst_3))) (MulOneClass.toMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H _inst_4))) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F G H (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G _inst_3)) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H _inst_4)) _inst_5)) f (Inv.inv.{u3} G (DivInvMonoid.toInv.{u3} G _inst_3) x)) (Inv.inv.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : G) => H) x) (DivInvMonoid.toInv.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : G) => H) x) _inst_4) (FunLike.coe.{succ u1, succ u3, succ u2} F G (fun (_x : G) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : G) => H) _x) (MulHomClass.toFunLike.{u1, u3, u2} F G H (MulOneClass.toMul.{u3} G (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G _inst_3))) (MulOneClass.toMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H _inst_4))) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F G H (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G _inst_3)) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H _inst_4)) _inst_5)) f x))) -> (forall (a : G) (n : Int), Eq.{succ u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : G) => H) (HPow.hPow.{u3, 0, u3} G Int G (instHPow.{u3, 0} G Int (DivInvMonoid.Pow.{u3} G _inst_3)) a n)) (FunLike.coe.{succ u1, succ u3, succ u2} F G (fun (_x : G) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : G) => H) _x) (MulHomClass.toFunLike.{u1, u3, u2} F G H (MulOneClass.toMul.{u3} G (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G _inst_3))) (MulOneClass.toMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H _inst_4))) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F G H (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G _inst_3)) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H _inst_4)) _inst_5)) f (HPow.hPow.{u3, 0, u3} G Int G (instHPow.{u3, 0} G Int (DivInvMonoid.Pow.{u3} G _inst_3)) a n)) (HPow.hPow.{u2, 0, u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : G) => H) a) Int ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : G) => H) a) (instHPow.{u2, 0} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : G) => H) a) Int (DivInvMonoid.Pow.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : G) => H) a) _inst_4)) (FunLike.coe.{succ u1, succ u3, succ u2} F G (fun (_x : G) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : G) => H) _x) (MulHomClass.toFunLike.{u1, u3, u2} F G H (MulOneClass.toMul.{u3} G (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G _inst_3))) (MulOneClass.toMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H _inst_4))) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F G H (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G _inst_3)) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H _inst_4)) _inst_5)) f a) n))
 Case conversion may be inaccurate. Consider using '#align map_zpow' map_zpow'ₓ'. -/
 @[to_additive]
 theorem map_zpow' [DivInvMonoid G] [DivInvMonoid H] [MonoidHomClass F G H] (f : F)
@@ -580,7 +580,7 @@ theorem map_zpow' [DivInvMonoid G] [DivInvMonoid H] [MonoidHomClass F G H] (f :
 lean 3 declaration is
   forall {G : Type.{u1}} {H : Type.{u2}} {F : Type.{u3}} [_inst_3 : Group.{u1} G] [_inst_4 : DivisionMonoid.{u2} H] [_inst_5 : MonoidHomClass.{u3, u1, u2} F G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4)))] (f : F) (g : G) (n : Int), Eq.{succ u2} H (coeFn.{succ u3, max (succ u1) (succ u2)} F (fun (_x : F) => G -> H) (FunLike.hasCoeToFun.{succ u3, succ u1, succ u2} F G (fun (_x : G) => H) (MulHomClass.toFunLike.{u3, u1, u2} F G H (MulOneClass.toHasMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (MulOneClass.toHasMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4)))) (MonoidHomClass.toMulHomClass.{u3, u1, u2} F G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4))) _inst_5))) f (HPow.hPow.{u1, 0, u1} G Int G (instHPow.{u1, 0} G Int (DivInvMonoid.Pow.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3))) g n)) (HPow.hPow.{u2, 0, u2} H Int H (instHPow.{u2, 0} H Int (DivInvMonoid.Pow.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4))) (coeFn.{succ u3, max (succ u1) (succ u2)} F (fun (_x : F) => G -> H) (FunLike.hasCoeToFun.{succ u3, succ u1, succ u2} F G (fun (_x : G) => H) (MulHomClass.toFunLike.{u3, u1, u2} F G H (MulOneClass.toHasMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3)))) (MulOneClass.toHasMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4)))) (MonoidHomClass.toMulHomClass.{u3, u1, u2} F G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_3))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4))) _inst_5))) f g) n)
 but is expected to have type
-  forall {G : Type.{u3}} {H : Type.{u2}} {F : Type.{u1}} [_inst_3 : Group.{u3} G] [_inst_4 : DivisionMonoid.{u2} H] [_inst_5 : MonoidHomClass.{u1, u3, u2} F G H (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4)))] (f : F) (g : G) (n : Int), Eq.{succ u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : G) => H) (HPow.hPow.{u3, 0, u3} G Int G (instHPow.{u3, 0} G Int (DivInvMonoid.Pow.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3))) g n)) (FunLike.coe.{succ u1, succ u3, succ u2} F G (fun (_x : G) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : G) => H) _x) (MulHomClass.toFunLike.{u1, u3, u2} F G H (MulOneClass.toMul.{u3} G (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3)))) (MulOneClass.toMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4)))) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F G H (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4))) _inst_5)) f (HPow.hPow.{u3, 0, u3} G Int G (instHPow.{u3, 0} G Int (DivInvMonoid.Pow.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3))) g n)) (HPow.hPow.{u2, 0, u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : G) => H) g) Int ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : G) => H) g) (instHPow.{u2, 0} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : G) => H) g) Int (DivInvMonoid.Pow.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : G) => H) g) (DivisionMonoid.toDivInvMonoid.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : G) => H) g) _inst_4))) (FunLike.coe.{succ u1, succ u3, succ u2} F G (fun (_x : G) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : G) => H) _x) (MulHomClass.toFunLike.{u1, u3, u2} F G H (MulOneClass.toMul.{u3} G (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3)))) (MulOneClass.toMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4)))) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F G H (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4))) _inst_5)) f g) n)
+  forall {G : Type.{u3}} {H : Type.{u2}} {F : Type.{u1}} [_inst_3 : Group.{u3} G] [_inst_4 : DivisionMonoid.{u2} H] [_inst_5 : MonoidHomClass.{u1, u3, u2} F G H (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4)))] (f : F) (g : G) (n : Int), Eq.{succ u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : G) => H) (HPow.hPow.{u3, 0, u3} G Int G (instHPow.{u3, 0} G Int (DivInvMonoid.Pow.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3))) g n)) (FunLike.coe.{succ u1, succ u3, succ u2} F G (fun (_x : G) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : G) => H) _x) (MulHomClass.toFunLike.{u1, u3, u2} F G H (MulOneClass.toMul.{u3} G (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3)))) (MulOneClass.toMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4)))) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F G H (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4))) _inst_5)) f (HPow.hPow.{u3, 0, u3} G Int G (instHPow.{u3, 0} G Int (DivInvMonoid.Pow.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3))) g n)) (HPow.hPow.{u2, 0, u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : G) => H) g) Int ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : G) => H) g) (instHPow.{u2, 0} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : G) => H) g) Int (DivInvMonoid.Pow.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : G) => H) g) (DivisionMonoid.toDivInvMonoid.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : G) => H) g) _inst_4))) (FunLike.coe.{succ u1, succ u3, succ u2} F G (fun (_x : G) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : G) => H) _x) (MulHomClass.toFunLike.{u1, u3, u2} F G H (MulOneClass.toMul.{u3} G (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3)))) (MulOneClass.toMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4)))) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F G H (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (DivisionMonoid.toDivInvMonoid.{u2} H _inst_4))) _inst_5)) f g) n)
 Case conversion may be inaccurate. Consider using '#align map_zpow map_zpowₓ'. -/
 -- to_additive puts the arguments in the wrong order, so generate an auxiliary lemma, then
 -- swap its arguments.
@@ -596,7 +596,7 @@ theorem map_zpow [Group G] [DivisionMonoid H] [MonoidHomClass F G H] (f : F) (g
 lean 3 declaration is
   forall {G : Type.{u1}} {H : Type.{u2}} {F : Type.{u3}} [_inst_3 : AddGroup.{u1} G] [_inst_4 : SubtractionMonoid.{u2} H] [_inst_5 : AddMonoidHomClass.{u3, u1, u2} F G H (AddMonoid.toAddZeroClass.{u1} G (SubNegMonoid.toAddMonoid.{u1} G (AddGroup.toSubNegMonoid.{u1} G _inst_3))) (AddMonoid.toAddZeroClass.{u2} H (SubNegMonoid.toAddMonoid.{u2} H (SubtractionMonoid.toSubNegMonoid.{u2} H _inst_4)))] (f : F) (n : Int) (g : G), Eq.{succ u2} H (coeFn.{succ u3, max (succ u1) (succ u2)} F (fun (_x : F) => G -> H) (FunLike.hasCoeToFun.{succ u3, succ u1, succ u2} F G (fun (_x : G) => H) (AddHomClass.toFunLike.{u3, u1, u2} F G H (AddZeroClass.toHasAdd.{u1} G (AddMonoid.toAddZeroClass.{u1} G (SubNegMonoid.toAddMonoid.{u1} G (AddGroup.toSubNegMonoid.{u1} G _inst_3)))) (AddZeroClass.toHasAdd.{u2} H (AddMonoid.toAddZeroClass.{u2} H (SubNegMonoid.toAddMonoid.{u2} H (SubtractionMonoid.toSubNegMonoid.{u2} H _inst_4)))) (AddMonoidHomClass.toAddHomClass.{u3, u1, u2} F G H (AddMonoid.toAddZeroClass.{u1} G (SubNegMonoid.toAddMonoid.{u1} G (AddGroup.toSubNegMonoid.{u1} G _inst_3))) (AddMonoid.toAddZeroClass.{u2} H (SubNegMonoid.toAddMonoid.{u2} H (SubtractionMonoid.toSubNegMonoid.{u2} H _inst_4))) _inst_5))) f (SMul.smul.{0, u1} Int G (SubNegMonoid.SMulInt.{u1} G (AddGroup.toSubNegMonoid.{u1} G _inst_3)) n g)) (SMul.smul.{0, u2} Int H (SubNegMonoid.SMulInt.{u2} H (SubtractionMonoid.toSubNegMonoid.{u2} H _inst_4)) n (coeFn.{succ u3, max (succ u1) (succ u2)} F (fun (_x : F) => G -> H) (FunLike.hasCoeToFun.{succ u3, succ u1, succ u2} F G (fun (_x : G) => H) (AddHomClass.toFunLike.{u3, u1, u2} F G H (AddZeroClass.toHasAdd.{u1} G (AddMonoid.toAddZeroClass.{u1} G (SubNegMonoid.toAddMonoid.{u1} G (AddGroup.toSubNegMonoid.{u1} G _inst_3)))) (AddZeroClass.toHasAdd.{u2} H (AddMonoid.toAddZeroClass.{u2} H (SubNegMonoid.toAddMonoid.{u2} H (SubtractionMonoid.toSubNegMonoid.{u2} H _inst_4)))) (AddMonoidHomClass.toAddHomClass.{u3, u1, u2} F G H (AddMonoid.toAddZeroClass.{u1} G (SubNegMonoid.toAddMonoid.{u1} G (AddGroup.toSubNegMonoid.{u1} G _inst_3))) (AddMonoid.toAddZeroClass.{u2} H (SubNegMonoid.toAddMonoid.{u2} H (SubtractionMonoid.toSubNegMonoid.{u2} H _inst_4))) _inst_5))) f g))
 but is expected to have type
-  forall {G : Type.{u3}} {H : Type.{u2}} {F : Type.{u1}} [_inst_3 : AddGroup.{u3} G] [_inst_4 : SubtractionMonoid.{u2} H] [_inst_5 : AddMonoidHomClass.{u1, u3, u2} F G H (AddMonoid.toAddZeroClass.{u3} G (SubNegMonoid.toAddMonoid.{u3} G (AddGroup.toSubNegMonoid.{u3} G _inst_3))) (AddMonoid.toAddZeroClass.{u2} H (SubNegMonoid.toAddMonoid.{u2} H (SubtractionMonoid.toSubNegMonoid.{u2} H _inst_4)))] (f : F) (n : Int) (g : G), Eq.{succ u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : G) => H) (HSMul.hSMul.{0, u3, u3} Int G G (instHSMul.{0, u3} Int G (SubNegMonoid.SMulInt.{u3} G (AddGroup.toSubNegMonoid.{u3} G _inst_3))) n g)) (FunLike.coe.{succ u1, succ u3, succ u2} F G (fun (_x : G) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : G) => H) _x) (AddHomClass.toFunLike.{u1, u3, u2} F G H (AddZeroClass.toAdd.{u3} G (AddMonoid.toAddZeroClass.{u3} G (SubNegMonoid.toAddMonoid.{u3} G (AddGroup.toSubNegMonoid.{u3} G _inst_3)))) (AddZeroClass.toAdd.{u2} H (AddMonoid.toAddZeroClass.{u2} H (SubNegMonoid.toAddMonoid.{u2} H (SubtractionMonoid.toSubNegMonoid.{u2} H _inst_4)))) (AddMonoidHomClass.toAddHomClass.{u1, u3, u2} F G H (AddMonoid.toAddZeroClass.{u3} G (SubNegMonoid.toAddMonoid.{u3} G (AddGroup.toSubNegMonoid.{u3} G _inst_3))) (AddMonoid.toAddZeroClass.{u2} H (SubNegMonoid.toAddMonoid.{u2} H (SubtractionMonoid.toSubNegMonoid.{u2} H _inst_4))) _inst_5)) f (HSMul.hSMul.{0, u3, u3} Int G G (instHSMul.{0, u3} Int G (SubNegMonoid.SMulInt.{u3} G (AddGroup.toSubNegMonoid.{u3} G _inst_3))) n g)) (HSMul.hSMul.{0, u2, u2} Int ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : G) => H) g) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : G) => H) g) (instHSMul.{0, u2} Int ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : G) => H) g) (SubNegMonoid.SMulInt.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : G) => H) g) (SubtractionMonoid.toSubNegMonoid.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : G) => H) g) _inst_4))) n (FunLike.coe.{succ u1, succ u3, succ u2} F G (fun (_x : G) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : G) => H) _x) (AddHomClass.toFunLike.{u1, u3, u2} F G H (AddZeroClass.toAdd.{u3} G (AddMonoid.toAddZeroClass.{u3} G (SubNegMonoid.toAddMonoid.{u3} G (AddGroup.toSubNegMonoid.{u3} G _inst_3)))) (AddZeroClass.toAdd.{u2} H (AddMonoid.toAddZeroClass.{u2} H (SubNegMonoid.toAddMonoid.{u2} H (SubtractionMonoid.toSubNegMonoid.{u2} H _inst_4)))) (AddMonoidHomClass.toAddHomClass.{u1, u3, u2} F G H (AddMonoid.toAddZeroClass.{u3} G (SubNegMonoid.toAddMonoid.{u3} G (AddGroup.toSubNegMonoid.{u3} G _inst_3))) (AddMonoid.toAddZeroClass.{u2} H (SubNegMonoid.toAddMonoid.{u2} H (SubtractionMonoid.toSubNegMonoid.{u2} H _inst_4))) _inst_5)) f g))
+  forall {G : Type.{u3}} {H : Type.{u2}} {F : Type.{u1}} [_inst_3 : AddGroup.{u3} G] [_inst_4 : SubtractionMonoid.{u2} H] [_inst_5 : AddMonoidHomClass.{u1, u3, u2} F G H (AddMonoid.toAddZeroClass.{u3} G (SubNegMonoid.toAddMonoid.{u3} G (AddGroup.toSubNegMonoid.{u3} G _inst_3))) (AddMonoid.toAddZeroClass.{u2} H (SubNegMonoid.toAddMonoid.{u2} H (SubtractionMonoid.toSubNegMonoid.{u2} H _inst_4)))] (f : F) (n : Int) (g : G), Eq.{succ u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : G) => H) (HSMul.hSMul.{0, u3, u3} Int G G (instHSMul.{0, u3} Int G (SubNegMonoid.SMulInt.{u3} G (AddGroup.toSubNegMonoid.{u3} G _inst_3))) n g)) (FunLike.coe.{succ u1, succ u3, succ u2} F G (fun (_x : G) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : G) => H) _x) (AddHomClass.toFunLike.{u1, u3, u2} F G H (AddZeroClass.toAdd.{u3} G (AddMonoid.toAddZeroClass.{u3} G (SubNegMonoid.toAddMonoid.{u3} G (AddGroup.toSubNegMonoid.{u3} G _inst_3)))) (AddZeroClass.toAdd.{u2} H (AddMonoid.toAddZeroClass.{u2} H (SubNegMonoid.toAddMonoid.{u2} H (SubtractionMonoid.toSubNegMonoid.{u2} H _inst_4)))) (AddMonoidHomClass.toAddHomClass.{u1, u3, u2} F G H (AddMonoid.toAddZeroClass.{u3} G (SubNegMonoid.toAddMonoid.{u3} G (AddGroup.toSubNegMonoid.{u3} G _inst_3))) (AddMonoid.toAddZeroClass.{u2} H (SubNegMonoid.toAddMonoid.{u2} H (SubtractionMonoid.toSubNegMonoid.{u2} H _inst_4))) _inst_5)) f (HSMul.hSMul.{0, u3, u3} Int G G (instHSMul.{0, u3} Int G (SubNegMonoid.SMulInt.{u3} G (AddGroup.toSubNegMonoid.{u3} G _inst_3))) n g)) (HSMul.hSMul.{0, u2, u2} Int ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : G) => H) g) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : G) => H) g) (instHSMul.{0, u2} Int ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : G) => H) g) (SubNegMonoid.SMulInt.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : G) => H) g) (SubtractionMonoid.toSubNegMonoid.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : G) => H) g) _inst_4))) n (FunLike.coe.{succ u1, succ u3, succ u2} F G (fun (_x : G) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : G) => H) _x) (AddHomClass.toFunLike.{u1, u3, u2} F G H (AddZeroClass.toAdd.{u3} G (AddMonoid.toAddZeroClass.{u3} G (SubNegMonoid.toAddMonoid.{u3} G (AddGroup.toSubNegMonoid.{u3} G _inst_3)))) (AddZeroClass.toAdd.{u2} H (AddMonoid.toAddZeroClass.{u2} H (SubNegMonoid.toAddMonoid.{u2} H (SubtractionMonoid.toSubNegMonoid.{u2} H _inst_4)))) (AddMonoidHomClass.toAddHomClass.{u1, u3, u2} F G H (AddMonoid.toAddZeroClass.{u3} G (SubNegMonoid.toAddMonoid.{u3} G (AddGroup.toSubNegMonoid.{u3} G _inst_3))) (AddMonoid.toAddZeroClass.{u2} H (SubNegMonoid.toAddMonoid.{u2} H (SubtractionMonoid.toSubNegMonoid.{u2} H _inst_4))) _inst_5)) f g))
 Case conversion may be inaccurate. Consider using '#align map_zsmul map_zsmulₓ'. -/
 /-- Additive group homomorphisms preserve integer scaling. -/
 theorem map_zsmul [AddGroup G] [SubtractionMonoid H] [AddMonoidHomClass F G H] (f : F) (n : ℤ)
@@ -668,7 +668,7 @@ instance [MonoidWithZeroHomClass F M N] : CoeTC F (M →*₀ N) :=
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} {F : Type.{u3}} [_inst_1 : MulZeroOneClass.{u1} M] [_inst_2 : MulZeroOneClass.{u2} N] [_inst_3 : MonoidWithZeroHomClass.{u3, u1, u2} F M N _inst_1 _inst_2] (f : F), Eq.{max (succ u1) (succ u2)} ((fun (_x : MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) ((fun (a : Type.{u3}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{succ u3, max (succ u2) (succ u1)} a b] => self.0) F (MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) (HasLiftT.mk.{succ u3, max (succ u2) (succ u1)} F (MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) (CoeTCₓ.coe.{succ u3, max (succ u2) (succ u1)} F (MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) (MonoidWithZeroHom.hasCoeT.{u1, u2, u3} M N F _inst_1 _inst_2 _inst_3))) f)) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (FunLike.hasCoeToFun.{max (succ u2) (succ u1), succ u1, succ u2} (MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) M (fun (_x : M) => N) (MulHomClass.toFunLike.{max u2 u1, u1, u2} (MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) M N (MulOneClass.toHasMul.{u1} M (MulZeroOneClass.toMulOneClass.{u1} M _inst_1)) (MulOneClass.toHasMul.{u2} N (MulZeroOneClass.toMulOneClass.{u2} N _inst_2)) (MonoidHomClass.toMulHomClass.{max u2 u1, u1, u2} (MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) M N (MulZeroOneClass.toMulOneClass.{u1} M _inst_1) (MulZeroOneClass.toMulOneClass.{u2} N _inst_2) (MonoidWithZeroHomClass.toMonoidHomClass.{max u2 u1, u1, u2} (MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidWithZeroHom.monoidWithZeroHomClass.{u1, u2} M N _inst_1 _inst_2))))) ((fun (a : Type.{u3}) (b : Sort.{max (succ u2) (succ u1)}) [self : HasLiftT.{succ u3, max (succ u2) (succ u1)} a b] => self.0) F (MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) (HasLiftT.mk.{succ u3, max (succ u2) (succ u1)} F (MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) (CoeTCₓ.coe.{succ u3, max (succ u2) (succ u1)} F (MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) (MonoidWithZeroHom.hasCoeT.{u1, u2, u3} M N F _inst_1 _inst_2 _inst_3))) f)) (coeFn.{succ u3, max (succ u1) (succ u2)} F (fun (_x : F) => M -> N) (FunLike.hasCoeToFun.{succ u3, succ u1, succ u2} F M (fun (_x : M) => N) (MulHomClass.toFunLike.{u3, u1, u2} F M N (MulOneClass.toHasMul.{u1} M (MulZeroOneClass.toMulOneClass.{u1} M _inst_1)) (MulOneClass.toHasMul.{u2} N (MulZeroOneClass.toMulOneClass.{u2} N _inst_2)) (MonoidHomClass.toMulHomClass.{u3, u1, u2} F M N (MulZeroOneClass.toMulOneClass.{u1} M _inst_1) (MulZeroOneClass.toMulOneClass.{u2} N _inst_2) (MonoidWithZeroHomClass.toMonoidHomClass.{u3, u1, u2} F M N _inst_1 _inst_2 _inst_3)))) f)
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} {F : Type.{u3}} [_inst_1 : MulZeroOneClass.{u2} M] [_inst_2 : MulZeroOneClass.{u1} N] [_inst_3 : MonoidWithZeroHomClass.{u3, u2, u1} F M N _inst_1 _inst_2] (f : F), Eq.{max (succ u2) (succ u1)} (forall (a : M), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) a) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M (MulZeroOneClass.toMulOneClass.{u2} M _inst_1)) (MulOneClass.toMul.{u1} N (MulZeroOneClass.toMulOneClass.{u1} N _inst_2)) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulZeroOneClass.toMulOneClass.{u2} M _inst_1) (MulZeroOneClass.toMulOneClass.{u1} N _inst_2) (MonoidWithZeroHomClass.toMonoidHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidWithZeroHom.monoidWithZeroHomClass.{u2, u1} M N _inst_1 _inst_2)))) (MonoidWithZeroHomClass.toMonoidWithZeroHom.{u2, u1, u3} M N F _inst_1 _inst_2 _inst_3 f)) (FunLike.coe.{succ u3, succ u2, succ u1} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) _x) (MulHomClass.toFunLike.{u3, u2, u1} F M N (MulOneClass.toMul.{u2} M (MulZeroOneClass.toMulOneClass.{u2} M _inst_1)) (MulOneClass.toMul.{u1} N (MulZeroOneClass.toMulOneClass.{u1} N _inst_2)) (MonoidHomClass.toMulHomClass.{u3, u2, u1} F M N (MulZeroOneClass.toMulOneClass.{u2} M _inst_1) (MulZeroOneClass.toMulOneClass.{u1} N _inst_2) (MonoidWithZeroHomClass.toMonoidHomClass.{u3, u2, u1} F M N _inst_1 _inst_2 _inst_3))) f)
+  forall {M : Type.{u2}} {N : Type.{u1}} {F : Type.{u3}} [_inst_1 : MulZeroOneClass.{u2} M] [_inst_2 : MulZeroOneClass.{u1} N] [_inst_3 : MonoidWithZeroHomClass.{u3, u2, u1} F M N _inst_1 _inst_2] (f : F), Eq.{max (succ u2) (succ u1)} (forall (a : M), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) a) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M (MulZeroOneClass.toMulOneClass.{u2} M _inst_1)) (MulOneClass.toMul.{u1} N (MulZeroOneClass.toMulOneClass.{u1} N _inst_2)) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulZeroOneClass.toMulOneClass.{u2} M _inst_1) (MulZeroOneClass.toMulOneClass.{u1} N _inst_2) (MonoidWithZeroHomClass.toMonoidHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidWithZeroHom.monoidWithZeroHomClass.{u2, u1} M N _inst_1 _inst_2)))) (MonoidWithZeroHomClass.toMonoidWithZeroHom.{u2, u1, u3} M N F _inst_1 _inst_2 _inst_3 f)) (FunLike.coe.{succ u3, succ u2, succ u1} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{u3, u2, u1} F M N (MulOneClass.toMul.{u2} M (MulZeroOneClass.toMulOneClass.{u2} M _inst_1)) (MulOneClass.toMul.{u1} N (MulZeroOneClass.toMulOneClass.{u1} N _inst_2)) (MonoidHomClass.toMulHomClass.{u3, u2, u1} F M N (MulZeroOneClass.toMulOneClass.{u2} M _inst_1) (MulZeroOneClass.toMulOneClass.{u1} N _inst_2) (MonoidWithZeroHomClass.toMonoidHomClass.{u3, u2, u1} F M N _inst_1 _inst_2 _inst_3))) f)
 Case conversion may be inaccurate. Consider using '#align monoid_with_zero_hom.coe_coe MonoidWithZeroHom.coe_coeₓ'. -/
 @[simp]
 theorem MonoidWithZeroHom.coe_coe [MonoidWithZeroHomClass F M N] (f : F) :
@@ -805,7 +805,7 @@ theorem OneHom.toFun_eq_coe [One M] [One N] (f : OneHom M N) : f.toFun = f :=
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] (f : MulHom.{u1, u2} M N _inst_1 _inst_2), Eq.{max (succ u1) (succ u2)} (M -> N) (MulHom.toFun.{u1, u2} M N _inst_1 _inst_2 f) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MulHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MulHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MulHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f)
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : Mul.{u2} M] [_inst_2 : Mul.{u1} N] (f : MulHom.{u2, u1} M N _inst_1 _inst_2), Eq.{max (succ u2) (succ u1)} (M -> N) (MulHom.toFun.{u2, u1} M N _inst_1 _inst_2 f) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) f)
+  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : Mul.{u2} M] [_inst_2 : Mul.{u1} N] (f : MulHom.{u2, u1} M N _inst_1 _inst_2), Eq.{max (succ u2) (succ u1)} (M -> N) (MulHom.toFun.{u2, u1} M N _inst_1 _inst_2 f) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) f)
 Case conversion may be inaccurate. Consider using '#align mul_hom.to_fun_eq_coe MulHom.toFun_eq_coeₓ'. -/
 @[simp, to_additive]
 theorem MulHom.toFun_eq_coe [Mul M] [Mul N] (f : M →ₙ* N) : f.toFun = f :=
@@ -817,7 +817,7 @@ theorem MulHom.toFun_eq_coe [Mul M] [Mul N] (f : M →ₙ* N) : f.toFun = f :=
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N] (f : MonoidHom.{u1, u2} M N _inst_1 _inst_2), Eq.{max (succ u1) (succ u2)} (M -> N) (MonoidHom.toFun.{u1, u2} M N _inst_1 _inst_2 f) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MonoidHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MonoidHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f)
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u1} N] (f : MonoidHom.{u2, u1} M N _inst_1 _inst_2), Eq.{max (succ u2) (succ u1)} (M -> N) (OneHom.toFun.{u2, u1} M N (MulOneClass.toOne.{u2} M _inst_1) (MulOneClass.toOne.{u1} N _inst_2) (MonoidHom.toOneHom.{u2, u1} M N _inst_1 _inst_2 f)) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2))) f)
+  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u1} N] (f : MonoidHom.{u2, u1} M N _inst_1 _inst_2), Eq.{max (succ u2) (succ u1)} (M -> N) (OneHom.toFun.{u2, u1} M N (MulOneClass.toOne.{u2} M _inst_1) (MulOneClass.toOne.{u1} N _inst_2) (MonoidHom.toOneHom.{u2, u1} M N _inst_1 _inst_2 f)) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2))) f)
 Case conversion may be inaccurate. Consider using '#align monoid_hom.to_fun_eq_coe MonoidHom.toFun_eq_coeₓ'. -/
 @[simp, to_additive]
 theorem MonoidHom.toFun_eq_coe [MulOneClass M] [MulOneClass N] (f : M →* N) : f.toFun = f :=
@@ -847,7 +847,7 @@ theorem OneHom.coe_mk [One M] [One N] (f : M → N) (h1) : (OneHom.mk f h1 : M 
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] (f : M -> N) (hmul : forall (x : M) (y : M), Eq.{succ u2} N (f (HMul.hMul.{u1, u1, u1} M M M (instHMul.{u1} M _inst_1) x y)) (HMul.hMul.{u2, u2, u2} N N N (instHMul.{u2} N _inst_2) (f x) (f y))), Eq.{max (succ u1) (succ u2)} ((fun (_x : MulHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MulHom.mk.{u1, u2} M N _inst_1 _inst_2 f hmul)) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MulHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MulHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MulHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) (MulHom.mk.{u1, u2} M N _inst_1 _inst_2 f hmul)) f
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : Mul.{u2} M] [_inst_2 : Mul.{u1} N] (f : M -> N) (hmul : forall (x : M) (y : M), Eq.{succ u1} N (f (HMul.hMul.{u2, u2, u2} M M M (instHMul.{u2} M _inst_1) x y)) (HMul.hMul.{u1, u1, u1} N N N (instHMul.{u1} N _inst_2) (f x) (f y))), Eq.{max (succ u2) (succ u1)} (forall (a : M), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) a) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) (MulHom.mk.{u2, u1} M N _inst_1 _inst_2 f hmul)) f
+  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : Mul.{u2} M] [_inst_2 : Mul.{u1} N] (f : M -> N) (hmul : forall (x : M) (y : M), Eq.{succ u1} N (f (HMul.hMul.{u2, u2, u2} M M M (instHMul.{u2} M _inst_1) x y)) (HMul.hMul.{u1, u1, u1} N N N (instHMul.{u1} N _inst_2) (f x) (f y))), Eq.{max (succ u2) (succ u1)} (forall (a : M), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) a) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) (MulHom.mk.{u2, u1} M N _inst_1 _inst_2 f hmul)) f
 Case conversion may be inaccurate. Consider using '#align mul_hom.coe_mk MulHom.coe_mkₓ'. -/
 @[simp, to_additive]
 theorem MulHom.coe_mk [Mul M] [Mul N] (f : M → N) (hmul) : (MulHom.mk f hmul : M → N) = f :=
@@ -859,7 +859,7 @@ theorem MulHom.coe_mk [Mul M] [Mul N] (f : M → N) (hmul) : (MulHom.mk f hmul :
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N] (f : M -> N) (h1 : Eq.{succ u2} N (f (OfNat.ofNat.{u1} M 1 (OfNat.mk.{u1} M 1 (One.one.{u1} M (MulOneClass.toHasOne.{u1} M _inst_1))))) (OfNat.ofNat.{u2} N 1 (OfNat.mk.{u2} N 1 (One.one.{u2} N (MulOneClass.toHasOne.{u2} N _inst_2))))) (hmul : forall (x : M) (y : M), Eq.{succ u2} N (f (HMul.hMul.{u1, u1, u1} M M M (instHMul.{u1} M (MulOneClass.toHasMul.{u1} M _inst_1)) x y)) (HMul.hMul.{u2, u2, u2} N N N (instHMul.{u2} N (MulOneClass.toHasMul.{u2} N _inst_2)) (f x) (f y))), Eq.{max (succ u1) (succ u2)} ((fun (_x : MonoidHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MonoidHom.mk.{u1, u2} M N _inst_1 _inst_2 f h1 hmul)) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MonoidHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MonoidHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.mk.{u1, u2} M N _inst_1 _inst_2 f h1 hmul)) f
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u1} N] (f : OneHom.{u2, u1} M N (MulOneClass.toOne.{u2} M _inst_1) (MulOneClass.toOne.{u1} N _inst_2)) (h1 : forall (x : M) (y : M), Eq.{succ u1} N (OneHom.toFun.{u2, u1} M N (MulOneClass.toOne.{u2} M _inst_1) (MulOneClass.toOne.{u1} N _inst_2) f (HMul.hMul.{u2, u2, u2} M M M (instHMul.{u2} M (MulOneClass.toMul.{u2} M _inst_1)) x y)) (HMul.hMul.{u1, u1, u1} N N N (instHMul.{u1} N (MulOneClass.toMul.{u1} N _inst_2)) (OneHom.toFun.{u2, u1} M N (MulOneClass.toOne.{u2} M _inst_1) (MulOneClass.toOne.{u1} N _inst_2) f x) (OneHom.toFun.{u2, u1} M N (MulOneClass.toOne.{u2} M _inst_1) (MulOneClass.toOne.{u1} N _inst_2) f y))), Eq.{max (succ u2) (succ u1)} (forall (a : M), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) a) (FunLike.coe.{max (succ u1) (succ u2), succ u2, succ u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M (fun (a : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) a) (MulHomClass.toFunLike.{max u1 u2, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2) (MonoidHomClass.toMulHomClass.{max u1 u2, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2))) (MonoidHom.mk.{u2, u1} M N _inst_1 _inst_2 f h1)) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (OneHom.{u2, u1} M N (MulOneClass.toOne.{u2} M _inst_1) (MulOneClass.toOne.{u1} N _inst_2)) M (fun (a : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1254 : M) => N) a) (OneHomClass.toFunLike.{max u2 u1, u2, u1} (OneHom.{u2, u1} M N (MulOneClass.toOne.{u2} M _inst_1) (MulOneClass.toOne.{u1} N _inst_2)) M N (MulOneClass.toOne.{u2} M _inst_1) (MulOneClass.toOne.{u1} N _inst_2) (OneHom.oneHomClass.{u2, u1} M N (MulOneClass.toOne.{u2} M _inst_1) (MulOneClass.toOne.{u1} N _inst_2))) f)
+  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u1} N] (f : OneHom.{u2, u1} M N (MulOneClass.toOne.{u2} M _inst_1) (MulOneClass.toOne.{u1} N _inst_2)) (h1 : forall (x : M) (y : M), Eq.{succ u1} N (OneHom.toFun.{u2, u1} M N (MulOneClass.toOne.{u2} M _inst_1) (MulOneClass.toOne.{u1} N _inst_2) f (HMul.hMul.{u2, u2, u2} M M M (instHMul.{u2} M (MulOneClass.toMul.{u2} M _inst_1)) x y)) (HMul.hMul.{u1, u1, u1} N N N (instHMul.{u1} N (MulOneClass.toMul.{u1} N _inst_2)) (OneHom.toFun.{u2, u1} M N (MulOneClass.toOne.{u2} M _inst_1) (MulOneClass.toOne.{u1} N _inst_2) f x) (OneHom.toFun.{u2, u1} M N (MulOneClass.toOne.{u2} M _inst_1) (MulOneClass.toOne.{u1} N _inst_2) f y))), Eq.{max (succ u2) (succ u1)} (forall (a : M), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) a) (FunLike.coe.{max (succ u1) (succ u2), succ u2, succ u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M (fun (a : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) a) (MulHomClass.toFunLike.{max u1 u2, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2) (MonoidHomClass.toMulHomClass.{max u1 u2, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2))) (MonoidHom.mk.{u2, u1} M N _inst_1 _inst_2 f h1)) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (OneHom.{u2, u1} M N (MulOneClass.toOne.{u2} M _inst_1) (MulOneClass.toOne.{u1} N _inst_2)) M (fun (a : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1254 : M) => N) a) (OneHomClass.toFunLike.{max u2 u1, u2, u1} (OneHom.{u2, u1} M N (MulOneClass.toOne.{u2} M _inst_1) (MulOneClass.toOne.{u1} N _inst_2)) M N (MulOneClass.toOne.{u2} M _inst_1) (MulOneClass.toOne.{u1} N _inst_2) (OneHom.oneHomClass.{u2, u1} M N (MulOneClass.toOne.{u2} M _inst_1) (MulOneClass.toOne.{u1} N _inst_2))) f)
 Case conversion may be inaccurate. Consider using '#align monoid_hom.coe_mk MonoidHom.coe_mkₓ'. -/
 @[simp, to_additive]
 theorem MonoidHom.coe_mk [MulOneClass M] [MulOneClass N] (f : M → N) (h1 hmul) :
@@ -872,7 +872,7 @@ theorem MonoidHom.coe_mk [MulOneClass M] [MulOneClass N] (f : M → N) (h1 hmul)
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulZeroOneClass.{u1} M] [_inst_2 : MulZeroOneClass.{u2} N] (f : M -> N) (h0 : Eq.{succ u2} N (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} N 0 (OfNat.mk.{u2} N 0 (Zero.zero.{u2} N (MulZeroClass.toHasZero.{u2} N (MulZeroOneClass.toMulZeroClass.{u2} N _inst_2)))))) (h1 : Eq.{succ u2} N (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} N 1 (OfNat.mk.{u2} N 1 (One.one.{u2} N (MulOneClass.toHasOne.{u2} N (MulZeroOneClass.toMulOneClass.{u2} N _inst_2)))))) (hmul : forall (x : M) (y : M), Eq.{succ u2} N (f (HMul.hMul.{u1, u1, u1} M M M (instHMul.{u1} M (MulOneClass.toHasMul.{u1} M (MulZeroOneClass.toMulOneClass.{u1} M _inst_1))) x y)) (HMul.hMul.{u2, u2, u2} N N N (instHMul.{u2} N (MulOneClass.toHasMul.{u2} N (MulZeroOneClass.toMulOneClass.{u2} N _inst_2))) (f x) (f y))), Eq.{max (succ u1) (succ u2)} ((fun (_x : MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MonoidWithZeroHom.mk.{u1, u2} M N _inst_1 _inst_2 f h0 h1 hmul)) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MonoidWithZeroHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) (MonoidWithZeroHom.mk.{u1, u2} M N _inst_1 _inst_2 f h0 h1 hmul)) f
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : MulZeroOneClass.{u2} M] [_inst_2 : MulZeroOneClass.{u1} N] (f : ZeroHom.{u2, u1} M N (MulZeroOneClass.toZero.{u2} M _inst_1) (MulZeroOneClass.toZero.{u1} N _inst_2)) (h0 : Eq.{succ u1} N (ZeroHom.toFun.{u2, u1} M N (MulZeroOneClass.toZero.{u2} M _inst_1) (MulZeroOneClass.toZero.{u1} N _inst_2) f (OfNat.ofNat.{u2} M 1 (One.toOfNat1.{u2} M (MulOneClass.toOne.{u2} M (MulZeroOneClass.toMulOneClass.{u2} M _inst_1))))) (OfNat.ofNat.{u1} N 1 (One.toOfNat1.{u1} N (MulOneClass.toOne.{u1} N (MulZeroOneClass.toMulOneClass.{u1} N _inst_2))))) (h1 : forall (x : M) (y : M), Eq.{succ u1} N (ZeroHom.toFun.{u2, u1} M N (MulZeroOneClass.toZero.{u2} M _inst_1) (MulZeroOneClass.toZero.{u1} N _inst_2) f (HMul.hMul.{u2, u2, u2} M M M (instHMul.{u2} M (MulOneClass.toMul.{u2} M (MulZeroOneClass.toMulOneClass.{u2} M _inst_1))) x y)) (HMul.hMul.{u1, u1, u1} N N N (instHMul.{u1} N (MulOneClass.toMul.{u1} N (MulZeroOneClass.toMulOneClass.{u1} N _inst_2))) (ZeroHom.toFun.{u2, u1} M N (MulZeroOneClass.toZero.{u2} M _inst_1) (MulZeroOneClass.toZero.{u1} N _inst_2) f x) (ZeroHom.toFun.{u2, u1} M N (MulZeroOneClass.toZero.{u2} M _inst_1) (MulZeroOneClass.toZero.{u1} N _inst_2) f y))), Eq.{max (succ u2) (succ u1)} (forall (a : M), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) a) (FunLike.coe.{max (succ u1) (succ u2), succ u2, succ u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M (fun (a : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) a) (MulHomClass.toFunLike.{max u1 u2, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M (MulZeroOneClass.toMulOneClass.{u2} M _inst_1)) (MulOneClass.toMul.{u1} N (MulZeroOneClass.toMulOneClass.{u1} N _inst_2)) (MonoidHomClass.toMulHomClass.{max u1 u2, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulZeroOneClass.toMulOneClass.{u2} M _inst_1) (MulZeroOneClass.toMulOneClass.{u1} N _inst_2) (MonoidWithZeroHomClass.toMonoidHomClass.{max u1 u2, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidWithZeroHom.monoidWithZeroHomClass.{u2, u1} M N _inst_1 _inst_2)))) (MonoidWithZeroHom.mk.{u2, u1} M N _inst_1 _inst_2 f h0 h1)) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (ZeroHom.{u2, u1} M N (MulZeroOneClass.toZero.{u2} M _inst_1) (MulZeroOneClass.toZero.{u1} N _inst_2)) M (fun (a : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.124 : M) => N) a) (ZeroHomClass.toFunLike.{max u2 u1, u2, u1} (ZeroHom.{u2, u1} M N (MulZeroOneClass.toZero.{u2} M _inst_1) (MulZeroOneClass.toZero.{u1} N _inst_2)) M N (MulZeroOneClass.toZero.{u2} M _inst_1) (MulZeroOneClass.toZero.{u1} N _inst_2) (ZeroHom.zeroHomClass.{u2, u1} M N (MulZeroOneClass.toZero.{u2} M _inst_1) (MulZeroOneClass.toZero.{u1} N _inst_2))) f)
+  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : MulZeroOneClass.{u2} M] [_inst_2 : MulZeroOneClass.{u1} N] (f : ZeroHom.{u2, u1} M N (MulZeroOneClass.toZero.{u2} M _inst_1) (MulZeroOneClass.toZero.{u1} N _inst_2)) (h0 : Eq.{succ u1} N (ZeroHom.toFun.{u2, u1} M N (MulZeroOneClass.toZero.{u2} M _inst_1) (MulZeroOneClass.toZero.{u1} N _inst_2) f (OfNat.ofNat.{u2} M 1 (One.toOfNat1.{u2} M (MulOneClass.toOne.{u2} M (MulZeroOneClass.toMulOneClass.{u2} M _inst_1))))) (OfNat.ofNat.{u1} N 1 (One.toOfNat1.{u1} N (MulOneClass.toOne.{u1} N (MulZeroOneClass.toMulOneClass.{u1} N _inst_2))))) (h1 : forall (x : M) (y : M), Eq.{succ u1} N (ZeroHom.toFun.{u2, u1} M N (MulZeroOneClass.toZero.{u2} M _inst_1) (MulZeroOneClass.toZero.{u1} N _inst_2) f (HMul.hMul.{u2, u2, u2} M M M (instHMul.{u2} M (MulOneClass.toMul.{u2} M (MulZeroOneClass.toMulOneClass.{u2} M _inst_1))) x y)) (HMul.hMul.{u1, u1, u1} N N N (instHMul.{u1} N (MulOneClass.toMul.{u1} N (MulZeroOneClass.toMulOneClass.{u1} N _inst_2))) (ZeroHom.toFun.{u2, u1} M N (MulZeroOneClass.toZero.{u2} M _inst_1) (MulZeroOneClass.toZero.{u1} N _inst_2) f x) (ZeroHom.toFun.{u2, u1} M N (MulZeroOneClass.toZero.{u2} M _inst_1) (MulZeroOneClass.toZero.{u1} N _inst_2) f y))), Eq.{max (succ u2) (succ u1)} (forall (a : M), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) a) (FunLike.coe.{max (succ u1) (succ u2), succ u2, succ u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M (fun (a : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) a) (MulHomClass.toFunLike.{max u1 u2, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M (MulZeroOneClass.toMulOneClass.{u2} M _inst_1)) (MulOneClass.toMul.{u1} N (MulZeroOneClass.toMulOneClass.{u1} N _inst_2)) (MonoidHomClass.toMulHomClass.{max u1 u2, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulZeroOneClass.toMulOneClass.{u2} M _inst_1) (MulZeroOneClass.toMulOneClass.{u1} N _inst_2) (MonoidWithZeroHomClass.toMonoidHomClass.{max u1 u2, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidWithZeroHom.monoidWithZeroHomClass.{u2, u1} M N _inst_1 _inst_2)))) (MonoidWithZeroHom.mk.{u2, u1} M N _inst_1 _inst_2 f h0 h1)) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (ZeroHom.{u2, u1} M N (MulZeroOneClass.toZero.{u2} M _inst_1) (MulZeroOneClass.toZero.{u1} N _inst_2)) M (fun (a : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.124 : M) => N) a) (ZeroHomClass.toFunLike.{max u2 u1, u2, u1} (ZeroHom.{u2, u1} M N (MulZeroOneClass.toZero.{u2} M _inst_1) (MulZeroOneClass.toZero.{u1} N _inst_2)) M N (MulZeroOneClass.toZero.{u2} M _inst_1) (MulZeroOneClass.toZero.{u1} N _inst_2) (ZeroHom.zeroHomClass.{u2, u1} M N (MulZeroOneClass.toZero.{u2} M _inst_1) (MulZeroOneClass.toZero.{u1} N _inst_2))) f)
 Case conversion may be inaccurate. Consider using '#align monoid_with_zero_hom.coe_mk MonoidWithZeroHom.coe_mkₓ'. -/
 @[simp]
 theorem MonoidWithZeroHom.coe_mk [MulZeroOneClass M] [MulZeroOneClass N] (f : M → N) (h0 h1 hmul) :
@@ -884,7 +884,7 @@ theorem MonoidWithZeroHom.coe_mk [MulZeroOneClass M] [MulZeroOneClass N] (f : M
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N] (f : MonoidHom.{u1, u2} M N _inst_1 _inst_2), Eq.{max (succ u1) (succ u2)} ((fun (_x : OneHom.{u1, u2} M N (MulOneClass.toHasOne.{u1} M _inst_1) (MulOneClass.toHasOne.{u2} N _inst_2)) => M -> N) (MonoidHom.toOneHom.{u1, u2} M N _inst_1 _inst_2 f)) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (OneHom.{u1, u2} M N (MulOneClass.toHasOne.{u1} M _inst_1) (MulOneClass.toHasOne.{u2} N _inst_2)) (fun (_x : OneHom.{u1, u2} M N (MulOneClass.toHasOne.{u1} M _inst_1) (MulOneClass.toHasOne.{u2} N _inst_2)) => M -> N) (OneHom.hasCoeToFun.{u1, u2} M N (MulOneClass.toHasOne.{u1} M _inst_1) (MulOneClass.toHasOne.{u2} N _inst_2)) (MonoidHom.toOneHom.{u1, u2} M N _inst_1 _inst_2 f)) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MonoidHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MonoidHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f)
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u1} N] (f : MonoidHom.{u2, u1} M N _inst_1 _inst_2), Eq.{max (succ u2) (succ u1)} (forall (a : M), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1254 : M) => N) a) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (OneHom.{u2, u1} M N (MulOneClass.toOne.{u2} M _inst_1) (MulOneClass.toOne.{u1} N _inst_2)) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1254 : M) => N) _x) (OneHomClass.toFunLike.{max u2 u1, u2, u1} (OneHom.{u2, u1} M N (MulOneClass.toOne.{u2} M _inst_1) (MulOneClass.toOne.{u1} N _inst_2)) M N (MulOneClass.toOne.{u2} M _inst_1) (MulOneClass.toOne.{u1} N _inst_2) (OneHom.oneHomClass.{u2, u1} M N (MulOneClass.toOne.{u2} M _inst_1) (MulOneClass.toOne.{u1} N _inst_2))) (MonoidHom.toOneHom.{u2, u1} M N _inst_1 _inst_2 f)) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2))) f)
+  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u1} N] (f : MonoidHom.{u2, u1} M N _inst_1 _inst_2), Eq.{max (succ u2) (succ u1)} (forall (a : M), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1254 : M) => N) a) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (OneHom.{u2, u1} M N (MulOneClass.toOne.{u2} M _inst_1) (MulOneClass.toOne.{u1} N _inst_2)) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.1254 : M) => N) _x) (OneHomClass.toFunLike.{max u2 u1, u2, u1} (OneHom.{u2, u1} M N (MulOneClass.toOne.{u2} M _inst_1) (MulOneClass.toOne.{u1} N _inst_2)) M N (MulOneClass.toOne.{u2} M _inst_1) (MulOneClass.toOne.{u1} N _inst_2) (OneHom.oneHomClass.{u2, u1} M N (MulOneClass.toOne.{u2} M _inst_1) (MulOneClass.toOne.{u1} N _inst_2))) (MonoidHom.toOneHom.{u2, u1} M N _inst_1 _inst_2 f)) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2))) f)
 Case conversion may be inaccurate. Consider using '#align monoid_hom.to_one_hom_coe MonoidHom.toOneHom_coeₓ'. -/
 @[simp, to_additive]
 theorem MonoidHom.toOneHom_coe [MulOneClass M] [MulOneClass N] (f : M →* N) :
@@ -897,7 +897,7 @@ theorem MonoidHom.toOneHom_coe [MulOneClass M] [MulOneClass N] (f : M →* N) :
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N] (f : MonoidHom.{u1, u2} M N _inst_1 _inst_2), Eq.{max (succ u1) (succ u2)} ((fun (_x : MulHom.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) => M -> N) (MonoidHom.toMulHom.{u1, u2} M N _inst_1 _inst_2 f)) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MulHom.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (fun (_x : MulHom.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) => M -> N) (MulHom.hasCoeToFun.{u1, u2} M N (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u2} N _inst_2)) (MonoidHom.toMulHom.{u1, u2} M N _inst_1 _inst_2 f)) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MonoidHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MonoidHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f)
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u1} N] (f : MonoidHom.{u2, u1} M N _inst_1 _inst_2), Eq.{max (succ u2) (succ u1)} (M -> N) (MulHom.toFun.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2) (MonoidHom.toMulHom.{u2, u1} M N _inst_1 _inst_2 f)) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2))) f)
+  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u1} N] (f : MonoidHom.{u2, u1} M N _inst_1 _inst_2), Eq.{max (succ u2) (succ u1)} (M -> N) (MulHom.toFun.{u2, u1} M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2) (MonoidHom.toMulHom.{u2, u1} M N _inst_1 _inst_2 f)) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2))) f)
 Case conversion may be inaccurate. Consider using '#align monoid_hom.to_mul_hom_coe MonoidHom.toMulHom_coeₓ'. -/
 @[simp, to_additive]
 theorem MonoidHom.toMulHom_coe [MulOneClass M] [MulOneClass N] (f : M →* N) :
@@ -910,7 +910,7 @@ theorem MonoidHom.toMulHom_coe [MulOneClass M] [MulOneClass N] (f : M →* N) :
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulZeroOneClass.{u1} M] [_inst_2 : MulZeroOneClass.{u2} N] (f : MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2), Eq.{max (succ u1) (succ u2)} ((fun (_x : ZeroHom.{u1, u2} M N (MulZeroClass.toHasZero.{u1} M (MulZeroOneClass.toMulZeroClass.{u1} M _inst_1)) (MulZeroClass.toHasZero.{u2} N (MulZeroOneClass.toMulZeroClass.{u2} N _inst_2))) => M -> N) (MonoidWithZeroHom.toZeroHom.{u1, u2} M N _inst_1 _inst_2 f)) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (ZeroHom.{u1, u2} M N (MulZeroClass.toHasZero.{u1} M (MulZeroOneClass.toMulZeroClass.{u1} M _inst_1)) (MulZeroClass.toHasZero.{u2} N (MulZeroOneClass.toMulZeroClass.{u2} N _inst_2))) (fun (_x : ZeroHom.{u1, u2} M N (MulZeroClass.toHasZero.{u1} M (MulZeroOneClass.toMulZeroClass.{u1} M _inst_1)) (MulZeroClass.toHasZero.{u2} N (MulZeroOneClass.toMulZeroClass.{u2} N _inst_2))) => M -> N) (ZeroHom.hasCoeToFun.{u1, u2} M N (MulZeroClass.toHasZero.{u1} M (MulZeroOneClass.toMulZeroClass.{u1} M _inst_1)) (MulZeroClass.toHasZero.{u2} N (MulZeroOneClass.toMulZeroClass.{u2} N _inst_2))) (MonoidWithZeroHom.toZeroHom.{u1, u2} M N _inst_1 _inst_2 f)) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MonoidWithZeroHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f)
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : MulZeroOneClass.{u2} M] [_inst_2 : MulZeroOneClass.{u1} N] (f : MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2), Eq.{max (succ u2) (succ u1)} (forall (a : M), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.124 : M) => N) a) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (ZeroHom.{u2, u1} M N (MulZeroOneClass.toZero.{u2} M _inst_1) (MulZeroOneClass.toZero.{u1} N _inst_2)) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.124 : M) => N) _x) (ZeroHomClass.toFunLike.{max u2 u1, u2, u1} (ZeroHom.{u2, u1} M N (MulZeroOneClass.toZero.{u2} M _inst_1) (MulZeroOneClass.toZero.{u1} N _inst_2)) M N (MulZeroOneClass.toZero.{u2} M _inst_1) (MulZeroOneClass.toZero.{u1} N _inst_2) (ZeroHom.zeroHomClass.{u2, u1} M N (MulZeroOneClass.toZero.{u2} M _inst_1) (MulZeroOneClass.toZero.{u1} N _inst_2))) (MonoidWithZeroHom.toZeroHom.{u2, u1} M N _inst_1 _inst_2 f)) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M (MulZeroOneClass.toMulOneClass.{u2} M _inst_1)) (MulOneClass.toMul.{u1} N (MulZeroOneClass.toMulOneClass.{u1} N _inst_2)) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulZeroOneClass.toMulOneClass.{u2} M _inst_1) (MulZeroOneClass.toMulOneClass.{u1} N _inst_2) (MonoidWithZeroHomClass.toMonoidHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidWithZeroHom.monoidWithZeroHomClass.{u2, u1} M N _inst_1 _inst_2)))) f)
+  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : MulZeroOneClass.{u2} M] [_inst_2 : MulZeroOneClass.{u1} N] (f : MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2), Eq.{max (succ u2) (succ u1)} (forall (a : M), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.124 : M) => N) a) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (ZeroHom.{u2, u1} M N (MulZeroOneClass.toZero.{u2} M _inst_1) (MulZeroOneClass.toZero.{u1} N _inst_2)) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.124 : M) => N) _x) (ZeroHomClass.toFunLike.{max u2 u1, u2, u1} (ZeroHom.{u2, u1} M N (MulZeroOneClass.toZero.{u2} M _inst_1) (MulZeroOneClass.toZero.{u1} N _inst_2)) M N (MulZeroOneClass.toZero.{u2} M _inst_1) (MulZeroOneClass.toZero.{u1} N _inst_2) (ZeroHom.zeroHomClass.{u2, u1} M N (MulZeroOneClass.toZero.{u2} M _inst_1) (MulZeroOneClass.toZero.{u1} N _inst_2))) (MonoidWithZeroHom.toZeroHom.{u2, u1} M N _inst_1 _inst_2 f)) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M (MulZeroOneClass.toMulOneClass.{u2} M _inst_1)) (MulOneClass.toMul.{u1} N (MulZeroOneClass.toMulOneClass.{u1} N _inst_2)) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulZeroOneClass.toMulOneClass.{u2} M _inst_1) (MulZeroOneClass.toMulOneClass.{u1} N _inst_2) (MonoidWithZeroHomClass.toMonoidHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidWithZeroHom.monoidWithZeroHomClass.{u2, u1} M N _inst_1 _inst_2)))) f)
 Case conversion may be inaccurate. Consider using '#align monoid_with_zero_hom.to_zero_hom_coe MonoidWithZeroHom.toZeroHom_coeₓ'. -/
 @[simp]
 theorem MonoidWithZeroHom.toZeroHom_coe [MulZeroOneClass M] [MulZeroOneClass N] (f : M →*₀ N) :
@@ -922,7 +922,7 @@ theorem MonoidWithZeroHom.toZeroHom_coe [MulZeroOneClass M] [MulZeroOneClass N]
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulZeroOneClass.{u1} M] [_inst_2 : MulZeroOneClass.{u2} N] (f : MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2), Eq.{max (succ u1) (succ u2)} ((fun (_x : MonoidHom.{u1, u2} M N (MulZeroOneClass.toMulOneClass.{u1} M _inst_1) (MulZeroOneClass.toMulOneClass.{u2} N _inst_2)) => M -> N) (MonoidWithZeroHom.toMonoidHom.{u1, u2} M N _inst_1 _inst_2 f)) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} M N (MulZeroOneClass.toMulOneClass.{u1} M _inst_1) (MulZeroOneClass.toMulOneClass.{u2} N _inst_2)) (fun (_x : MonoidHom.{u1, u2} M N (MulZeroOneClass.toMulOneClass.{u1} M _inst_1) (MulZeroOneClass.toMulOneClass.{u2} N _inst_2)) => M -> N) (MonoidHom.hasCoeToFun.{u1, u2} M N (MulZeroOneClass.toMulOneClass.{u1} M _inst_1) (MulZeroOneClass.toMulOneClass.{u2} N _inst_2)) (MonoidWithZeroHom.toMonoidHom.{u1, u2} M N _inst_1 _inst_2 f)) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MonoidWithZeroHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f)
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : MulZeroOneClass.{u2} M] [_inst_2 : MulZeroOneClass.{u1} N] (f : MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2), Eq.{max (succ u2) (succ u1)} (M -> N) (OneHom.toFun.{u2, u1} M N (MulOneClass.toOne.{u2} M (MulZeroOneClass.toMulOneClass.{u2} M _inst_1)) (MulOneClass.toOne.{u1} N (MulZeroOneClass.toMulOneClass.{u1} N _inst_2)) (MonoidHom.toOneHom.{u2, u1} M N (MulZeroOneClass.toMulOneClass.{u2} M _inst_1) (MulZeroOneClass.toMulOneClass.{u1} N _inst_2) (MonoidWithZeroHom.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 f))) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M (MulZeroOneClass.toMulOneClass.{u2} M _inst_1)) (MulOneClass.toMul.{u1} N (MulZeroOneClass.toMulOneClass.{u1} N _inst_2)) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulZeroOneClass.toMulOneClass.{u2} M _inst_1) (MulZeroOneClass.toMulOneClass.{u1} N _inst_2) (MonoidWithZeroHomClass.toMonoidHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidWithZeroHom.monoidWithZeroHomClass.{u2, u1} M N _inst_1 _inst_2)))) f)
+  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : MulZeroOneClass.{u2} M] [_inst_2 : MulZeroOneClass.{u1} N] (f : MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2), Eq.{max (succ u2) (succ u1)} (M -> N) (OneHom.toFun.{u2, u1} M N (MulOneClass.toOne.{u2} M (MulZeroOneClass.toMulOneClass.{u2} M _inst_1)) (MulOneClass.toOne.{u1} N (MulZeroOneClass.toMulOneClass.{u1} N _inst_2)) (MonoidHom.toOneHom.{u2, u1} M N (MulZeroOneClass.toMulOneClass.{u2} M _inst_1) (MulZeroOneClass.toMulOneClass.{u1} N _inst_2) (MonoidWithZeroHom.toMonoidHom.{u2, u1} M N _inst_1 _inst_2 f))) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M (MulZeroOneClass.toMulOneClass.{u2} M _inst_1)) (MulOneClass.toMul.{u1} N (MulZeroOneClass.toMulOneClass.{u1} N _inst_2)) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulZeroOneClass.toMulOneClass.{u2} M _inst_1) (MulZeroOneClass.toMulOneClass.{u1} N _inst_2) (MonoidWithZeroHomClass.toMonoidHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidWithZeroHom.monoidWithZeroHomClass.{u2, u1} M N _inst_1 _inst_2)))) f)
 Case conversion may be inaccurate. Consider using '#align monoid_with_zero_hom.to_monoid_hom_coe MonoidWithZeroHom.toMonoidHom_coeₓ'. -/
 @[simp]
 theorem MonoidWithZeroHom.toMonoidHom_coe [MulZeroOneClass M] [MulZeroOneClass N] (f : M →*₀ N) :
@@ -946,7 +946,7 @@ theorem OneHom.ext [One M] [One N] ⦃f g : OneHom M N⦄ (h : ∀ x, f x = g x)
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] {{f : MulHom.{u1, u2} M N _inst_1 _inst_2}} {{g : MulHom.{u1, u2} M N _inst_1 _inst_2}}, (forall (x : M), Eq.{succ u2} N (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MulHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MulHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MulHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f x) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MulHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MulHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MulHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) g x)) -> (Eq.{max (succ u2) (succ u1)} (MulHom.{u1, u2} M N _inst_1 _inst_2) f g)
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : Mul.{u2} M] [_inst_2 : Mul.{u1} N] {{f : MulHom.{u2, u1} M N _inst_1 _inst_2}} {{g : MulHom.{u2, u1} M N _inst_1 _inst_2}}, (forall (x : M), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) f x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) g x)) -> (Eq.{max (succ u2) (succ u1)} (MulHom.{u2, u1} M N _inst_1 _inst_2) f g)
+  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : Mul.{u2} M] [_inst_2 : Mul.{u1} N] {{f : MulHom.{u2, u1} M N _inst_1 _inst_2}} {{g : MulHom.{u2, u1} M N _inst_1 _inst_2}}, (forall (x : M), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) f x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) g x)) -> (Eq.{max (succ u2) (succ u1)} (MulHom.{u2, u1} M N _inst_1 _inst_2) f g)
 Case conversion may be inaccurate. Consider using '#align mul_hom.ext MulHom.extₓ'. -/
 @[ext, to_additive]
 theorem MulHom.ext [Mul M] [Mul N] ⦃f g : M →ₙ* N⦄ (h : ∀ x, f x = g x) : f = g :=
@@ -958,7 +958,7 @@ theorem MulHom.ext [Mul M] [Mul N] ⦃f g : M →ₙ* N⦄ (h : ∀ x, f x = g x
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N] {{f : MonoidHom.{u1, u2} M N _inst_1 _inst_2}} {{g : MonoidHom.{u1, u2} M N _inst_1 _inst_2}}, (forall (x : M), Eq.{succ u2} N (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MonoidHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MonoidHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f x) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MonoidHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MonoidHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) g x)) -> (Eq.{max (succ u2) (succ u1)} (MonoidHom.{u1, u2} M N _inst_1 _inst_2) f g)
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u1} N] {{f : MonoidHom.{u2, u1} M N _inst_1 _inst_2}} {{g : MonoidHom.{u2, u1} M N _inst_1 _inst_2}}, (forall (x : M), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2))) f x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2))) g x)) -> (Eq.{max (succ u2) (succ u1)} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) f g)
+  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u1} N] {{f : MonoidHom.{u2, u1} M N _inst_1 _inst_2}} {{g : MonoidHom.{u2, u1} M N _inst_1 _inst_2}}, (forall (x : M), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2))) f x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2))) g x)) -> (Eq.{max (succ u2) (succ u1)} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) f g)
 Case conversion may be inaccurate. Consider using '#align monoid_hom.ext MonoidHom.extₓ'. -/
 @[ext, to_additive]
 theorem MonoidHom.ext [MulOneClass M] [MulOneClass N] ⦃f g : M →* N⦄ (h : ∀ x, f x = g x) : f = g :=
@@ -970,7 +970,7 @@ theorem MonoidHom.ext [MulOneClass M] [MulOneClass N] ⦃f g : M →* N⦄ (h :
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulZeroOneClass.{u1} M] [_inst_2 : MulZeroOneClass.{u2} N] {{f : MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2}} {{g : MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2}}, (forall (x : M), Eq.{succ u2} N (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MonoidWithZeroHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f x) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MonoidWithZeroHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) g x)) -> (Eq.{max (succ u2) (succ u1)} (MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) f g)
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : MulZeroOneClass.{u2} M] [_inst_2 : MulZeroOneClass.{u1} N] {{f : MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2}} {{g : MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2}}, (forall (x : M), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M (MulZeroOneClass.toMulOneClass.{u2} M _inst_1)) (MulOneClass.toMul.{u1} N (MulZeroOneClass.toMulOneClass.{u1} N _inst_2)) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulZeroOneClass.toMulOneClass.{u2} M _inst_1) (MulZeroOneClass.toMulOneClass.{u1} N _inst_2) (MonoidWithZeroHomClass.toMonoidHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidWithZeroHom.monoidWithZeroHomClass.{u2, u1} M N _inst_1 _inst_2)))) f x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M (MulZeroOneClass.toMulOneClass.{u2} M _inst_1)) (MulOneClass.toMul.{u1} N (MulZeroOneClass.toMulOneClass.{u1} N _inst_2)) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulZeroOneClass.toMulOneClass.{u2} M _inst_1) (MulZeroOneClass.toMulOneClass.{u1} N _inst_2) (MonoidWithZeroHomClass.toMonoidHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidWithZeroHom.monoidWithZeroHomClass.{u2, u1} M N _inst_1 _inst_2)))) g x)) -> (Eq.{max (succ u2) (succ u1)} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) f g)
+  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : MulZeroOneClass.{u2} M] [_inst_2 : MulZeroOneClass.{u1} N] {{f : MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2}} {{g : MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2}}, (forall (x : M), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M (MulZeroOneClass.toMulOneClass.{u2} M _inst_1)) (MulOneClass.toMul.{u1} N (MulZeroOneClass.toMulOneClass.{u1} N _inst_2)) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulZeroOneClass.toMulOneClass.{u2} M _inst_1) (MulZeroOneClass.toMulOneClass.{u1} N _inst_2) (MonoidWithZeroHomClass.toMonoidHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidWithZeroHom.monoidWithZeroHomClass.{u2, u1} M N _inst_1 _inst_2)))) f x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M (MulZeroOneClass.toMulOneClass.{u2} M _inst_1)) (MulOneClass.toMul.{u1} N (MulZeroOneClass.toMulOneClass.{u1} N _inst_2)) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulZeroOneClass.toMulOneClass.{u2} M _inst_1) (MulZeroOneClass.toMulOneClass.{u1} N _inst_2) (MonoidWithZeroHomClass.toMonoidHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidWithZeroHom.monoidWithZeroHomClass.{u2, u1} M N _inst_1 _inst_2)))) g x)) -> (Eq.{max (succ u2) (succ u1)} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) f g)
 Case conversion may be inaccurate. Consider using '#align monoid_with_zero_hom.ext MonoidWithZeroHom.extₓ'. -/
 @[ext]
 theorem MonoidWithZeroHom.ext [MulZeroOneClass M] [MulZeroOneClass N] ⦃f g : M →*₀ N⦄
@@ -997,7 +997,7 @@ theorem OneHom.congr_fun [One M] [One N] {f g : OneHom M N} (h : f = g) (x : M)
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] {f : MulHom.{u1, u2} M N _inst_1 _inst_2} {g : MulHom.{u1, u2} M N _inst_1 _inst_2}, (Eq.{max (succ u2) (succ u1)} (MulHom.{u1, u2} M N _inst_1 _inst_2) f g) -> (forall (x : M), Eq.{succ u2} N (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MulHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MulHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MulHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f x) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MulHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MulHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MulHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) g x))
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : Mul.{u2} M] [_inst_2 : Mul.{u1} N] {f : MulHom.{u2, u1} M N _inst_1 _inst_2} {g : MulHom.{u2, u1} M N _inst_1 _inst_2}, (Eq.{max (succ u2) (succ u1)} (MulHom.{u2, u1} M N _inst_1 _inst_2) f g) -> (forall (x : M), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) f x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) g x))
+  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : Mul.{u2} M] [_inst_2 : Mul.{u1} N] {f : MulHom.{u2, u1} M N _inst_1 _inst_2} {g : MulHom.{u2, u1} M N _inst_1 _inst_2}, (Eq.{max (succ u2) (succ u1)} (MulHom.{u2, u1} M N _inst_1 _inst_2) f g) -> (forall (x : M), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) f x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) g x))
 Case conversion may be inaccurate. Consider using '#align mul_hom.congr_fun MulHom.congr_funₓ'. -/
 /-- Deprecated: use `fun_like.congr_fun` instead. -/
 @[to_additive "Deprecated: use `fun_like.congr_fun` instead."]
@@ -1010,7 +1010,7 @@ theorem MulHom.congr_fun [Mul M] [Mul N] {f g : M →ₙ* N} (h : f = g) (x : M)
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N] {f : MonoidHom.{u1, u2} M N _inst_1 _inst_2} {g : MonoidHom.{u1, u2} M N _inst_1 _inst_2}, (Eq.{max (succ u2) (succ u1)} (MonoidHom.{u1, u2} M N _inst_1 _inst_2) f g) -> (forall (x : M), Eq.{succ u2} N (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MonoidHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MonoidHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f x) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MonoidHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MonoidHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) g x))
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u1} N] {f : MonoidHom.{u2, u1} M N _inst_1 _inst_2} {g : MonoidHom.{u2, u1} M N _inst_1 _inst_2}, (Eq.{max (succ u2) (succ u1)} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) f g) -> (forall (x : M), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2))) f x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2))) g x))
+  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u1} N] {f : MonoidHom.{u2, u1} M N _inst_1 _inst_2} {g : MonoidHom.{u2, u1} M N _inst_1 _inst_2}, (Eq.{max (succ u2) (succ u1)} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) f g) -> (forall (x : M), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2))) f x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2))) g x))
 Case conversion may be inaccurate. Consider using '#align monoid_hom.congr_fun MonoidHom.congr_funₓ'. -/
 /-- Deprecated: use `fun_like.congr_fun` instead. -/
 @[to_additive "Deprecated: use `fun_like.congr_fun` instead."]
@@ -1024,7 +1024,7 @@ theorem MonoidHom.congr_fun [MulOneClass M] [MulOneClass N] {f g : M →* N} (h
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulZeroOneClass.{u1} M] [_inst_2 : MulZeroOneClass.{u2} N] {f : MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2} {g : MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2}, (Eq.{max (succ u2) (succ u1)} (MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) f g) -> (forall (x : M), Eq.{succ u2} N (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MonoidWithZeroHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f x) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MonoidWithZeroHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) g x))
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : MulZeroOneClass.{u2} M] [_inst_2 : MulZeroOneClass.{u1} N] {f : MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2} {g : MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2}, (Eq.{max (succ u2) (succ u1)} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) f g) -> (forall (x : M), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M (MulZeroOneClass.toMulOneClass.{u2} M _inst_1)) (MulOneClass.toMul.{u1} N (MulZeroOneClass.toMulOneClass.{u1} N _inst_2)) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulZeroOneClass.toMulOneClass.{u2} M _inst_1) (MulZeroOneClass.toMulOneClass.{u1} N _inst_2) (MonoidWithZeroHomClass.toMonoidHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidWithZeroHom.monoidWithZeroHomClass.{u2, u1} M N _inst_1 _inst_2)))) f x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M (MulZeroOneClass.toMulOneClass.{u2} M _inst_1)) (MulOneClass.toMul.{u1} N (MulZeroOneClass.toMulOneClass.{u1} N _inst_2)) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulZeroOneClass.toMulOneClass.{u2} M _inst_1) (MulZeroOneClass.toMulOneClass.{u1} N _inst_2) (MonoidWithZeroHomClass.toMonoidHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidWithZeroHom.monoidWithZeroHomClass.{u2, u1} M N _inst_1 _inst_2)))) g x))
+  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : MulZeroOneClass.{u2} M] [_inst_2 : MulZeroOneClass.{u1} N] {f : MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2} {g : MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2}, (Eq.{max (succ u2) (succ u1)} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) f g) -> (forall (x : M), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M (MulZeroOneClass.toMulOneClass.{u2} M _inst_1)) (MulOneClass.toMul.{u1} N (MulZeroOneClass.toMulOneClass.{u1} N _inst_2)) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulZeroOneClass.toMulOneClass.{u2} M _inst_1) (MulZeroOneClass.toMulOneClass.{u1} N _inst_2) (MonoidWithZeroHomClass.toMonoidHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidWithZeroHom.monoidWithZeroHomClass.{u2, u1} M N _inst_1 _inst_2)))) f x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M (MulZeroOneClass.toMulOneClass.{u2} M _inst_1)) (MulOneClass.toMul.{u1} N (MulZeroOneClass.toMulOneClass.{u1} N _inst_2)) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulZeroOneClass.toMulOneClass.{u2} M _inst_1) (MulZeroOneClass.toMulOneClass.{u1} N _inst_2) (MonoidWithZeroHomClass.toMonoidHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidWithZeroHom.monoidWithZeroHomClass.{u2, u1} M N _inst_1 _inst_2)))) g x))
 Case conversion may be inaccurate. Consider using '#align monoid_with_zero_hom.congr_fun MonoidWithZeroHom.congr_funₓ'. -/
 /-- Deprecated: use `fun_like.congr_fun` instead. -/
 theorem MonoidWithZeroHom.congr_fun [MulZeroOneClass M] [MulZeroOneClass N] {f g : M →*₀ N}
@@ -1049,7 +1049,7 @@ theorem OneHom.congr_arg [One M] [One N] (f : OneHom M N) {x y : M} (h : x = y)
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] (f : MulHom.{u1, u2} M N _inst_1 _inst_2) {x : M} {y : M}, (Eq.{succ u1} M x y) -> (Eq.{succ u2} N (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MulHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MulHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MulHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f x) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MulHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MulHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MulHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f y))
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : Mul.{u2} M] [_inst_2 : Mul.{u1} N] (f : MulHom.{u2, u1} M N _inst_1 _inst_2) {x : M} {y : M}, (Eq.{succ u2} M x y) -> (Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) f x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) f y))
+  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : Mul.{u2} M] [_inst_2 : Mul.{u1} N] (f : MulHom.{u2, u1} M N _inst_1 _inst_2) {x : M} {y : M}, (Eq.{succ u2} M x y) -> (Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) f x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) f y))
 Case conversion may be inaccurate. Consider using '#align mul_hom.congr_arg MulHom.congr_argₓ'. -/
 /-- Deprecated: use `fun_like.congr_arg` instead. -/
 @[to_additive "Deprecated: use `fun_like.congr_arg` instead."]
@@ -1062,7 +1062,7 @@ theorem MulHom.congr_arg [Mul M] [Mul N] (f : M →ₙ* N) {x y : M} (h : x = y)
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N] (f : MonoidHom.{u1, u2} M N _inst_1 _inst_2) {x : M} {y : M}, (Eq.{succ u1} M x y) -> (Eq.{succ u2} N (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MonoidHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MonoidHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f x) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MonoidHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MonoidHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f y))
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u1} N] (f : MonoidHom.{u2, u1} M N _inst_1 _inst_2) {x : M} {y : M}, (Eq.{succ u2} M x y) -> (Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2))) f x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2))) f y))
+  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u1} N] (f : MonoidHom.{u2, u1} M N _inst_1 _inst_2) {x : M} {y : M}, (Eq.{succ u2} M x y) -> (Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2))) f x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2))) f y))
 Case conversion may be inaccurate. Consider using '#align monoid_hom.congr_arg MonoidHom.congr_argₓ'. -/
 /-- Deprecated: use `fun_like.congr_arg` instead. -/
 @[to_additive "Deprecated: use `fun_like.congr_arg` instead."]
@@ -1076,7 +1076,7 @@ theorem MonoidHom.congr_arg [MulOneClass M] [MulOneClass N] (f : M →* N) {x y
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulZeroOneClass.{u1} M] [_inst_2 : MulZeroOneClass.{u2} N] (f : MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) {x : M} {y : M}, (Eq.{succ u1} M x y) -> (Eq.{succ u2} N (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MonoidWithZeroHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f x) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MonoidWithZeroHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f y))
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : MulZeroOneClass.{u2} M] [_inst_2 : MulZeroOneClass.{u1} N] (f : MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) {x : M} {y : M}, (Eq.{succ u2} M x y) -> (Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M (MulZeroOneClass.toMulOneClass.{u2} M _inst_1)) (MulOneClass.toMul.{u1} N (MulZeroOneClass.toMulOneClass.{u1} N _inst_2)) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulZeroOneClass.toMulOneClass.{u2} M _inst_1) (MulZeroOneClass.toMulOneClass.{u1} N _inst_2) (MonoidWithZeroHomClass.toMonoidHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidWithZeroHom.monoidWithZeroHomClass.{u2, u1} M N _inst_1 _inst_2)))) f x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M (MulZeroOneClass.toMulOneClass.{u2} M _inst_1)) (MulOneClass.toMul.{u1} N (MulZeroOneClass.toMulOneClass.{u1} N _inst_2)) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulZeroOneClass.toMulOneClass.{u2} M _inst_1) (MulZeroOneClass.toMulOneClass.{u1} N _inst_2) (MonoidWithZeroHomClass.toMonoidHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidWithZeroHom.monoidWithZeroHomClass.{u2, u1} M N _inst_1 _inst_2)))) f y))
+  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : MulZeroOneClass.{u2} M] [_inst_2 : MulZeroOneClass.{u1} N] (f : MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) {x : M} {y : M}, (Eq.{succ u2} M x y) -> (Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M (MulZeroOneClass.toMulOneClass.{u2} M _inst_1)) (MulOneClass.toMul.{u1} N (MulZeroOneClass.toMulOneClass.{u1} N _inst_2)) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulZeroOneClass.toMulOneClass.{u2} M _inst_1) (MulZeroOneClass.toMulOneClass.{u1} N _inst_2) (MonoidWithZeroHomClass.toMonoidHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidWithZeroHom.monoidWithZeroHomClass.{u2, u1} M N _inst_1 _inst_2)))) f x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M (MulZeroOneClass.toMulOneClass.{u2} M _inst_1)) (MulOneClass.toMul.{u1} N (MulZeroOneClass.toMulOneClass.{u1} N _inst_2)) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulZeroOneClass.toMulOneClass.{u2} M _inst_1) (MulZeroOneClass.toMulOneClass.{u1} N _inst_2) (MonoidWithZeroHomClass.toMonoidHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidWithZeroHom.monoidWithZeroHomClass.{u2, u1} M N _inst_1 _inst_2)))) f y))
 Case conversion may be inaccurate. Consider using '#align monoid_with_zero_hom.congr_arg MonoidWithZeroHom.congr_argₓ'. -/
 /-- Deprecated: use `fun_like.congr_arg` instead. -/
 theorem MonoidWithZeroHom.congr_arg [MulZeroOneClass M] [MulZeroOneClass N] (f : M →*₀ N) {x y : M}
@@ -1101,7 +1101,7 @@ theorem OneHom.coe_inj [One M] [One N] ⦃f g : OneHom M N⦄ (h : (f : M → N)
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] {{f : MulHom.{u1, u2} M N _inst_1 _inst_2}} {{g : MulHom.{u1, u2} M N _inst_1 _inst_2}}, (Eq.{max (succ u1) (succ u2)} ((fun (_x : MulHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) f) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MulHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MulHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MulHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MulHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MulHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MulHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) g)) -> (Eq.{max (succ u2) (succ u1)} (MulHom.{u1, u2} M N _inst_1 _inst_2) f g)
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : Mul.{u2} M] [_inst_2 : Mul.{u1} N] {{f : MulHom.{u2, u1} M N _inst_1 _inst_2}} {{g : MulHom.{u2, u1} M N _inst_1 _inst_2}}, (Eq.{max (succ u2) (succ u1)} (forall (a : M), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) a) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) f) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) g)) -> (Eq.{max (succ u2) (succ u1)} (MulHom.{u2, u1} M N _inst_1 _inst_2) f g)
+  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : Mul.{u2} M] [_inst_2 : Mul.{u1} N] {{f : MulHom.{u2, u1} M N _inst_1 _inst_2}} {{g : MulHom.{u2, u1} M N _inst_1 _inst_2}}, (Eq.{max (succ u2) (succ u1)} (forall (a : M), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) a) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) f) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) g)) -> (Eq.{max (succ u2) (succ u1)} (MulHom.{u2, u1} M N _inst_1 _inst_2) f g)
 Case conversion may be inaccurate. Consider using '#align mul_hom.coe_inj MulHom.coe_injₓ'. -/
 /-- Deprecated: use `fun_like.coe_injective` instead. -/
 @[to_additive "Deprecated: use `fun_like.coe_injective` instead."]
@@ -1114,7 +1114,7 @@ theorem MulHom.coe_inj [Mul M] [Mul N] ⦃f g : M →ₙ* N⦄ (h : (f : M → N
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N] {{f : MonoidHom.{u1, u2} M N _inst_1 _inst_2}} {{g : MonoidHom.{u1, u2} M N _inst_1 _inst_2}}, (Eq.{max (succ u1) (succ u2)} ((fun (_x : MonoidHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) f) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MonoidHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MonoidHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MonoidHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MonoidHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) g)) -> (Eq.{max (succ u2) (succ u1)} (MonoidHom.{u1, u2} M N _inst_1 _inst_2) f g)
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u1} N] {{f : MonoidHom.{u2, u1} M N _inst_1 _inst_2}} {{g : MonoidHom.{u2, u1} M N _inst_1 _inst_2}}, (Eq.{max (succ u2) (succ u1)} (forall (a : M), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) a) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2))) f) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2))) g)) -> (Eq.{max (succ u2) (succ u1)} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) f g)
+  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u1} N] {{f : MonoidHom.{u2, u1} M N _inst_1 _inst_2}} {{g : MonoidHom.{u2, u1} M N _inst_1 _inst_2}}, (Eq.{max (succ u2) (succ u1)} (forall (a : M), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) a) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2))) f) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2))) g)) -> (Eq.{max (succ u2) (succ u1)} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) f g)
 Case conversion may be inaccurate. Consider using '#align monoid_hom.coe_inj MonoidHom.coe_injₓ'. -/
 /-- Deprecated: use `fun_like.coe_injective` instead. -/
 @[to_additive "Deprecated: use `fun_like.coe_injective` instead."]
@@ -1128,7 +1128,7 @@ theorem MonoidHom.coe_inj [MulOneClass M] [MulOneClass N] ⦃f g : M →* N⦄ (
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulZeroOneClass.{u1} M] [_inst_2 : MulZeroOneClass.{u2} N] {{f : MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2}} {{g : MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2}}, (Eq.{max (succ u1) (succ u2)} ((fun (_x : MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) f) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MonoidWithZeroHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MonoidWithZeroHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) g)) -> (Eq.{max (succ u2) (succ u1)} (MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) f g)
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : MulZeroOneClass.{u2} M] [_inst_2 : MulZeroOneClass.{u1} N] {{f : MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2}} {{g : MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2}}, (Eq.{max (succ u2) (succ u1)} (forall (a : M), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) a) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M (MulZeroOneClass.toMulOneClass.{u2} M _inst_1)) (MulOneClass.toMul.{u1} N (MulZeroOneClass.toMulOneClass.{u1} N _inst_2)) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulZeroOneClass.toMulOneClass.{u2} M _inst_1) (MulZeroOneClass.toMulOneClass.{u1} N _inst_2) (MonoidWithZeroHomClass.toMonoidHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidWithZeroHom.monoidWithZeroHomClass.{u2, u1} M N _inst_1 _inst_2)))) f) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M (MulZeroOneClass.toMulOneClass.{u2} M _inst_1)) (MulOneClass.toMul.{u1} N (MulZeroOneClass.toMulOneClass.{u1} N _inst_2)) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulZeroOneClass.toMulOneClass.{u2} M _inst_1) (MulZeroOneClass.toMulOneClass.{u1} N _inst_2) (MonoidWithZeroHomClass.toMonoidHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidWithZeroHom.monoidWithZeroHomClass.{u2, u1} M N _inst_1 _inst_2)))) g)) -> (Eq.{max (succ u2) (succ u1)} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) f g)
+  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : MulZeroOneClass.{u2} M] [_inst_2 : MulZeroOneClass.{u1} N] {{f : MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2}} {{g : MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2}}, (Eq.{max (succ u2) (succ u1)} (forall (a : M), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) a) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M (MulZeroOneClass.toMulOneClass.{u2} M _inst_1)) (MulOneClass.toMul.{u1} N (MulZeroOneClass.toMulOneClass.{u1} N _inst_2)) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulZeroOneClass.toMulOneClass.{u2} M _inst_1) (MulZeroOneClass.toMulOneClass.{u1} N _inst_2) (MonoidWithZeroHomClass.toMonoidHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidWithZeroHom.monoidWithZeroHomClass.{u2, u1} M N _inst_1 _inst_2)))) f) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M (MulZeroOneClass.toMulOneClass.{u2} M _inst_1)) (MulOneClass.toMul.{u1} N (MulZeroOneClass.toMulOneClass.{u1} N _inst_2)) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulZeroOneClass.toMulOneClass.{u2} M _inst_1) (MulZeroOneClass.toMulOneClass.{u1} N _inst_2) (MonoidWithZeroHomClass.toMonoidHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidWithZeroHom.monoidWithZeroHomClass.{u2, u1} M N _inst_1 _inst_2)))) g)) -> (Eq.{max (succ u2) (succ u1)} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) f g)
 Case conversion may be inaccurate. Consider using '#align monoid_with_zero_hom.coe_inj MonoidWithZeroHom.coe_injₓ'. -/
 /-- Deprecated: use `fun_like.coe_injective` instead. -/
 theorem MonoidWithZeroHom.coe_inj [MulZeroOneClass M] [MulZeroOneClass N] ⦃f g : M →*₀ N⦄
@@ -1153,7 +1153,7 @@ theorem OneHom.ext_iff [One M] [One N] {f g : OneHom M N} : f = g ↔ ∀ x, f x
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] {f : MulHom.{u1, u2} M N _inst_1 _inst_2} {g : MulHom.{u1, u2} M N _inst_1 _inst_2}, Iff (Eq.{max (succ u2) (succ u1)} (MulHom.{u1, u2} M N _inst_1 _inst_2) f g) (forall (x : M), Eq.{succ u2} N (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MulHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MulHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MulHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f x) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MulHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MulHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MulHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) g x))
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : Mul.{u2} M] [_inst_2 : Mul.{u1} N] {f : MulHom.{u2, u1} M N _inst_1 _inst_2} {g : MulHom.{u2, u1} M N _inst_1 _inst_2}, Iff (Eq.{max (succ u2) (succ u1)} (MulHom.{u2, u1} M N _inst_1 _inst_2) f g) (forall (x : M), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) f x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) g x))
+  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : Mul.{u2} M] [_inst_2 : Mul.{u1} N] {f : MulHom.{u2, u1} M N _inst_1 _inst_2} {g : MulHom.{u2, u1} M N _inst_1 _inst_2}, Iff (Eq.{max (succ u2) (succ u1)} (MulHom.{u2, u1} M N _inst_1 _inst_2) f g) (forall (x : M), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) f x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) g x))
 Case conversion may be inaccurate. Consider using '#align mul_hom.ext_iff MulHom.ext_iffₓ'. -/
 /-- Deprecated: use `fun_like.ext_iff` instead. -/
 @[to_additive "Deprecated: use `fun_like.ext_iff` instead."]
@@ -1166,7 +1166,7 @@ theorem MulHom.ext_iff [Mul M] [Mul N] {f g : M →ₙ* N} : f = g ↔ ∀ x, f
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N] {f : MonoidHom.{u1, u2} M N _inst_1 _inst_2} {g : MonoidHom.{u1, u2} M N _inst_1 _inst_2}, Iff (Eq.{max (succ u2) (succ u1)} (MonoidHom.{u1, u2} M N _inst_1 _inst_2) f g) (forall (x : M), Eq.{succ u2} N (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MonoidHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MonoidHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f x) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MonoidHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MonoidHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) g x))
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u1} N] {f : MonoidHom.{u2, u1} M N _inst_1 _inst_2} {g : MonoidHom.{u2, u1} M N _inst_1 _inst_2}, Iff (Eq.{max (succ u2) (succ u1)} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) f g) (forall (x : M), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2))) f x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2))) g x))
+  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u1} N] {f : MonoidHom.{u2, u1} M N _inst_1 _inst_2} {g : MonoidHom.{u2, u1} M N _inst_1 _inst_2}, Iff (Eq.{max (succ u2) (succ u1)} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) f g) (forall (x : M), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2))) f x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2))) g x))
 Case conversion may be inaccurate. Consider using '#align monoid_hom.ext_iff MonoidHom.ext_iffₓ'. -/
 /-- Deprecated: use `fun_like.ext_iff` instead. -/
 @[to_additive "Deprecated: use `fun_like.ext_iff` instead."]
@@ -1179,7 +1179,7 @@ theorem MonoidHom.ext_iff [MulOneClass M] [MulOneClass N] {f g : M →* N} : f =
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulZeroOneClass.{u1} M] [_inst_2 : MulZeroOneClass.{u2} N] {f : MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2} {g : MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2}, Iff (Eq.{max (succ u2) (succ u1)} (MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) f g) (forall (x : M), Eq.{succ u2} N (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MonoidWithZeroHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f x) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MonoidWithZeroHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) g x))
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : MulZeroOneClass.{u2} M] [_inst_2 : MulZeroOneClass.{u1} N] {f : MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2} {g : MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2}, Iff (Eq.{max (succ u2) (succ u1)} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) f g) (forall (x : M), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M (MulZeroOneClass.toMulOneClass.{u2} M _inst_1)) (MulOneClass.toMul.{u1} N (MulZeroOneClass.toMulOneClass.{u1} N _inst_2)) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulZeroOneClass.toMulOneClass.{u2} M _inst_1) (MulZeroOneClass.toMulOneClass.{u1} N _inst_2) (MonoidWithZeroHomClass.toMonoidHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidWithZeroHom.monoidWithZeroHomClass.{u2, u1} M N _inst_1 _inst_2)))) f x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M (MulZeroOneClass.toMulOneClass.{u2} M _inst_1)) (MulOneClass.toMul.{u1} N (MulZeroOneClass.toMulOneClass.{u1} N _inst_2)) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulZeroOneClass.toMulOneClass.{u2} M _inst_1) (MulZeroOneClass.toMulOneClass.{u1} N _inst_2) (MonoidWithZeroHomClass.toMonoidHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidWithZeroHom.monoidWithZeroHomClass.{u2, u1} M N _inst_1 _inst_2)))) g x))
+  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : MulZeroOneClass.{u2} M] [_inst_2 : MulZeroOneClass.{u1} N] {f : MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2} {g : MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2}, Iff (Eq.{max (succ u2) (succ u1)} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) f g) (forall (x : M), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M (MulZeroOneClass.toMulOneClass.{u2} M _inst_1)) (MulOneClass.toMul.{u1} N (MulZeroOneClass.toMulOneClass.{u1} N _inst_2)) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulZeroOneClass.toMulOneClass.{u2} M _inst_1) (MulZeroOneClass.toMulOneClass.{u1} N _inst_2) (MonoidWithZeroHomClass.toMonoidHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidWithZeroHom.monoidWithZeroHomClass.{u2, u1} M N _inst_1 _inst_2)))) f x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M (MulZeroOneClass.toMulOneClass.{u2} M _inst_1)) (MulOneClass.toMul.{u1} N (MulZeroOneClass.toMulOneClass.{u1} N _inst_2)) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulZeroOneClass.toMulOneClass.{u2} M _inst_1) (MulZeroOneClass.toMulOneClass.{u1} N _inst_2) (MonoidWithZeroHomClass.toMonoidHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidWithZeroHom.monoidWithZeroHomClass.{u2, u1} M N _inst_1 _inst_2)))) g x))
 Case conversion may be inaccurate. Consider using '#align monoid_with_zero_hom.ext_iff MonoidWithZeroHom.ext_iffₓ'. -/
 /-- Deprecated: use `fun_like.ext_iff` instead. -/
 theorem MonoidWithZeroHom.ext_iff [MulZeroOneClass M] [MulZeroOneClass N] {f g : M →*₀ N} :
@@ -1205,7 +1205,7 @@ theorem OneHom.mk_coe [One M] [One N] (f : OneHom M N) (h1) : OneHom.mk f h1 = f
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] (f : MulHom.{u1, u2} M N _inst_1 _inst_2) (hmul : forall (x : M) (y : M), Eq.{succ u2} N (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MulHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MulHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MulHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f (HMul.hMul.{u1, u1, u1} M M M (instHMul.{u1} M _inst_1) x y)) (HMul.hMul.{u2, u2, u2} N N N (instHMul.{u2} N _inst_2) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MulHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MulHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MulHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f x) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MulHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MulHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MulHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f y))), Eq.{max (succ u2) (succ u1)} (MulHom.{u1, u2} M N _inst_1 _inst_2) (MulHom.mk.{u1, u2} M N _inst_1 _inst_2 (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MulHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MulHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MulHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f) hmul) f
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : Mul.{u2} M] [_inst_2 : Mul.{u1} N] (f : MulHom.{u2, u1} M N _inst_1 _inst_2) (hmul : forall (x : M) (y : M), Eq.{succ u1} N (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) f (HMul.hMul.{u2, u2, u2} M M M (instHMul.{u2} M _inst_1) x y)) (HMul.hMul.{u1, u1, u1} N N N (instHMul.{u1} N _inst_2) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) f x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) f y))), Eq.{max (succ u2) (succ u1)} (MulHom.{u2, u1} M N _inst_1 _inst_2) (MulHom.mk.{u2, u1} M N _inst_1 _inst_2 (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) f) hmul) f
+  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : Mul.{u2} M] [_inst_2 : Mul.{u1} N] (f : MulHom.{u2, u1} M N _inst_1 _inst_2) (hmul : forall (x : M) (y : M), Eq.{succ u1} N (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) f (HMul.hMul.{u2, u2, u2} M M M (instHMul.{u2} M _inst_1) x y)) (HMul.hMul.{u1, u1, u1} N N N (instHMul.{u1} N _inst_2) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) f x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) f y))), Eq.{max (succ u2) (succ u1)} (MulHom.{u2, u1} M N _inst_1 _inst_2) (MulHom.mk.{u2, u1} M N _inst_1 _inst_2 (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) f) hmul) f
 Case conversion may be inaccurate. Consider using '#align mul_hom.mk_coe MulHom.mk_coeₓ'. -/
 @[simp, to_additive]
 theorem MulHom.mk_coe [Mul M] [Mul N] (f : M →ₙ* N) (hmul) : MulHom.mk f hmul = f :=
@@ -1298,7 +1298,7 @@ theorem MulHom.coe_copy_eq {hM : Mul M} {hN : Mul N} (f : M →ₙ* N) (f' : M 
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} {hM : MulOneClass.{u1} M} {hN : MulOneClass.{u2} N} (f : MonoidHom.{u1, u2} M N hM hN) (f' : M -> N), (Eq.{max (succ u1) (succ u2)} (M -> N) f' (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} M N hM hN) (fun (_x : MonoidHom.{u1, u2} M N hM hN) => M -> N) (MonoidHom.hasCoeToFun.{u1, u2} M N hM hN) f)) -> (MonoidHom.{u1, u2} M N hM hN)
 but is expected to have type
-  forall {M : Type.{u1}} {N : Type.{u2}} {hM : MulOneClass.{u1} M} {hN : MulOneClass.{u2} N} (f : MonoidHom.{u1, u2} M N hM hN) (f' : M -> N), (Eq.{max (succ u1) (succ u2)} (M -> N) f' (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (MonoidHom.{u1, u2} M N hM hN) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) _x) (MulHomClass.toFunLike.{max u1 u2, u1, u2} (MonoidHom.{u1, u2} M N hM hN) M N (MulOneClass.toMul.{u1} M hM) (MulOneClass.toMul.{u2} N hN) (MonoidHomClass.toMulHomClass.{max u1 u2, u1, u2} (MonoidHom.{u1, u2} M N hM hN) M N hM hN (MonoidHom.monoidHomClass.{u1, u2} M N hM hN))) f)) -> (MonoidHom.{u1, u2} M N hM hN)
+  forall {M : Type.{u1}} {N : Type.{u2}} {hM : MulOneClass.{u1} M} {hN : MulOneClass.{u2} N} (f : MonoidHom.{u1, u2} M N hM hN) (f' : M -> N), (Eq.{max (succ u1) (succ u2)} (M -> N) f' (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (MonoidHom.{u1, u2} M N hM hN) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{max u1 u2, u1, u2} (MonoidHom.{u1, u2} M N hM hN) M N (MulOneClass.toMul.{u1} M hM) (MulOneClass.toMul.{u2} N hN) (MonoidHomClass.toMulHomClass.{max u1 u2, u1, u2} (MonoidHom.{u1, u2} M N hM hN) M N hM hN (MonoidHom.monoidHomClass.{u1, u2} M N hM hN))) f)) -> (MonoidHom.{u1, u2} M N hM hN)
 Case conversion may be inaccurate. Consider using '#align monoid_hom.copy MonoidHom.copyₓ'. -/
 /-- Copy of a `monoid_hom` with a new `to_fun` equal to the old one. Useful to fix
 definitional equalities. -/
@@ -1328,7 +1328,7 @@ theorem MonoidHom.copy_eq {hM : MulOneClass M} {hN : MulOneClass N} (f : M →*
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} {hM : MulZeroOneClass.{u1} M} {hN : MulZeroOneClass.{u2} N} (f : MonoidWithZeroHom.{u1, u2} M N hM hN) (f' : M -> N), (Eq.{max (succ u1) (succ u2)} (M -> N) f' (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidWithZeroHom.{u1, u2} M N hM hN) (fun (_x : MonoidWithZeroHom.{u1, u2} M N hM hN) => M -> N) (MonoidWithZeroHom.hasCoeToFun.{u1, u2} M N hM hN) f)) -> (MonoidHom.{u1, u2} M N (MulZeroOneClass.toMulOneClass.{u1} M hM) (MulZeroOneClass.toMulOneClass.{u2} N hN))
 but is expected to have type
-  forall {M : Type.{u1}} {N : Type.{u2}} {hM : MulZeroOneClass.{u1} M} {hN : MulZeroOneClass.{u2} N} (f : MonoidWithZeroHom.{u1, u2} M N hM hN) (f' : M -> N), (Eq.{max (succ u1) (succ u2)} (M -> N) f' (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (MonoidWithZeroHom.{u1, u2} M N hM hN) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) _x) (MulHomClass.toFunLike.{max u1 u2, u1, u2} (MonoidWithZeroHom.{u1, u2} M N hM hN) M N (MulOneClass.toMul.{u1} M (MulZeroOneClass.toMulOneClass.{u1} M hM)) (MulOneClass.toMul.{u2} N (MulZeroOneClass.toMulOneClass.{u2} N hN)) (MonoidHomClass.toMulHomClass.{max u1 u2, u1, u2} (MonoidWithZeroHom.{u1, u2} M N hM hN) M N (MulZeroOneClass.toMulOneClass.{u1} M hM) (MulZeroOneClass.toMulOneClass.{u2} N hN) (MonoidWithZeroHomClass.toMonoidHomClass.{max u1 u2, u1, u2} (MonoidWithZeroHom.{u1, u2} M N hM hN) M N hM hN (MonoidWithZeroHom.monoidWithZeroHomClass.{u1, u2} M N hM hN)))) f)) -> (MonoidHom.{u1, u2} M N (MulZeroOneClass.toMulOneClass.{u1} M hM) (MulZeroOneClass.toMulOneClass.{u2} N hN))
+  forall {M : Type.{u1}} {N : Type.{u2}} {hM : MulZeroOneClass.{u1} M} {hN : MulZeroOneClass.{u2} N} (f : MonoidWithZeroHom.{u1, u2} M N hM hN) (f' : M -> N), (Eq.{max (succ u1) (succ u2)} (M -> N) f' (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (MonoidWithZeroHom.{u1, u2} M N hM hN) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{max u1 u2, u1, u2} (MonoidWithZeroHom.{u1, u2} M N hM hN) M N (MulOneClass.toMul.{u1} M (MulZeroOneClass.toMulOneClass.{u1} M hM)) (MulOneClass.toMul.{u2} N (MulZeroOneClass.toMulOneClass.{u2} N hN)) (MonoidHomClass.toMulHomClass.{max u1 u2, u1, u2} (MonoidWithZeroHom.{u1, u2} M N hM hN) M N (MulZeroOneClass.toMulOneClass.{u1} M hM) (MulZeroOneClass.toMulOneClass.{u2} N hN) (MonoidWithZeroHomClass.toMonoidHomClass.{max u1 u2, u1, u2} (MonoidWithZeroHom.{u1, u2} M N hM hN) M N hM hN (MonoidWithZeroHom.monoidWithZeroHomClass.{u1, u2} M N hM hN)))) f)) -> (MonoidHom.{u1, u2} M N (MulZeroOneClass.toMulOneClass.{u1} M hM) (MulZeroOneClass.toMulOneClass.{u2} N hN))
 Case conversion may be inaccurate. Consider using '#align monoid_with_zero_hom.copy MonoidWithZeroHom.copyₓ'. -/
 /-- Copy of a `monoid_hom` with a new `to_fun` equal to the old one. Useful to fix
 definitional equalities. -/
@@ -1364,7 +1364,7 @@ protected theorem OneHom.map_one [One M] [One N] (f : OneHom M N) : f 1 = 1 :=
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N] (f : MonoidHom.{u1, u2} M N _inst_1 _inst_2), Eq.{succ u2} N (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MonoidHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MonoidHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f (OfNat.ofNat.{u1} M 1 (OfNat.mk.{u1} M 1 (One.one.{u1} M (MulOneClass.toHasOne.{u1} M _inst_1))))) (OfNat.ofNat.{u2} N 1 (OfNat.mk.{u2} N 1 (One.one.{u2} N (MulOneClass.toHasOne.{u2} N _inst_2))))
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u1} N] (f : MonoidHom.{u2, u1} M N _inst_1 _inst_2), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) (OfNat.ofNat.{u2} M 1 (One.toOfNat1.{u2} M (MulOneClass.toOne.{u2} M _inst_1)))) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2))) f (OfNat.ofNat.{u2} M 1 (One.toOfNat1.{u2} M (MulOneClass.toOne.{u2} M _inst_1)))) (OfNat.ofNat.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) (OfNat.ofNat.{u2} M 1 (One.toOfNat1.{u2} M (MulOneClass.toOne.{u2} M _inst_1)))) 1 (One.toOfNat1.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) (OfNat.ofNat.{u2} M 1 (One.toOfNat1.{u2} M (MulOneClass.toOne.{u2} M _inst_1)))) (MulOneClass.toOne.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) (OfNat.ofNat.{u2} M 1 (One.toOfNat1.{u2} M (MulOneClass.toOne.{u2} M _inst_1)))) _inst_2)))
+  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u1} N] (f : MonoidHom.{u2, u1} M N _inst_1 _inst_2), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) (OfNat.ofNat.{u2} M 1 (One.toOfNat1.{u2} M (MulOneClass.toOne.{u2} M _inst_1)))) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2))) f (OfNat.ofNat.{u2} M 1 (One.toOfNat1.{u2} M (MulOneClass.toOne.{u2} M _inst_1)))) (OfNat.ofNat.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) (OfNat.ofNat.{u2} M 1 (One.toOfNat1.{u2} M (MulOneClass.toOne.{u2} M _inst_1)))) 1 (One.toOfNat1.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) (OfNat.ofNat.{u2} M 1 (One.toOfNat1.{u2} M (MulOneClass.toOne.{u2} M _inst_1)))) (MulOneClass.toOne.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) (OfNat.ofNat.{u2} M 1 (One.toOfNat1.{u2} M (MulOneClass.toOne.{u2} M _inst_1)))) _inst_2)))
 Case conversion may be inaccurate. Consider using '#align monoid_hom.map_one MonoidHom.map_oneₓ'. -/
 /-- If `f` is a monoid homomorphism then `f 1 = 1`. -/
 @[to_additive]
@@ -1377,7 +1377,7 @@ protected theorem MonoidHom.map_one [MulOneClass M] [MulOneClass N] (f : M →*
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulZeroOneClass.{u1} M] [_inst_2 : MulZeroOneClass.{u2} N] (f : MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2), Eq.{succ u2} N (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MonoidWithZeroHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) 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} N 1 (OfNat.mk.{u2} N 1 (One.one.{u2} N (MulOneClass.toHasOne.{u2} N (MulZeroOneClass.toMulOneClass.{u2} N _inst_2)))))
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : MulZeroOneClass.{u2} M] [_inst_2 : MulZeroOneClass.{u1} N] (f : MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) (OfNat.ofNat.{u2} M 1 (One.toOfNat1.{u2} M (MulOneClass.toOne.{u2} M (MulZeroOneClass.toMulOneClass.{u2} M _inst_1))))) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M (MulZeroOneClass.toMulOneClass.{u2} M _inst_1)) (MulOneClass.toMul.{u1} N (MulZeroOneClass.toMulOneClass.{u1} N _inst_2)) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulZeroOneClass.toMulOneClass.{u2} M _inst_1) (MulZeroOneClass.toMulOneClass.{u1} N _inst_2) (MonoidWithZeroHomClass.toMonoidHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidWithZeroHom.monoidWithZeroHomClass.{u2, u1} M N _inst_1 _inst_2)))) f (OfNat.ofNat.{u2} M 1 (One.toOfNat1.{u2} M (MulOneClass.toOne.{u2} M (MulZeroOneClass.toMulOneClass.{u2} M _inst_1))))) (OfNat.ofNat.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) (OfNat.ofNat.{u2} M 1 (One.toOfNat1.{u2} M (MulOneClass.toOne.{u2} M (MulZeroOneClass.toMulOneClass.{u2} M _inst_1))))) 1 (One.toOfNat1.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) (OfNat.ofNat.{u2} M 1 (One.toOfNat1.{u2} M (MulOneClass.toOne.{u2} M (MulZeroOneClass.toMulOneClass.{u2} M _inst_1))))) (MulOneClass.toOne.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) (OfNat.ofNat.{u2} M 1 (One.toOfNat1.{u2} M (MulOneClass.toOne.{u2} M (MulZeroOneClass.toMulOneClass.{u2} M _inst_1))))) (MulZeroOneClass.toMulOneClass.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) (OfNat.ofNat.{u2} M 1 (One.toOfNat1.{u2} M (MulOneClass.toOne.{u2} M (MulZeroOneClass.toMulOneClass.{u2} M _inst_1))))) _inst_2))))
+  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : MulZeroOneClass.{u2} M] [_inst_2 : MulZeroOneClass.{u1} N] (f : MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) (OfNat.ofNat.{u2} M 1 (One.toOfNat1.{u2} M (MulOneClass.toOne.{u2} M (MulZeroOneClass.toMulOneClass.{u2} M _inst_1))))) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M (MulZeroOneClass.toMulOneClass.{u2} M _inst_1)) (MulOneClass.toMul.{u1} N (MulZeroOneClass.toMulOneClass.{u1} N _inst_2)) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulZeroOneClass.toMulOneClass.{u2} M _inst_1) (MulZeroOneClass.toMulOneClass.{u1} N _inst_2) (MonoidWithZeroHomClass.toMonoidHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidWithZeroHom.monoidWithZeroHomClass.{u2, u1} M N _inst_1 _inst_2)))) f (OfNat.ofNat.{u2} M 1 (One.toOfNat1.{u2} M (MulOneClass.toOne.{u2} M (MulZeroOneClass.toMulOneClass.{u2} M _inst_1))))) (OfNat.ofNat.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) (OfNat.ofNat.{u2} M 1 (One.toOfNat1.{u2} M (MulOneClass.toOne.{u2} M (MulZeroOneClass.toMulOneClass.{u2} M _inst_1))))) 1 (One.toOfNat1.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) (OfNat.ofNat.{u2} M 1 (One.toOfNat1.{u2} M (MulOneClass.toOne.{u2} M (MulZeroOneClass.toMulOneClass.{u2} M _inst_1))))) (MulOneClass.toOne.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) (OfNat.ofNat.{u2} M 1 (One.toOfNat1.{u2} M (MulOneClass.toOne.{u2} M (MulZeroOneClass.toMulOneClass.{u2} M _inst_1))))) (MulZeroOneClass.toMulOneClass.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) (OfNat.ofNat.{u2} M 1 (One.toOfNat1.{u2} M (MulOneClass.toOne.{u2} M (MulZeroOneClass.toMulOneClass.{u2} M _inst_1))))) _inst_2))))
 Case conversion may be inaccurate. Consider using '#align monoid_with_zero_hom.map_one MonoidWithZeroHom.map_oneₓ'. -/
 protected theorem MonoidWithZeroHom.map_one [MulZeroOneClass M] [MulZeroOneClass N] (f : M →*₀ N) :
     f 1 = 1 :=
@@ -1391,7 +1391,7 @@ add_decl_doc AddMonoidHom.map_zero
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulZeroOneClass.{u1} M] [_inst_2 : MulZeroOneClass.{u2} N] (f : MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2), Eq.{succ u2} N (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MonoidWithZeroHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) 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} N 0 (OfNat.mk.{u2} N 0 (Zero.zero.{u2} N (MulZeroClass.toHasZero.{u2} N (MulZeroOneClass.toMulZeroClass.{u2} N _inst_2)))))
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : MulZeroOneClass.{u2} M] [_inst_2 : MulZeroOneClass.{u1} N] (f : MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) (OfNat.ofNat.{u2} M 0 (Zero.toOfNat0.{u2} M (MulZeroOneClass.toZero.{u2} M _inst_1)))) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M (MulZeroOneClass.toMulOneClass.{u2} M _inst_1)) (MulOneClass.toMul.{u1} N (MulZeroOneClass.toMulOneClass.{u1} N _inst_2)) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulZeroOneClass.toMulOneClass.{u2} M _inst_1) (MulZeroOneClass.toMulOneClass.{u1} N _inst_2) (MonoidWithZeroHomClass.toMonoidHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidWithZeroHom.monoidWithZeroHomClass.{u2, u1} M N _inst_1 _inst_2)))) f (OfNat.ofNat.{u2} M 0 (Zero.toOfNat0.{u2} M (MulZeroOneClass.toZero.{u2} M _inst_1)))) (OfNat.ofNat.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) (OfNat.ofNat.{u2} M 0 (Zero.toOfNat0.{u2} M (MulZeroOneClass.toZero.{u2} M _inst_1)))) 0 (Zero.toOfNat0.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) (OfNat.ofNat.{u2} M 0 (Zero.toOfNat0.{u2} M (MulZeroOneClass.toZero.{u2} M _inst_1)))) (MulZeroOneClass.toZero.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) (OfNat.ofNat.{u2} M 0 (Zero.toOfNat0.{u2} M (MulZeroOneClass.toZero.{u2} M _inst_1)))) _inst_2)))
+  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : MulZeroOneClass.{u2} M] [_inst_2 : MulZeroOneClass.{u1} N] (f : MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) (OfNat.ofNat.{u2} M 0 (Zero.toOfNat0.{u2} M (MulZeroOneClass.toZero.{u2} M _inst_1)))) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M (MulZeroOneClass.toMulOneClass.{u2} M _inst_1)) (MulOneClass.toMul.{u1} N (MulZeroOneClass.toMulOneClass.{u1} N _inst_2)) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulZeroOneClass.toMulOneClass.{u2} M _inst_1) (MulZeroOneClass.toMulOneClass.{u1} N _inst_2) (MonoidWithZeroHomClass.toMonoidHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidWithZeroHom.monoidWithZeroHomClass.{u2, u1} M N _inst_1 _inst_2)))) f (OfNat.ofNat.{u2} M 0 (Zero.toOfNat0.{u2} M (MulZeroOneClass.toZero.{u2} M _inst_1)))) (OfNat.ofNat.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) (OfNat.ofNat.{u2} M 0 (Zero.toOfNat0.{u2} M (MulZeroOneClass.toZero.{u2} M _inst_1)))) 0 (Zero.toOfNat0.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) (OfNat.ofNat.{u2} M 0 (Zero.toOfNat0.{u2} M (MulZeroOneClass.toZero.{u2} M _inst_1)))) (MulZeroOneClass.toZero.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) (OfNat.ofNat.{u2} M 0 (Zero.toOfNat0.{u2} M (MulZeroOneClass.toZero.{u2} M _inst_1)))) _inst_2)))
 Case conversion may be inaccurate. Consider using '#align monoid_with_zero_hom.map_zero MonoidWithZeroHom.map_zeroₓ'. -/
 protected theorem MonoidWithZeroHom.map_zero [MulZeroOneClass M] [MulZeroOneClass N] (f : M →*₀ N) :
     f 0 = 0 :=
@@ -1402,7 +1402,7 @@ protected theorem MonoidWithZeroHom.map_zero [MulZeroOneClass M] [MulZeroOneClas
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] (f : MulHom.{u1, u2} M N _inst_1 _inst_2) (a : M) (b : M), Eq.{succ u2} N (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MulHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MulHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MulHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f (HMul.hMul.{u1, u1, u1} M M M (instHMul.{u1} M _inst_1) a b)) (HMul.hMul.{u2, u2, u2} N N N (instHMul.{u2} N _inst_2) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MulHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MulHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MulHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f a) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MulHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MulHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MulHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f b))
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : Mul.{u2} M] [_inst_2 : Mul.{u1} N] (f : MulHom.{u2, u1} M N _inst_1 _inst_2) (a : M) (b : M), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) (HMul.hMul.{u2, u2, u2} M M M (instHMul.{u2} M _inst_1) a b)) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) f (HMul.hMul.{u2, u2, u2} M M M (instHMul.{u2} M _inst_1) a b)) (HMul.hMul.{u1, u1, u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) a) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) b) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) a) (instHMul.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) a) _inst_2) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) f a) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) f b))
+  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : Mul.{u2} M] [_inst_2 : Mul.{u1} N] (f : MulHom.{u2, u1} M N _inst_1 _inst_2) (a : M) (b : M), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) (HMul.hMul.{u2, u2, u2} M M M (instHMul.{u2} M _inst_1) a b)) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) f (HMul.hMul.{u2, u2, u2} M M M (instHMul.{u2} M _inst_1) a b)) (HMul.hMul.{u1, u1, u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) a) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) b) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) a) (instHMul.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) a) _inst_2) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) f a) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u2, u1} M N _inst_1 _inst_2)) f b))
 Case conversion may be inaccurate. Consider using '#align mul_hom.map_mul MulHom.map_mulₓ'. -/
 @[to_additive]
 protected theorem MulHom.map_mul [Mul M] [Mul N] (f : M →ₙ* N) (a b : M) : f (a * b) = f a * f b :=
@@ -1414,7 +1414,7 @@ protected theorem MulHom.map_mul [Mul M] [Mul N] (f : M →ₙ* N) (a b : M) : f
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N] (f : MonoidHom.{u1, u2} M N _inst_1 _inst_2) (a : M) (b : M), Eq.{succ u2} N (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MonoidHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MonoidHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f (HMul.hMul.{u1, u1, u1} M M M (instHMul.{u1} M (MulOneClass.toHasMul.{u1} M _inst_1)) a b)) (HMul.hMul.{u2, u2, u2} N N N (instHMul.{u2} N (MulOneClass.toHasMul.{u2} N _inst_2)) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MonoidHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MonoidHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f a) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MonoidHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MonoidHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f b))
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u1} N] (f : MonoidHom.{u2, u1} M N _inst_1 _inst_2) (a : M) (b : M), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) (HMul.hMul.{u2, u2, u2} M M M (instHMul.{u2} M (MulOneClass.toMul.{u2} M _inst_1)) a b)) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2))) f (HMul.hMul.{u2, u2, u2} M M M (instHMul.{u2} M (MulOneClass.toMul.{u2} M _inst_1)) a b)) (HMul.hMul.{u1, u1, u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) a) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) b) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) a) (instHMul.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) a) (MulOneClass.toMul.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) a) _inst_2)) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2))) f a) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2))) f b))
+  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u1} N] (f : MonoidHom.{u2, u1} M N _inst_1 _inst_2) (a : M) (b : M), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) (HMul.hMul.{u2, u2, u2} M M M (instHMul.{u2} M (MulOneClass.toMul.{u2} M _inst_1)) a b)) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2))) f (HMul.hMul.{u2, u2, u2} M M M (instHMul.{u2} M (MulOneClass.toMul.{u2} M _inst_1)) a b)) (HMul.hMul.{u1, u1, u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) a) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) b) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) a) (instHMul.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) a) (MulOneClass.toMul.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) a) _inst_2)) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2))) f a) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2))) f b))
 Case conversion may be inaccurate. Consider using '#align monoid_hom.map_mul MonoidHom.map_mulₓ'. -/
 /-- If `f` is a monoid homomorphism then `f (a * b) = f a * f b`. -/
 @[to_additive]
@@ -1428,7 +1428,7 @@ protected theorem MonoidHom.map_mul [MulOneClass M] [MulOneClass N] (f : M →*
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulZeroOneClass.{u1} M] [_inst_2 : MulZeroOneClass.{u2} N] (f : MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) (a : M) (b : M), Eq.{succ u2} N (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MonoidWithZeroHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) 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} N N N (instHMul.{u2} N (MulZeroClass.toHasMul.{u2} N (MulZeroOneClass.toMulZeroClass.{u2} N _inst_2))) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MonoidWithZeroHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f a) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MonoidWithZeroHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f b))
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : MulZeroOneClass.{u2} M] [_inst_2 : MulZeroOneClass.{u1} N] (f : MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) (a : M) (b : M), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) (HMul.hMul.{u2, u2, u2} M M M (instHMul.{u2} M (MulZeroClass.toMul.{u2} M (MulZeroOneClass.toMulZeroClass.{u2} M _inst_1))) a b)) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M (MulZeroOneClass.toMulOneClass.{u2} M _inst_1)) (MulOneClass.toMul.{u1} N (MulZeroOneClass.toMulOneClass.{u1} N _inst_2)) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulZeroOneClass.toMulOneClass.{u2} M _inst_1) (MulZeroOneClass.toMulOneClass.{u1} N _inst_2) (MonoidWithZeroHomClass.toMonoidHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidWithZeroHom.monoidWithZeroHomClass.{u2, u1} M N _inst_1 _inst_2)))) f (HMul.hMul.{u2, u2, u2} M M M (instHMul.{u2} M (MulZeroClass.toMul.{u2} M (MulZeroOneClass.toMulZeroClass.{u2} M _inst_1))) a b)) (HMul.hMul.{u1, u1, u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) a) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) b) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) a) (instHMul.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) a) (MulZeroClass.toMul.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) a) (MulZeroOneClass.toMulZeroClass.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) a) _inst_2))) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M (MulZeroOneClass.toMulOneClass.{u2} M _inst_1)) (MulOneClass.toMul.{u1} N (MulZeroOneClass.toMulOneClass.{u1} N _inst_2)) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulZeroOneClass.toMulOneClass.{u2} M _inst_1) (MulZeroOneClass.toMulOneClass.{u1} N _inst_2) (MonoidWithZeroHomClass.toMonoidHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidWithZeroHom.monoidWithZeroHomClass.{u2, u1} M N _inst_1 _inst_2)))) f a) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M (MulZeroOneClass.toMulOneClass.{u2} M _inst_1)) (MulOneClass.toMul.{u1} N (MulZeroOneClass.toMulOneClass.{u1} N _inst_2)) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulZeroOneClass.toMulOneClass.{u2} M _inst_1) (MulZeroOneClass.toMulOneClass.{u1} N _inst_2) (MonoidWithZeroHomClass.toMonoidHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidWithZeroHom.monoidWithZeroHomClass.{u2, u1} M N _inst_1 _inst_2)))) f b))
+  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : MulZeroOneClass.{u2} M] [_inst_2 : MulZeroOneClass.{u1} N] (f : MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) (a : M) (b : M), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) (HMul.hMul.{u2, u2, u2} M M M (instHMul.{u2} M (MulZeroClass.toMul.{u2} M (MulZeroOneClass.toMulZeroClass.{u2} M _inst_1))) a b)) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M (MulZeroOneClass.toMulOneClass.{u2} M _inst_1)) (MulOneClass.toMul.{u1} N (MulZeroOneClass.toMulOneClass.{u1} N _inst_2)) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulZeroOneClass.toMulOneClass.{u2} M _inst_1) (MulZeroOneClass.toMulOneClass.{u1} N _inst_2) (MonoidWithZeroHomClass.toMonoidHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidWithZeroHom.monoidWithZeroHomClass.{u2, u1} M N _inst_1 _inst_2)))) f (HMul.hMul.{u2, u2, u2} M M M (instHMul.{u2} M (MulZeroClass.toMul.{u2} M (MulZeroOneClass.toMulZeroClass.{u2} M _inst_1))) a b)) (HMul.hMul.{u1, u1, u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) a) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) b) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) a) (instHMul.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) a) (MulZeroClass.toMul.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) a) (MulZeroOneClass.toMulZeroClass.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) a) _inst_2))) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M (MulZeroOneClass.toMulOneClass.{u2} M _inst_1)) (MulOneClass.toMul.{u1} N (MulZeroOneClass.toMulOneClass.{u1} N _inst_2)) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulZeroOneClass.toMulOneClass.{u2} M _inst_1) (MulZeroOneClass.toMulOneClass.{u1} N _inst_2) (MonoidWithZeroHomClass.toMonoidHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidWithZeroHom.monoidWithZeroHomClass.{u2, u1} M N _inst_1 _inst_2)))) f a) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M (MulZeroOneClass.toMulOneClass.{u2} M _inst_1)) (MulOneClass.toMul.{u1} N (MulZeroOneClass.toMulOneClass.{u1} N _inst_2)) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N (MulZeroOneClass.toMulOneClass.{u2} M _inst_1) (MulZeroOneClass.toMulOneClass.{u1} N _inst_2) (MonoidWithZeroHomClass.toMonoidHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidWithZeroHom.monoidWithZeroHomClass.{u2, u1} M N _inst_1 _inst_2)))) f b))
 Case conversion may be inaccurate. Consider using '#align monoid_with_zero_hom.map_mul MonoidWithZeroHom.map_mulₓ'. -/
 protected theorem MonoidWithZeroHom.map_mul [MulZeroOneClass M] [MulZeroOneClass N] (f : M →*₀ N)
     (a b : M) : f (a * b) = f a * f b :=
@@ -1448,7 +1448,7 @@ include mM mN
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} {F : Type.{u3}} {mM : MulOneClass.{u1} M} {mN : MulOneClass.{u2} N} [_inst_1 : MonoidHomClass.{u3, u1, u2} F M N mM mN] (f : F) {x : M}, (Exists.{succ u1} M (fun (y : M) => Eq.{succ u1} M (HMul.hMul.{u1, u1, u1} M M M (instHMul.{u1} M (MulOneClass.toHasMul.{u1} M mM)) x y) (OfNat.ofNat.{u1} M 1 (OfNat.mk.{u1} M 1 (One.one.{u1} M (MulOneClass.toHasOne.{u1} M mM)))))) -> (Exists.{succ u2} N (fun (y : N) => Eq.{succ u2} N (HMul.hMul.{u2, u2, u2} N N N (instHMul.{u2} N (MulOneClass.toHasMul.{u2} N mN)) (coeFn.{succ u3, max (succ u1) (succ u2)} F (fun (_x : F) => M -> N) (FunLike.hasCoeToFun.{succ u3, succ u1, succ u2} F M (fun (_x : M) => N) (MulHomClass.toFunLike.{u3, u1, u2} F M N (MulOneClass.toHasMul.{u1} M mM) (MulOneClass.toHasMul.{u2} N mN) (MonoidHomClass.toMulHomClass.{u3, u1, u2} F M N mM mN _inst_1))) f x) y) (OfNat.ofNat.{u2} N 1 (OfNat.mk.{u2} N 1 (One.one.{u2} N (MulOneClass.toHasOne.{u2} N mN))))))
 but is expected to have type
-  forall {M : Type.{u3}} {N : Type.{u2}} {F : Type.{u1}} {mM : MulOneClass.{u3} M} {mN : MulOneClass.{u2} N} [_inst_1 : MonoidHomClass.{u1, u3, u2} F M N mM mN] (f : F) {x : M}, (Exists.{succ u3} M (fun (y : M) => Eq.{succ u3} M (HMul.hMul.{u3, u3, u3} M M M (instHMul.{u3} M (MulOneClass.toMul.{u3} M mM)) x y) (OfNat.ofNat.{u3} M 1 (One.toOfNat1.{u3} M (MulOneClass.toOne.{u3} M mM))))) -> (Exists.{succ u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) x) (fun (y : (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) x) => Eq.{succ u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) x) (HMul.hMul.{u2, u2, u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) x) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) x) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) x) (instHMul.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) x) (MulOneClass.toMul.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) x) mN)) (FunLike.coe.{succ u1, succ u3, succ u2} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) _x) (MulHomClass.toFunLike.{u1, u3, u2} F M N (MulOneClass.toMul.{u3} M mM) (MulOneClass.toMul.{u2} N mN) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F M N mM mN _inst_1)) f x) y) (OfNat.ofNat.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) x) 1 (One.toOfNat1.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) x) (MulOneClass.toOne.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) x) mN)))))
+  forall {M : Type.{u3}} {N : Type.{u2}} {F : Type.{u1}} {mM : MulOneClass.{u3} M} {mN : MulOneClass.{u2} N} [_inst_1 : MonoidHomClass.{u1, u3, u2} F M N mM mN] (f : F) {x : M}, (Exists.{succ u3} M (fun (y : M) => Eq.{succ u3} M (HMul.hMul.{u3, u3, u3} M M M (instHMul.{u3} M (MulOneClass.toMul.{u3} M mM)) x y) (OfNat.ofNat.{u3} M 1 (One.toOfNat1.{u3} M (MulOneClass.toOne.{u3} M mM))))) -> (Exists.{succ u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) x) (fun (y : (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) x) => Eq.{succ u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) x) (HMul.hMul.{u2, u2, u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) x) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) x) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) x) (instHMul.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) x) (MulOneClass.toMul.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) x) mN)) (FunLike.coe.{succ u1, succ u3, succ u2} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{u1, u3, u2} F M N (MulOneClass.toMul.{u3} M mM) (MulOneClass.toMul.{u2} N mN) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F M N mM mN _inst_1)) f x) y) (OfNat.ofNat.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) x) 1 (One.toOfNat1.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) x) (MulOneClass.toOne.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) x) mN)))))
 Case conversion may be inaccurate. Consider using '#align monoid_hom.map_exists_right_inv MonoidHom.map_exists_right_invₓ'. -/
 /-- Given a monoid homomorphism `f : M →* N` and an element `x : M`, if `x` has a right inverse,
 then `f x` has a right inverse too. For elements invertible on both sides see `is_unit.map`. -/
@@ -1464,7 +1464,7 @@ theorem map_exists_right_inv (f : F) {x : M} (hx : ∃ y, x * y = 1) : ∃ y, f
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} {F : Type.{u3}} {mM : MulOneClass.{u1} M} {mN : MulOneClass.{u2} N} [_inst_1 : MonoidHomClass.{u3, u1, u2} F M N mM mN] (f : F) {x : M}, (Exists.{succ u1} M (fun (y : M) => Eq.{succ u1} M (HMul.hMul.{u1, u1, u1} M M M (instHMul.{u1} M (MulOneClass.toHasMul.{u1} M mM)) y x) (OfNat.ofNat.{u1} M 1 (OfNat.mk.{u1} M 1 (One.one.{u1} M (MulOneClass.toHasOne.{u1} M mM)))))) -> (Exists.{succ u2} N (fun (y : N) => Eq.{succ u2} N (HMul.hMul.{u2, u2, u2} N N N (instHMul.{u2} N (MulOneClass.toHasMul.{u2} N mN)) y (coeFn.{succ u3, max (succ u1) (succ u2)} F (fun (_x : F) => M -> N) (FunLike.hasCoeToFun.{succ u3, succ u1, succ u2} F M (fun (_x : M) => N) (MulHomClass.toFunLike.{u3, u1, u2} F M N (MulOneClass.toHasMul.{u1} M mM) (MulOneClass.toHasMul.{u2} N mN) (MonoidHomClass.toMulHomClass.{u3, u1, u2} F M N mM mN _inst_1))) f x)) (OfNat.ofNat.{u2} N 1 (OfNat.mk.{u2} N 1 (One.one.{u2} N (MulOneClass.toHasOne.{u2} N mN))))))
 but is expected to have type
-  forall {M : Type.{u3}} {N : Type.{u2}} {F : Type.{u1}} {mM : MulOneClass.{u3} M} {mN : MulOneClass.{u2} N} [_inst_1 : MonoidHomClass.{u1, u3, u2} F M N mM mN] (f : F) {x : M}, (Exists.{succ u3} M (fun (y : M) => Eq.{succ u3} M (HMul.hMul.{u3, u3, u3} M M M (instHMul.{u3} M (MulOneClass.toMul.{u3} M mM)) y x) (OfNat.ofNat.{u3} M 1 (One.toOfNat1.{u3} M (MulOneClass.toOne.{u3} M mM))))) -> (Exists.{succ u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) x) (fun (y : (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) x) => Eq.{succ u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) x) (HMul.hMul.{u2, u2, u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) x) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) x) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) x) (instHMul.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) x) (MulOneClass.toMul.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) x) mN)) y (FunLike.coe.{succ u1, succ u3, succ u2} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) _x) (MulHomClass.toFunLike.{u1, u3, u2} F M N (MulOneClass.toMul.{u3} M mM) (MulOneClass.toMul.{u2} N mN) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F M N mM mN _inst_1)) f x)) (OfNat.ofNat.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) x) 1 (One.toOfNat1.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) x) (MulOneClass.toOne.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) x) mN)))))
+  forall {M : Type.{u3}} {N : Type.{u2}} {F : Type.{u1}} {mM : MulOneClass.{u3} M} {mN : MulOneClass.{u2} N} [_inst_1 : MonoidHomClass.{u1, u3, u2} F M N mM mN] (f : F) {x : M}, (Exists.{succ u3} M (fun (y : M) => Eq.{succ u3} M (HMul.hMul.{u3, u3, u3} M M M (instHMul.{u3} M (MulOneClass.toMul.{u3} M mM)) y x) (OfNat.ofNat.{u3} M 1 (One.toOfNat1.{u3} M (MulOneClass.toOne.{u3} M mM))))) -> (Exists.{succ u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) x) (fun (y : (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) x) => Eq.{succ u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) x) (HMul.hMul.{u2, u2, u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) x) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) x) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) x) (instHMul.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) x) (MulOneClass.toMul.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) x) mN)) y (FunLike.coe.{succ u1, succ u3, succ u2} F M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{u1, u3, u2} F M N (MulOneClass.toMul.{u3} M mM) (MulOneClass.toMul.{u2} N mN) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F M N mM mN _inst_1)) f x)) (OfNat.ofNat.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) x) 1 (One.toOfNat1.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) x) (MulOneClass.toOne.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) x) mN)))))
 Case conversion may be inaccurate. Consider using '#align monoid_hom.map_exists_left_inv MonoidHom.map_exists_left_invₓ'. -/
 /-- Given a monoid homomorphism `f : M →* N` and an element `x : M`, if `x` has a left inverse,
 then `f x` has a left inverse too. For elements invertible on both sides see `is_unit.map`. -/
@@ -1498,7 +1498,7 @@ def invMonoidHom : α →* α where
 lean 3 declaration is
   forall {α : Type.{u1}} [_inst_1 : DivisionCommMonoid.{u1} α], Eq.{succ u1} ((fun (_x : MonoidHom.{u1, u1} α α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (DivisionMonoid.toDivInvMonoid.{u1} α (DivisionCommMonoid.toDivisionMonoid.{u1} α _inst_1)))) (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (DivisionMonoid.toDivInvMonoid.{u1} α (DivisionCommMonoid.toDivisionMonoid.{u1} α _inst_1))))) => α -> α) (invMonoidHom.{u1} α _inst_1)) (coeFn.{succ u1, succ u1} (MonoidHom.{u1, u1} α α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (DivisionMonoid.toDivInvMonoid.{u1} α (DivisionCommMonoid.toDivisionMonoid.{u1} α _inst_1)))) (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (DivisionMonoid.toDivInvMonoid.{u1} α (DivisionCommMonoid.toDivisionMonoid.{u1} α _inst_1))))) (fun (_x : MonoidHom.{u1, u1} α α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (DivisionMonoid.toDivInvMonoid.{u1} α (DivisionCommMonoid.toDivisionMonoid.{u1} α _inst_1)))) (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (DivisionMonoid.toDivInvMonoid.{u1} α (DivisionCommMonoid.toDivisionMonoid.{u1} α _inst_1))))) => α -> α) (MonoidHom.hasCoeToFun.{u1, u1} α α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (DivisionMonoid.toDivInvMonoid.{u1} α (DivisionCommMonoid.toDivisionMonoid.{u1} α _inst_1)))) (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (DivisionMonoid.toDivInvMonoid.{u1} α (DivisionCommMonoid.toDivisionMonoid.{u1} α _inst_1))))) (invMonoidHom.{u1} α _inst_1)) (Inv.inv.{u1} α (DivInvMonoid.toHasInv.{u1} α (DivisionMonoid.toDivInvMonoid.{u1} α (DivisionCommMonoid.toDivisionMonoid.{u1} α _inst_1))))
 but is expected to have type
-  forall {α : Type.{u1}} [_inst_1 : DivisionCommMonoid.{u1} α], Eq.{succ u1} (forall (a : α), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : α) => α) a) (FunLike.coe.{succ u1, succ u1, succ u1} (MonoidHom.{u1, u1} α α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (DivisionMonoid.toDivInvMonoid.{u1} α (DivisionCommMonoid.toDivisionMonoid.{u1} α _inst_1)))) (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (DivisionMonoid.toDivInvMonoid.{u1} α (DivisionCommMonoid.toDivisionMonoid.{u1} α _inst_1))))) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : α) => α) _x) (MulHomClass.toFunLike.{u1, u1, u1} (MonoidHom.{u1, u1} α α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (DivisionMonoid.toDivInvMonoid.{u1} α (DivisionCommMonoid.toDivisionMonoid.{u1} α _inst_1)))) (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (DivisionMonoid.toDivInvMonoid.{u1} α (DivisionCommMonoid.toDivisionMonoid.{u1} α _inst_1))))) α α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (DivisionMonoid.toDivInvMonoid.{u1} α (DivisionCommMonoid.toDivisionMonoid.{u1} α _inst_1))))) (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (DivisionMonoid.toDivInvMonoid.{u1} α (DivisionCommMonoid.toDivisionMonoid.{u1} α _inst_1))))) (MonoidHomClass.toMulHomClass.{u1, u1, u1} (MonoidHom.{u1, u1} α α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (DivisionMonoid.toDivInvMonoid.{u1} α (DivisionCommMonoid.toDivisionMonoid.{u1} α _inst_1)))) (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (DivisionMonoid.toDivInvMonoid.{u1} α (DivisionCommMonoid.toDivisionMonoid.{u1} α _inst_1))))) α α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (DivisionMonoid.toDivInvMonoid.{u1} α (DivisionCommMonoid.toDivisionMonoid.{u1} α _inst_1)))) (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (DivisionMonoid.toDivInvMonoid.{u1} α (DivisionCommMonoid.toDivisionMonoid.{u1} α _inst_1)))) (MonoidHom.monoidHomClass.{u1, u1} α α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (DivisionMonoid.toDivInvMonoid.{u1} α (DivisionCommMonoid.toDivisionMonoid.{u1} α _inst_1)))) (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (DivisionMonoid.toDivInvMonoid.{u1} α (DivisionCommMonoid.toDivisionMonoid.{u1} α _inst_1))))))) (invMonoidHom.{u1} α _inst_1)) (Inv.inv.{u1} α (InvOneClass.toInv.{u1} α (DivInvOneMonoid.toInvOneClass.{u1} α (DivisionMonoid.toDivInvOneMonoid.{u1} α (DivisionCommMonoid.toDivisionMonoid.{u1} α _inst_1)))))
+  forall {α : Type.{u1}} [_inst_1 : DivisionCommMonoid.{u1} α], Eq.{succ u1} (forall (a : α), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : α) => α) a) (FunLike.coe.{succ u1, succ u1, succ u1} (MonoidHom.{u1, u1} α α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (DivisionMonoid.toDivInvMonoid.{u1} α (DivisionCommMonoid.toDivisionMonoid.{u1} α _inst_1)))) (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (DivisionMonoid.toDivInvMonoid.{u1} α (DivisionCommMonoid.toDivisionMonoid.{u1} α _inst_1))))) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : α) => α) _x) (MulHomClass.toFunLike.{u1, u1, u1} (MonoidHom.{u1, u1} α α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (DivisionMonoid.toDivInvMonoid.{u1} α (DivisionCommMonoid.toDivisionMonoid.{u1} α _inst_1)))) (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (DivisionMonoid.toDivInvMonoid.{u1} α (DivisionCommMonoid.toDivisionMonoid.{u1} α _inst_1))))) α α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (DivisionMonoid.toDivInvMonoid.{u1} α (DivisionCommMonoid.toDivisionMonoid.{u1} α _inst_1))))) (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (DivisionMonoid.toDivInvMonoid.{u1} α (DivisionCommMonoid.toDivisionMonoid.{u1} α _inst_1))))) (MonoidHomClass.toMulHomClass.{u1, u1, u1} (MonoidHom.{u1, u1} α α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (DivisionMonoid.toDivInvMonoid.{u1} α (DivisionCommMonoid.toDivisionMonoid.{u1} α _inst_1)))) (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (DivisionMonoid.toDivInvMonoid.{u1} α (DivisionCommMonoid.toDivisionMonoid.{u1} α _inst_1))))) α α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (DivisionMonoid.toDivInvMonoid.{u1} α (DivisionCommMonoid.toDivisionMonoid.{u1} α _inst_1)))) (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (DivisionMonoid.toDivInvMonoid.{u1} α (DivisionCommMonoid.toDivisionMonoid.{u1} α _inst_1)))) (MonoidHom.monoidHomClass.{u1, u1} α α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (DivisionMonoid.toDivInvMonoid.{u1} α (DivisionCommMonoid.toDivisionMonoid.{u1} α _inst_1)))) (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (DivisionMonoid.toDivInvMonoid.{u1} α (DivisionCommMonoid.toDivisionMonoid.{u1} α _inst_1))))))) (invMonoidHom.{u1} α _inst_1)) (Inv.inv.{u1} α (InvOneClass.toInv.{u1} α (DivInvOneMonoid.toInvOneClass.{u1} α (DivisionMonoid.toDivInvOneMonoid.{u1} α (DivisionCommMonoid.toDivisionMonoid.{u1} α _inst_1)))))
 Case conversion may be inaccurate. Consider using '#align coe_inv_monoid_hom coe_invMonoidHomₓ'. -/
 @[simp]
 theorem coe_invMonoidHom : (invMonoidHom : α → α) = Inv.inv :=
@@ -1509,7 +1509,7 @@ theorem coe_invMonoidHom : (invMonoidHom : α → α) = Inv.inv :=
 lean 3 declaration is
   forall {α : Type.{u1}} [_inst_1 : DivisionCommMonoid.{u1} α] (a : α), Eq.{succ u1} α (coeFn.{succ u1, succ u1} (MonoidHom.{u1, u1} α α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (DivisionMonoid.toDivInvMonoid.{u1} α (DivisionCommMonoid.toDivisionMonoid.{u1} α _inst_1)))) (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (DivisionMonoid.toDivInvMonoid.{u1} α (DivisionCommMonoid.toDivisionMonoid.{u1} α _inst_1))))) (fun (_x : MonoidHom.{u1, u1} α α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (DivisionMonoid.toDivInvMonoid.{u1} α (DivisionCommMonoid.toDivisionMonoid.{u1} α _inst_1)))) (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (DivisionMonoid.toDivInvMonoid.{u1} α (DivisionCommMonoid.toDivisionMonoid.{u1} α _inst_1))))) => α -> α) (MonoidHom.hasCoeToFun.{u1, u1} α α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (DivisionMonoid.toDivInvMonoid.{u1} α (DivisionCommMonoid.toDivisionMonoid.{u1} α _inst_1)))) (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (DivisionMonoid.toDivInvMonoid.{u1} α (DivisionCommMonoid.toDivisionMonoid.{u1} α _inst_1))))) (invMonoidHom.{u1} α _inst_1) a) (Inv.inv.{u1} α (DivInvMonoid.toHasInv.{u1} α (DivisionMonoid.toDivInvMonoid.{u1} α (DivisionCommMonoid.toDivisionMonoid.{u1} α _inst_1))) a)
 but is expected to have type
-  forall {α : Type.{u1}} [_inst_1 : DivisionCommMonoid.{u1} α] (a : α), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : α) => α) a) (FunLike.coe.{succ u1, succ u1, succ u1} (MonoidHom.{u1, u1} α α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (DivisionMonoid.toDivInvMonoid.{u1} α (DivisionCommMonoid.toDivisionMonoid.{u1} α _inst_1)))) (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (DivisionMonoid.toDivInvMonoid.{u1} α (DivisionCommMonoid.toDivisionMonoid.{u1} α _inst_1))))) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : α) => α) _x) (MulHomClass.toFunLike.{u1, u1, u1} (MonoidHom.{u1, u1} α α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (DivisionMonoid.toDivInvMonoid.{u1} α (DivisionCommMonoid.toDivisionMonoid.{u1} α _inst_1)))) (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (DivisionMonoid.toDivInvMonoid.{u1} α (DivisionCommMonoid.toDivisionMonoid.{u1} α _inst_1))))) α α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (DivisionMonoid.toDivInvMonoid.{u1} α (DivisionCommMonoid.toDivisionMonoid.{u1} α _inst_1))))) (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (DivisionMonoid.toDivInvMonoid.{u1} α (DivisionCommMonoid.toDivisionMonoid.{u1} α _inst_1))))) (MonoidHomClass.toMulHomClass.{u1, u1, u1} (MonoidHom.{u1, u1} α α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (DivisionMonoid.toDivInvMonoid.{u1} α (DivisionCommMonoid.toDivisionMonoid.{u1} α _inst_1)))) (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (DivisionMonoid.toDivInvMonoid.{u1} α (DivisionCommMonoid.toDivisionMonoid.{u1} α _inst_1))))) α α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (DivisionMonoid.toDivInvMonoid.{u1} α (DivisionCommMonoid.toDivisionMonoid.{u1} α _inst_1)))) (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (DivisionMonoid.toDivInvMonoid.{u1} α (DivisionCommMonoid.toDivisionMonoid.{u1} α _inst_1)))) (MonoidHom.monoidHomClass.{u1, u1} α α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (DivisionMonoid.toDivInvMonoid.{u1} α (DivisionCommMonoid.toDivisionMonoid.{u1} α _inst_1)))) (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (DivisionMonoid.toDivInvMonoid.{u1} α (DivisionCommMonoid.toDivisionMonoid.{u1} α _inst_1))))))) (invMonoidHom.{u1} α _inst_1) a) (Inv.inv.{u1} α (InvOneClass.toInv.{u1} α (DivInvOneMonoid.toInvOneClass.{u1} α (DivisionMonoid.toDivInvOneMonoid.{u1} α (DivisionCommMonoid.toDivisionMonoid.{u1} α _inst_1)))) a)
+  forall {α : Type.{u1}} [_inst_1 : DivisionCommMonoid.{u1} α] (a : α), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : α) => α) a) (FunLike.coe.{succ u1, succ u1, succ u1} (MonoidHom.{u1, u1} α α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (DivisionMonoid.toDivInvMonoid.{u1} α (DivisionCommMonoid.toDivisionMonoid.{u1} α _inst_1)))) (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (DivisionMonoid.toDivInvMonoid.{u1} α (DivisionCommMonoid.toDivisionMonoid.{u1} α _inst_1))))) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : α) => α) _x) (MulHomClass.toFunLike.{u1, u1, u1} (MonoidHom.{u1, u1} α α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (DivisionMonoid.toDivInvMonoid.{u1} α (DivisionCommMonoid.toDivisionMonoid.{u1} α _inst_1)))) (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (DivisionMonoid.toDivInvMonoid.{u1} α (DivisionCommMonoid.toDivisionMonoid.{u1} α _inst_1))))) α α (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (DivisionMonoid.toDivInvMonoid.{u1} α (DivisionCommMonoid.toDivisionMonoid.{u1} α _inst_1))))) (MulOneClass.toMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (DivisionMonoid.toDivInvMonoid.{u1} α (DivisionCommMonoid.toDivisionMonoid.{u1} α _inst_1))))) (MonoidHomClass.toMulHomClass.{u1, u1, u1} (MonoidHom.{u1, u1} α α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (DivisionMonoid.toDivInvMonoid.{u1} α (DivisionCommMonoid.toDivisionMonoid.{u1} α _inst_1)))) (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (DivisionMonoid.toDivInvMonoid.{u1} α (DivisionCommMonoid.toDivisionMonoid.{u1} α _inst_1))))) α α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (DivisionMonoid.toDivInvMonoid.{u1} α (DivisionCommMonoid.toDivisionMonoid.{u1} α _inst_1)))) (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (DivisionMonoid.toDivInvMonoid.{u1} α (DivisionCommMonoid.toDivisionMonoid.{u1} α _inst_1)))) (MonoidHom.monoidHomClass.{u1, u1} α α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (DivisionMonoid.toDivInvMonoid.{u1} α (DivisionCommMonoid.toDivisionMonoid.{u1} α _inst_1)))) (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (DivisionMonoid.toDivInvMonoid.{u1} α (DivisionCommMonoid.toDivisionMonoid.{u1} α _inst_1))))))) (invMonoidHom.{u1} α _inst_1) a) (Inv.inv.{u1} α (InvOneClass.toInv.{u1} α (DivInvOneMonoid.toInvOneClass.{u1} α (DivisionMonoid.toDivInvOneMonoid.{u1} α (DivisionCommMonoid.toDivisionMonoid.{u1} α _inst_1)))) a)
 Case conversion may be inaccurate. Consider using '#align inv_monoid_hom_apply invMonoidHom_applyₓ'. -/
 @[simp]
 theorem invMonoidHom_apply (a : α) : invMonoidHom a = a⁻¹ :=
@@ -1645,7 +1645,7 @@ theorem OneHom.coe_comp [One M] [One N] [One P] (g : OneHom N P) (f : OneHom M N
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} {P : Type.{u3}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] [_inst_3 : Mul.{u3} P] (g : MulHom.{u2, u3} N P _inst_2 _inst_3) (f : MulHom.{u1, u2} M N _inst_1 _inst_2), Eq.{max (succ u1) (succ u3)} (M -> P) (coeFn.{max (succ u3) (succ u1), max (succ u1) (succ u3)} (MulHom.{u1, u3} M P _inst_1 _inst_3) (fun (_x : MulHom.{u1, u3} M P _inst_1 _inst_3) => M -> P) (MulHom.hasCoeToFun.{u1, u3} M P _inst_1 _inst_3) (MulHom.comp.{u1, u2, u3} M N P _inst_1 _inst_2 _inst_3 g f)) (Function.comp.{succ u1, succ u2, succ u3} M N P (coeFn.{max (succ u3) (succ u2), max (succ u2) (succ u3)} (MulHom.{u2, u3} N P _inst_2 _inst_3) (fun (_x : MulHom.{u2, u3} N P _inst_2 _inst_3) => N -> P) (MulHom.hasCoeToFun.{u2, u3} N P _inst_2 _inst_3) g) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MulHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MulHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MulHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f))
 but is expected to have type
-  forall {M : Type.{u3}} {N : Type.{u2}} {P : Type.{u1}} [_inst_1 : Mul.{u3} M] [_inst_2 : Mul.{u2} N] [_inst_3 : Mul.{u1} P] (g : MulHom.{u2, u1} N P _inst_2 _inst_3) (f : MulHom.{u3, u2} M N _inst_1 _inst_2), Eq.{max (succ u3) (succ u1)} (M -> P) (FunLike.coe.{max (succ u3) (succ u1), succ u3, succ u1} (MulHom.{u3, u1} M P _inst_1 _inst_3) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => P) _x) (MulHomClass.toFunLike.{max u3 u1, u3, u1} (MulHom.{u3, u1} M P _inst_1 _inst_3) M P _inst_1 _inst_3 (MulHom.mulHomClass.{u3, u1} M P _inst_1 _inst_3)) (MulHom.comp.{u3, u2, u1} M N P _inst_1 _inst_2 _inst_3 g f)) (Function.comp.{succ u3, succ u2, succ u1} M N P (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} N P _inst_2 _inst_3) N (fun (_x : N) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : N) => P) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} N P _inst_2 _inst_3) N P _inst_2 _inst_3 (MulHom.mulHomClass.{u2, u1} N P _inst_2 _inst_3)) g) (FunLike.coe.{max (succ u3) (succ u2), succ u3, succ u2} (MulHom.{u3, u2} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) _x) (MulHomClass.toFunLike.{max u3 u2, u3, u2} (MulHom.{u3, u2} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u3, u2} M N _inst_1 _inst_2)) f))
+  forall {M : Type.{u3}} {N : Type.{u2}} {P : Type.{u1}} [_inst_1 : Mul.{u3} M] [_inst_2 : Mul.{u2} N] [_inst_3 : Mul.{u1} P] (g : MulHom.{u2, u1} N P _inst_2 _inst_3) (f : MulHom.{u3, u2} M N _inst_1 _inst_2), Eq.{max (succ u3) (succ u1)} (M -> P) (FunLike.coe.{max (succ u3) (succ u1), succ u3, succ u1} (MulHom.{u3, u1} M P _inst_1 _inst_3) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => P) _x) (MulHomClass.toFunLike.{max u3 u1, u3, u1} (MulHom.{u3, u1} M P _inst_1 _inst_3) M P _inst_1 _inst_3 (MulHom.mulHomClass.{u3, u1} M P _inst_1 _inst_3)) (MulHom.comp.{u3, u2, u1} M N P _inst_1 _inst_2 _inst_3 g f)) (Function.comp.{succ u3, succ u2, succ u1} M N P (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} N P _inst_2 _inst_3) N (fun (_x : N) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : N) => P) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} N P _inst_2 _inst_3) N P _inst_2 _inst_3 (MulHom.mulHomClass.{u2, u1} N P _inst_2 _inst_3)) g) (FunLike.coe.{max (succ u3) (succ u2), succ u3, succ u2} (MulHom.{u3, u2} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{max u3 u2, u3, u2} (MulHom.{u3, u2} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u3, u2} M N _inst_1 _inst_2)) f))
 Case conversion may be inaccurate. Consider using '#align mul_hom.coe_comp MulHom.coe_compₓ'. -/
 @[simp, to_additive]
 theorem MulHom.coe_comp [Mul M] [Mul N] [Mul P] (g : N →ₙ* P) (f : M →ₙ* N) : ⇑(g.comp f) = g ∘ f :=
@@ -1657,7 +1657,7 @@ theorem MulHom.coe_comp [Mul M] [Mul N] [Mul P] (g : N →ₙ* P) (f : M →ₙ*
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} {P : Type.{u3}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N] [_inst_3 : MulOneClass.{u3} P] (g : MonoidHom.{u2, u3} N P _inst_2 _inst_3) (f : MonoidHom.{u1, u2} M N _inst_1 _inst_2), Eq.{max (succ u1) (succ u3)} (M -> P) (coeFn.{max (succ u3) (succ u1), max (succ u1) (succ u3)} (MonoidHom.{u1, u3} M P _inst_1 _inst_3) (fun (_x : MonoidHom.{u1, u3} M P _inst_1 _inst_3) => M -> P) (MonoidHom.hasCoeToFun.{u1, u3} M P _inst_1 _inst_3) (MonoidHom.comp.{u1, u2, u3} M N P _inst_1 _inst_2 _inst_3 g f)) (Function.comp.{succ u1, succ u2, succ u3} M N P (coeFn.{max (succ u3) (succ u2), max (succ u2) (succ u3)} (MonoidHom.{u2, u3} N P _inst_2 _inst_3) (fun (_x : MonoidHom.{u2, u3} N P _inst_2 _inst_3) => N -> P) (MonoidHom.hasCoeToFun.{u2, u3} N P _inst_2 _inst_3) g) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MonoidHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MonoidHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f))
 but is expected to have type
-  forall {M : Type.{u3}} {N : Type.{u2}} {P : Type.{u1}} [_inst_1 : MulOneClass.{u3} M] [_inst_2 : MulOneClass.{u2} N] [_inst_3 : MulOneClass.{u1} P] (g : MonoidHom.{u2, u1} N P _inst_2 _inst_3) (f : MonoidHom.{u3, u2} M N _inst_1 _inst_2), Eq.{max (succ u3) (succ u1)} (M -> P) (FunLike.coe.{max (succ u3) (succ u1), succ u3, succ u1} (MonoidHom.{u3, u1} M P _inst_1 _inst_3) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => P) _x) (MulHomClass.toFunLike.{max u3 u1, u3, u1} (MonoidHom.{u3, u1} M P _inst_1 _inst_3) M P (MulOneClass.toMul.{u3} M _inst_1) (MulOneClass.toMul.{u1} P _inst_3) (MonoidHomClass.toMulHomClass.{max u3 u1, u3, u1} (MonoidHom.{u3, u1} M P _inst_1 _inst_3) M P _inst_1 _inst_3 (MonoidHom.monoidHomClass.{u3, u1} M P _inst_1 _inst_3))) (MonoidHom.comp.{u3, u2, u1} M N P _inst_1 _inst_2 _inst_3 g f)) (Function.comp.{succ u3, succ u2, succ u1} M N P (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} N P _inst_2 _inst_3) N (fun (_x : N) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : N) => P) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} N P _inst_2 _inst_3) N P (MulOneClass.toMul.{u2} N _inst_2) (MulOneClass.toMul.{u1} P _inst_3) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} N P _inst_2 _inst_3) N P _inst_2 _inst_3 (MonoidHom.monoidHomClass.{u2, u1} N P _inst_2 _inst_3))) g) (FunLike.coe.{max (succ u3) (succ u2), succ u3, succ u2} (MonoidHom.{u3, u2} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) _x) (MulHomClass.toFunLike.{max u3 u2, u3, u2} (MonoidHom.{u3, u2} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u3} M _inst_1) (MulOneClass.toMul.{u2} N _inst_2) (MonoidHomClass.toMulHomClass.{max u3 u2, u3, u2} (MonoidHom.{u3, u2} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidHom.monoidHomClass.{u3, u2} M N _inst_1 _inst_2))) f))
+  forall {M : Type.{u3}} {N : Type.{u2}} {P : Type.{u1}} [_inst_1 : MulOneClass.{u3} M] [_inst_2 : MulOneClass.{u2} N] [_inst_3 : MulOneClass.{u1} P] (g : MonoidHom.{u2, u1} N P _inst_2 _inst_3) (f : MonoidHom.{u3, u2} M N _inst_1 _inst_2), Eq.{max (succ u3) (succ u1)} (M -> P) (FunLike.coe.{max (succ u3) (succ u1), succ u3, succ u1} (MonoidHom.{u3, u1} M P _inst_1 _inst_3) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => P) _x) (MulHomClass.toFunLike.{max u3 u1, u3, u1} (MonoidHom.{u3, u1} M P _inst_1 _inst_3) M P (MulOneClass.toMul.{u3} M _inst_1) (MulOneClass.toMul.{u1} P _inst_3) (MonoidHomClass.toMulHomClass.{max u3 u1, u3, u1} (MonoidHom.{u3, u1} M P _inst_1 _inst_3) M P _inst_1 _inst_3 (MonoidHom.monoidHomClass.{u3, u1} M P _inst_1 _inst_3))) (MonoidHom.comp.{u3, u2, u1} M N P _inst_1 _inst_2 _inst_3 g f)) (Function.comp.{succ u3, succ u2, succ u1} M N P (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} N P _inst_2 _inst_3) N (fun (_x : N) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : N) => P) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} N P _inst_2 _inst_3) N P (MulOneClass.toMul.{u2} N _inst_2) (MulOneClass.toMul.{u1} P _inst_3) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} N P _inst_2 _inst_3) N P _inst_2 _inst_3 (MonoidHom.monoidHomClass.{u2, u1} N P _inst_2 _inst_3))) g) (FunLike.coe.{max (succ u3) (succ u2), succ u3, succ u2} (MonoidHom.{u3, u2} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{max u3 u2, u3, u2} (MonoidHom.{u3, u2} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u3} M _inst_1) (MulOneClass.toMul.{u2} N _inst_2) (MonoidHomClass.toMulHomClass.{max u3 u2, u3, u2} (MonoidHom.{u3, u2} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidHom.monoidHomClass.{u3, u2} M N _inst_1 _inst_2))) f))
 Case conversion may be inaccurate. Consider using '#align monoid_hom.coe_comp MonoidHom.coe_compₓ'. -/
 @[simp, to_additive]
 theorem MonoidHom.coe_comp [MulOneClass M] [MulOneClass N] [MulOneClass P] (g : N →* P)
@@ -1670,7 +1670,7 @@ theorem MonoidHom.coe_comp [MulOneClass M] [MulOneClass N] [MulOneClass P] (g :
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} {P : Type.{u3}} [_inst_1 : MulZeroOneClass.{u1} M] [_inst_2 : MulZeroOneClass.{u2} N] [_inst_3 : MulZeroOneClass.{u3} P] (g : MonoidWithZeroHom.{u2, u3} N P _inst_2 _inst_3) (f : MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2), Eq.{max (succ u1) (succ u3)} (M -> P) (coeFn.{max (succ u3) (succ u1), max (succ u1) (succ u3)} (MonoidWithZeroHom.{u1, u3} M P _inst_1 _inst_3) (fun (_x : MonoidWithZeroHom.{u1, u3} M P _inst_1 _inst_3) => M -> P) (MonoidWithZeroHom.hasCoeToFun.{u1, u3} M P _inst_1 _inst_3) (MonoidWithZeroHom.comp.{u1, u2, u3} M N P _inst_1 _inst_2 _inst_3 g f)) (Function.comp.{succ u1, succ u2, succ u3} M N P (coeFn.{max (succ u3) (succ u2), max (succ u2) (succ u3)} (MonoidWithZeroHom.{u2, u3} N P _inst_2 _inst_3) (fun (_x : MonoidWithZeroHom.{u2, u3} N P _inst_2 _inst_3) => N -> P) (MonoidWithZeroHom.hasCoeToFun.{u2, u3} N P _inst_2 _inst_3) g) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MonoidWithZeroHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f))
 but is expected to have type
-  forall {M : Type.{u3}} {N : Type.{u2}} {P : Type.{u1}} [_inst_1 : MulZeroOneClass.{u3} M] [_inst_2 : MulZeroOneClass.{u2} N] [_inst_3 : MulZeroOneClass.{u1} P] (g : MonoidWithZeroHom.{u2, u1} N P _inst_2 _inst_3) (f : MonoidWithZeroHom.{u3, u2} M N _inst_1 _inst_2), Eq.{max (succ u3) (succ u1)} (M -> P) (FunLike.coe.{max (succ u3) (succ u1), succ u3, succ u1} (MonoidWithZeroHom.{u3, u1} M P _inst_1 _inst_3) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => P) _x) (MulHomClass.toFunLike.{max u3 u1, u3, u1} (MonoidWithZeroHom.{u3, u1} M P _inst_1 _inst_3) M P (MulOneClass.toMul.{u3} M (MulZeroOneClass.toMulOneClass.{u3} M _inst_1)) (MulOneClass.toMul.{u1} P (MulZeroOneClass.toMulOneClass.{u1} P _inst_3)) (MonoidHomClass.toMulHomClass.{max u3 u1, u3, u1} (MonoidWithZeroHom.{u3, u1} M P _inst_1 _inst_3) M P (MulZeroOneClass.toMulOneClass.{u3} M _inst_1) (MulZeroOneClass.toMulOneClass.{u1} P _inst_3) (MonoidWithZeroHomClass.toMonoidHomClass.{max u3 u1, u3, u1} (MonoidWithZeroHom.{u3, u1} M P _inst_1 _inst_3) M P _inst_1 _inst_3 (MonoidWithZeroHom.monoidWithZeroHomClass.{u3, u1} M P _inst_1 _inst_3)))) (MonoidWithZeroHom.comp.{u3, u2, u1} M N P _inst_1 _inst_2 _inst_3 g f)) (Function.comp.{succ u3, succ u2, succ u1} M N P (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidWithZeroHom.{u2, u1} N P _inst_2 _inst_3) N (fun (_x : N) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : N) => P) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} N P _inst_2 _inst_3) N P (MulOneClass.toMul.{u2} N (MulZeroOneClass.toMulOneClass.{u2} N _inst_2)) (MulOneClass.toMul.{u1} P (MulZeroOneClass.toMulOneClass.{u1} P _inst_3)) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} N P _inst_2 _inst_3) N P (MulZeroOneClass.toMulOneClass.{u2} N _inst_2) (MulZeroOneClass.toMulOneClass.{u1} P _inst_3) (MonoidWithZeroHomClass.toMonoidHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} N P _inst_2 _inst_3) N P _inst_2 _inst_3 (MonoidWithZeroHom.monoidWithZeroHomClass.{u2, u1} N P _inst_2 _inst_3)))) g) (FunLike.coe.{max (succ u3) (succ u2), succ u3, succ u2} (MonoidWithZeroHom.{u3, u2} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) _x) (MulHomClass.toFunLike.{max u3 u2, u3, u2} (MonoidWithZeroHom.{u3, u2} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u3} M (MulZeroOneClass.toMulOneClass.{u3} M _inst_1)) (MulOneClass.toMul.{u2} N (MulZeroOneClass.toMulOneClass.{u2} N _inst_2)) (MonoidHomClass.toMulHomClass.{max u3 u2, u3, u2} (MonoidWithZeroHom.{u3, u2} M N _inst_1 _inst_2) M N (MulZeroOneClass.toMulOneClass.{u3} M _inst_1) (MulZeroOneClass.toMulOneClass.{u2} N _inst_2) (MonoidWithZeroHomClass.toMonoidHomClass.{max u3 u2, u3, u2} (MonoidWithZeroHom.{u3, u2} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidWithZeroHom.monoidWithZeroHomClass.{u3, u2} M N _inst_1 _inst_2)))) f))
+  forall {M : Type.{u3}} {N : Type.{u2}} {P : Type.{u1}} [_inst_1 : MulZeroOneClass.{u3} M] [_inst_2 : MulZeroOneClass.{u2} N] [_inst_3 : MulZeroOneClass.{u1} P] (g : MonoidWithZeroHom.{u2, u1} N P _inst_2 _inst_3) (f : MonoidWithZeroHom.{u3, u2} M N _inst_1 _inst_2), Eq.{max (succ u3) (succ u1)} (M -> P) (FunLike.coe.{max (succ u3) (succ u1), succ u3, succ u1} (MonoidWithZeroHom.{u3, u1} M P _inst_1 _inst_3) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => P) _x) (MulHomClass.toFunLike.{max u3 u1, u3, u1} (MonoidWithZeroHom.{u3, u1} M P _inst_1 _inst_3) M P (MulOneClass.toMul.{u3} M (MulZeroOneClass.toMulOneClass.{u3} M _inst_1)) (MulOneClass.toMul.{u1} P (MulZeroOneClass.toMulOneClass.{u1} P _inst_3)) (MonoidHomClass.toMulHomClass.{max u3 u1, u3, u1} (MonoidWithZeroHom.{u3, u1} M P _inst_1 _inst_3) M P (MulZeroOneClass.toMulOneClass.{u3} M _inst_1) (MulZeroOneClass.toMulOneClass.{u1} P _inst_3) (MonoidWithZeroHomClass.toMonoidHomClass.{max u3 u1, u3, u1} (MonoidWithZeroHom.{u3, u1} M P _inst_1 _inst_3) M P _inst_1 _inst_3 (MonoidWithZeroHom.monoidWithZeroHomClass.{u3, u1} M P _inst_1 _inst_3)))) (MonoidWithZeroHom.comp.{u3, u2, u1} M N P _inst_1 _inst_2 _inst_3 g f)) (Function.comp.{succ u3, succ u2, succ u1} M N P (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidWithZeroHom.{u2, u1} N P _inst_2 _inst_3) N (fun (_x : N) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : N) => P) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} N P _inst_2 _inst_3) N P (MulOneClass.toMul.{u2} N (MulZeroOneClass.toMulOneClass.{u2} N _inst_2)) (MulOneClass.toMul.{u1} P (MulZeroOneClass.toMulOneClass.{u1} P _inst_3)) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} N P _inst_2 _inst_3) N P (MulZeroOneClass.toMulOneClass.{u2} N _inst_2) (MulZeroOneClass.toMulOneClass.{u1} P _inst_3) (MonoidWithZeroHomClass.toMonoidHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} N P _inst_2 _inst_3) N P _inst_2 _inst_3 (MonoidWithZeroHom.monoidWithZeroHomClass.{u2, u1} N P _inst_2 _inst_3)))) g) (FunLike.coe.{max (succ u3) (succ u2), succ u3, succ u2} (MonoidWithZeroHom.{u3, u2} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{max u3 u2, u3, u2} (MonoidWithZeroHom.{u3, u2} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u3} M (MulZeroOneClass.toMulOneClass.{u3} M _inst_1)) (MulOneClass.toMul.{u2} N (MulZeroOneClass.toMulOneClass.{u2} N _inst_2)) (MonoidHomClass.toMulHomClass.{max u3 u2, u3, u2} (MonoidWithZeroHom.{u3, u2} M N _inst_1 _inst_2) M N (MulZeroOneClass.toMulOneClass.{u3} M _inst_1) (MulZeroOneClass.toMulOneClass.{u2} N _inst_2) (MonoidWithZeroHomClass.toMonoidHomClass.{max u3 u2, u3, u2} (MonoidWithZeroHom.{u3, u2} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidWithZeroHom.monoidWithZeroHomClass.{u3, u2} M N _inst_1 _inst_2)))) f))
 Case conversion may be inaccurate. Consider using '#align monoid_with_zero_hom.coe_comp MonoidWithZeroHom.coe_compₓ'. -/
 @[simp]
 theorem MonoidWithZeroHom.coe_comp [MulZeroOneClass M] [MulZeroOneClass N] [MulZeroOneClass P]
@@ -1695,7 +1695,7 @@ theorem OneHom.comp_apply [One M] [One N] [One P] (g : OneHom N P) (f : OneHom M
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} {P : Type.{u3}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] [_inst_3 : Mul.{u3} P] (g : MulHom.{u2, u3} N P _inst_2 _inst_3) (f : MulHom.{u1, u2} M N _inst_1 _inst_2) (x : M), Eq.{succ u3} P (coeFn.{max (succ u3) (succ u1), max (succ u1) (succ u3)} (MulHom.{u1, u3} M P _inst_1 _inst_3) (fun (_x : MulHom.{u1, u3} M P _inst_1 _inst_3) => M -> P) (MulHom.hasCoeToFun.{u1, u3} M P _inst_1 _inst_3) (MulHom.comp.{u1, u2, u3} M N P _inst_1 _inst_2 _inst_3 g f) x) (coeFn.{max (succ u3) (succ u2), max (succ u2) (succ u3)} (MulHom.{u2, u3} N P _inst_2 _inst_3) (fun (_x : MulHom.{u2, u3} N P _inst_2 _inst_3) => N -> P) (MulHom.hasCoeToFun.{u2, u3} N P _inst_2 _inst_3) g (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MulHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MulHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MulHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f x))
 but is expected to have type
-  forall {M : Type.{u3}} {N : Type.{u2}} {P : Type.{u1}} [_inst_1 : Mul.{u3} M] [_inst_2 : Mul.{u2} N] [_inst_3 : Mul.{u1} P] (g : MulHom.{u2, u1} N P _inst_2 _inst_3) (f : MulHom.{u3, u2} M N _inst_1 _inst_2) (x : M), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => P) x) (FunLike.coe.{max (succ u3) (succ u1), succ u3, succ u1} (MulHom.{u3, u1} M P _inst_1 _inst_3) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => P) _x) (MulHomClass.toFunLike.{max u3 u1, u3, u1} (MulHom.{u3, u1} M P _inst_1 _inst_3) M P _inst_1 _inst_3 (MulHom.mulHomClass.{u3, u1} M P _inst_1 _inst_3)) (MulHom.comp.{u3, u2, u1} M N P _inst_1 _inst_2 _inst_3 g f) x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} N P _inst_2 _inst_3) N (fun (_x : N) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : N) => P) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} N P _inst_2 _inst_3) N P _inst_2 _inst_3 (MulHom.mulHomClass.{u2, u1} N P _inst_2 _inst_3)) g (FunLike.coe.{max (succ u3) (succ u2), succ u3, succ u2} (MulHom.{u3, u2} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) _x) (MulHomClass.toFunLike.{max u3 u2, u3, u2} (MulHom.{u3, u2} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u3, u2} M N _inst_1 _inst_2)) f x))
+  forall {M : Type.{u3}} {N : Type.{u2}} {P : Type.{u1}} [_inst_1 : Mul.{u3} M] [_inst_2 : Mul.{u2} N] [_inst_3 : Mul.{u1} P] (g : MulHom.{u2, u1} N P _inst_2 _inst_3) (f : MulHom.{u3, u2} M N _inst_1 _inst_2) (x : M), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => P) x) (FunLike.coe.{max (succ u3) (succ u1), succ u3, succ u1} (MulHom.{u3, u1} M P _inst_1 _inst_3) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => P) _x) (MulHomClass.toFunLike.{max u3 u1, u3, u1} (MulHom.{u3, u1} M P _inst_1 _inst_3) M P _inst_1 _inst_3 (MulHom.mulHomClass.{u3, u1} M P _inst_1 _inst_3)) (MulHom.comp.{u3, u2, u1} M N P _inst_1 _inst_2 _inst_3 g f) x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} N P _inst_2 _inst_3) N (fun (_x : N) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : N) => P) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} N P _inst_2 _inst_3) N P _inst_2 _inst_3 (MulHom.mulHomClass.{u2, u1} N P _inst_2 _inst_3)) g (FunLike.coe.{max (succ u3) (succ u2), succ u3, succ u2} (MulHom.{u3, u2} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{max u3 u2, u3, u2} (MulHom.{u3, u2} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u3, u2} M N _inst_1 _inst_2)) f x))
 Case conversion may be inaccurate. Consider using '#align mul_hom.comp_apply MulHom.comp_applyₓ'. -/
 @[to_additive]
 theorem MulHom.comp_apply [Mul M] [Mul N] [Mul P] (g : N →ₙ* P) (f : M →ₙ* N) (x : M) :
@@ -1708,7 +1708,7 @@ theorem MulHom.comp_apply [Mul M] [Mul N] [Mul P] (g : N →ₙ* P) (f : M →
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} {P : Type.{u3}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N] [_inst_3 : MulOneClass.{u3} P] (g : MonoidHom.{u2, u3} N P _inst_2 _inst_3) (f : MonoidHom.{u1, u2} M N _inst_1 _inst_2) (x : M), Eq.{succ u3} P (coeFn.{max (succ u3) (succ u1), max (succ u1) (succ u3)} (MonoidHom.{u1, u3} M P _inst_1 _inst_3) (fun (_x : MonoidHom.{u1, u3} M P _inst_1 _inst_3) => M -> P) (MonoidHom.hasCoeToFun.{u1, u3} M P _inst_1 _inst_3) (MonoidHom.comp.{u1, u2, u3} M N P _inst_1 _inst_2 _inst_3 g f) x) (coeFn.{max (succ u3) (succ u2), max (succ u2) (succ u3)} (MonoidHom.{u2, u3} N P _inst_2 _inst_3) (fun (_x : MonoidHom.{u2, u3} N P _inst_2 _inst_3) => N -> P) (MonoidHom.hasCoeToFun.{u2, u3} N P _inst_2 _inst_3) g (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MonoidHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MonoidHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f x))
 but is expected to have type
-  forall {M : Type.{u3}} {N : Type.{u2}} {P : Type.{u1}} [_inst_1 : MulOneClass.{u3} M] [_inst_2 : MulOneClass.{u2} N] [_inst_3 : MulOneClass.{u1} P] (g : MonoidHom.{u2, u1} N P _inst_2 _inst_3) (f : MonoidHom.{u3, u2} M N _inst_1 _inst_2) (x : M), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => P) x) (FunLike.coe.{max (succ u3) (succ u1), succ u3, succ u1} (MonoidHom.{u3, u1} M P _inst_1 _inst_3) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => P) _x) (MulHomClass.toFunLike.{max u3 u1, u3, u1} (MonoidHom.{u3, u1} M P _inst_1 _inst_3) M P (MulOneClass.toMul.{u3} M _inst_1) (MulOneClass.toMul.{u1} P _inst_3) (MonoidHomClass.toMulHomClass.{max u3 u1, u3, u1} (MonoidHom.{u3, u1} M P _inst_1 _inst_3) M P _inst_1 _inst_3 (MonoidHom.monoidHomClass.{u3, u1} M P _inst_1 _inst_3))) (MonoidHom.comp.{u3, u2, u1} M N P _inst_1 _inst_2 _inst_3 g f) x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} N P _inst_2 _inst_3) N (fun (_x : N) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : N) => P) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} N P _inst_2 _inst_3) N P (MulOneClass.toMul.{u2} N _inst_2) (MulOneClass.toMul.{u1} P _inst_3) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} N P _inst_2 _inst_3) N P _inst_2 _inst_3 (MonoidHom.monoidHomClass.{u2, u1} N P _inst_2 _inst_3))) g (FunLike.coe.{max (succ u3) (succ u2), succ u3, succ u2} (MonoidHom.{u3, u2} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) _x) (MulHomClass.toFunLike.{max u3 u2, u3, u2} (MonoidHom.{u3, u2} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u3} M _inst_1) (MulOneClass.toMul.{u2} N _inst_2) (MonoidHomClass.toMulHomClass.{max u3 u2, u3, u2} (MonoidHom.{u3, u2} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidHom.monoidHomClass.{u3, u2} M N _inst_1 _inst_2))) f x))
+  forall {M : Type.{u3}} {N : Type.{u2}} {P : Type.{u1}} [_inst_1 : MulOneClass.{u3} M] [_inst_2 : MulOneClass.{u2} N] [_inst_3 : MulOneClass.{u1} P] (g : MonoidHom.{u2, u1} N P _inst_2 _inst_3) (f : MonoidHom.{u3, u2} M N _inst_1 _inst_2) (x : M), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => P) x) (FunLike.coe.{max (succ u3) (succ u1), succ u3, succ u1} (MonoidHom.{u3, u1} M P _inst_1 _inst_3) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => P) _x) (MulHomClass.toFunLike.{max u3 u1, u3, u1} (MonoidHom.{u3, u1} M P _inst_1 _inst_3) M P (MulOneClass.toMul.{u3} M _inst_1) (MulOneClass.toMul.{u1} P _inst_3) (MonoidHomClass.toMulHomClass.{max u3 u1, u3, u1} (MonoidHom.{u3, u1} M P _inst_1 _inst_3) M P _inst_1 _inst_3 (MonoidHom.monoidHomClass.{u3, u1} M P _inst_1 _inst_3))) (MonoidHom.comp.{u3, u2, u1} M N P _inst_1 _inst_2 _inst_3 g f) x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} N P _inst_2 _inst_3) N (fun (_x : N) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : N) => P) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} N P _inst_2 _inst_3) N P (MulOneClass.toMul.{u2} N _inst_2) (MulOneClass.toMul.{u1} P _inst_3) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} N P _inst_2 _inst_3) N P _inst_2 _inst_3 (MonoidHom.monoidHomClass.{u2, u1} N P _inst_2 _inst_3))) g (FunLike.coe.{max (succ u3) (succ u2), succ u3, succ u2} (MonoidHom.{u3, u2} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{max u3 u2, u3, u2} (MonoidHom.{u3, u2} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u3} M _inst_1) (MulOneClass.toMul.{u2} N _inst_2) (MonoidHomClass.toMulHomClass.{max u3 u2, u3, u2} (MonoidHom.{u3, u2} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidHom.monoidHomClass.{u3, u2} M N _inst_1 _inst_2))) f x))
 Case conversion may be inaccurate. Consider using '#align monoid_hom.comp_apply MonoidHom.comp_applyₓ'. -/
 @[to_additive]
 theorem MonoidHom.comp_apply [MulOneClass M] [MulOneClass N] [MulOneClass P] (g : N →* P)
@@ -1721,7 +1721,7 @@ theorem MonoidHom.comp_apply [MulOneClass M] [MulOneClass N] [MulOneClass P] (g
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} {P : Type.{u3}} [_inst_1 : MulZeroOneClass.{u1} M] [_inst_2 : MulZeroOneClass.{u2} N] [_inst_3 : MulZeroOneClass.{u3} P] (g : MonoidWithZeroHom.{u2, u3} N P _inst_2 _inst_3) (f : MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) (x : M), Eq.{succ u3} P (coeFn.{max (succ u3) (succ u1), max (succ u1) (succ u3)} (MonoidWithZeroHom.{u1, u3} M P _inst_1 _inst_3) (fun (_x : MonoidWithZeroHom.{u1, u3} M P _inst_1 _inst_3) => M -> P) (MonoidWithZeroHom.hasCoeToFun.{u1, u3} M P _inst_1 _inst_3) (MonoidWithZeroHom.comp.{u1, u2, u3} M N P _inst_1 _inst_2 _inst_3 g f) x) (coeFn.{max (succ u3) (succ u2), max (succ u2) (succ u3)} (MonoidWithZeroHom.{u2, u3} N P _inst_2 _inst_3) (fun (_x : MonoidWithZeroHom.{u2, u3} N P _inst_2 _inst_3) => N -> P) (MonoidWithZeroHom.hasCoeToFun.{u2, u3} N P _inst_2 _inst_3) g (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MonoidWithZeroHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f x))
 but is expected to have type
-  forall {M : Type.{u3}} {N : Type.{u2}} {P : Type.{u1}} [_inst_1 : MulZeroOneClass.{u3} M] [_inst_2 : MulZeroOneClass.{u2} N] [_inst_3 : MulZeroOneClass.{u1} P] (g : MonoidWithZeroHom.{u2, u1} N P _inst_2 _inst_3) (f : MonoidWithZeroHom.{u3, u2} M N _inst_1 _inst_2) (x : M), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => P) x) (FunLike.coe.{max (succ u3) (succ u1), succ u3, succ u1} (MonoidWithZeroHom.{u3, u1} M P _inst_1 _inst_3) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => P) _x) (MulHomClass.toFunLike.{max u3 u1, u3, u1} (MonoidWithZeroHom.{u3, u1} M P _inst_1 _inst_3) M P (MulOneClass.toMul.{u3} M (MulZeroOneClass.toMulOneClass.{u3} M _inst_1)) (MulOneClass.toMul.{u1} P (MulZeroOneClass.toMulOneClass.{u1} P _inst_3)) (MonoidHomClass.toMulHomClass.{max u3 u1, u3, u1} (MonoidWithZeroHom.{u3, u1} M P _inst_1 _inst_3) M P (MulZeroOneClass.toMulOneClass.{u3} M _inst_1) (MulZeroOneClass.toMulOneClass.{u1} P _inst_3) (MonoidWithZeroHomClass.toMonoidHomClass.{max u3 u1, u3, u1} (MonoidWithZeroHom.{u3, u1} M P _inst_1 _inst_3) M P _inst_1 _inst_3 (MonoidWithZeroHom.monoidWithZeroHomClass.{u3, u1} M P _inst_1 _inst_3)))) (MonoidWithZeroHom.comp.{u3, u2, u1} M N P _inst_1 _inst_2 _inst_3 g f) x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidWithZeroHom.{u2, u1} N P _inst_2 _inst_3) N (fun (_x : N) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : N) => P) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} N P _inst_2 _inst_3) N P (MulOneClass.toMul.{u2} N (MulZeroOneClass.toMulOneClass.{u2} N _inst_2)) (MulOneClass.toMul.{u1} P (MulZeroOneClass.toMulOneClass.{u1} P _inst_3)) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} N P _inst_2 _inst_3) N P (MulZeroOneClass.toMulOneClass.{u2} N _inst_2) (MulZeroOneClass.toMulOneClass.{u1} P _inst_3) (MonoidWithZeroHomClass.toMonoidHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} N P _inst_2 _inst_3) N P _inst_2 _inst_3 (MonoidWithZeroHom.monoidWithZeroHomClass.{u2, u1} N P _inst_2 _inst_3)))) g (FunLike.coe.{max (succ u3) (succ u2), succ u3, succ u2} (MonoidWithZeroHom.{u3, u2} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) _x) (MulHomClass.toFunLike.{max u3 u2, u3, u2} (MonoidWithZeroHom.{u3, u2} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u3} M (MulZeroOneClass.toMulOneClass.{u3} M _inst_1)) (MulOneClass.toMul.{u2} N (MulZeroOneClass.toMulOneClass.{u2} N _inst_2)) (MonoidHomClass.toMulHomClass.{max u3 u2, u3, u2} (MonoidWithZeroHom.{u3, u2} M N _inst_1 _inst_2) M N (MulZeroOneClass.toMulOneClass.{u3} M _inst_1) (MulZeroOneClass.toMulOneClass.{u2} N _inst_2) (MonoidWithZeroHomClass.toMonoidHomClass.{max u3 u2, u3, u2} (MonoidWithZeroHom.{u3, u2} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidWithZeroHom.monoidWithZeroHomClass.{u3, u2} M N _inst_1 _inst_2)))) f x))
+  forall {M : Type.{u3}} {N : Type.{u2}} {P : Type.{u1}} [_inst_1 : MulZeroOneClass.{u3} M] [_inst_2 : MulZeroOneClass.{u2} N] [_inst_3 : MulZeroOneClass.{u1} P] (g : MonoidWithZeroHom.{u2, u1} N P _inst_2 _inst_3) (f : MonoidWithZeroHom.{u3, u2} M N _inst_1 _inst_2) (x : M), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => P) x) (FunLike.coe.{max (succ u3) (succ u1), succ u3, succ u1} (MonoidWithZeroHom.{u3, u1} M P _inst_1 _inst_3) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => P) _x) (MulHomClass.toFunLike.{max u3 u1, u3, u1} (MonoidWithZeroHom.{u3, u1} M P _inst_1 _inst_3) M P (MulOneClass.toMul.{u3} M (MulZeroOneClass.toMulOneClass.{u3} M _inst_1)) (MulOneClass.toMul.{u1} P (MulZeroOneClass.toMulOneClass.{u1} P _inst_3)) (MonoidHomClass.toMulHomClass.{max u3 u1, u3, u1} (MonoidWithZeroHom.{u3, u1} M P _inst_1 _inst_3) M P (MulZeroOneClass.toMulOneClass.{u3} M _inst_1) (MulZeroOneClass.toMulOneClass.{u1} P _inst_3) (MonoidWithZeroHomClass.toMonoidHomClass.{max u3 u1, u3, u1} (MonoidWithZeroHom.{u3, u1} M P _inst_1 _inst_3) M P _inst_1 _inst_3 (MonoidWithZeroHom.monoidWithZeroHomClass.{u3, u1} M P _inst_1 _inst_3)))) (MonoidWithZeroHom.comp.{u3, u2, u1} M N P _inst_1 _inst_2 _inst_3 g f) x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidWithZeroHom.{u2, u1} N P _inst_2 _inst_3) N (fun (_x : N) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : N) => P) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} N P _inst_2 _inst_3) N P (MulOneClass.toMul.{u2} N (MulZeroOneClass.toMulOneClass.{u2} N _inst_2)) (MulOneClass.toMul.{u1} P (MulZeroOneClass.toMulOneClass.{u1} P _inst_3)) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} N P _inst_2 _inst_3) N P (MulZeroOneClass.toMulOneClass.{u2} N _inst_2) (MulZeroOneClass.toMulOneClass.{u1} P _inst_3) (MonoidWithZeroHomClass.toMonoidHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} N P _inst_2 _inst_3) N P _inst_2 _inst_3 (MonoidWithZeroHom.monoidWithZeroHomClass.{u2, u1} N P _inst_2 _inst_3)))) g (FunLike.coe.{max (succ u3) (succ u2), succ u3, succ u2} (MonoidWithZeroHom.{u3, u2} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{max u3 u2, u3, u2} (MonoidWithZeroHom.{u3, u2} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u3} M (MulZeroOneClass.toMulOneClass.{u3} M _inst_1)) (MulOneClass.toMul.{u2} N (MulZeroOneClass.toMulOneClass.{u2} N _inst_2)) (MonoidHomClass.toMulHomClass.{max u3 u2, u3, u2} (MonoidWithZeroHom.{u3, u2} M N _inst_1 _inst_2) M N (MulZeroOneClass.toMulOneClass.{u3} M _inst_1) (MulZeroOneClass.toMulOneClass.{u2} N _inst_2) (MonoidWithZeroHomClass.toMonoidHomClass.{max u3 u2, u3, u2} (MonoidWithZeroHom.{u3, u2} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidWithZeroHom.monoidWithZeroHomClass.{u3, u2} M N _inst_1 _inst_2)))) f x))
 Case conversion may be inaccurate. Consider using '#align monoid_with_zero_hom.comp_apply MonoidWithZeroHom.comp_applyₓ'. -/
 theorem MonoidWithZeroHom.comp_apply [MulZeroOneClass M] [MulZeroOneClass N] [MulZeroOneClass P]
     (g : N →*₀ P) (f : M →*₀ N) (x : M) : g.comp f x = g (f x) :=
@@ -1798,7 +1798,7 @@ theorem OneHom.cancel_right [One M] [One N] [One P] {g₁ g₂ : OneHom N P} {f
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} {P : Type.{u3}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] [_inst_3 : Mul.{u3} P] {g₁ : MulHom.{u2, u3} N P _inst_2 _inst_3} {g₂ : MulHom.{u2, u3} N P _inst_2 _inst_3} {f : MulHom.{u1, u2} M N _inst_1 _inst_2}, (Function.Surjective.{succ u1, succ u2} M N (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MulHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MulHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MulHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f)) -> (Iff (Eq.{max (succ u3) (succ u1)} (MulHom.{u1, u3} M P _inst_1 _inst_3) (MulHom.comp.{u1, u2, u3} M N P _inst_1 _inst_2 _inst_3 g₁ f) (MulHom.comp.{u1, u2, u3} M N P _inst_1 _inst_2 _inst_3 g₂ f)) (Eq.{max (succ u3) (succ u2)} (MulHom.{u2, u3} N P _inst_2 _inst_3) g₁ g₂))
 but is expected to have type
-  forall {M : Type.{u3}} {N : Type.{u2}} {P : Type.{u1}} [_inst_1 : Mul.{u3} M] [_inst_2 : Mul.{u2} N] [_inst_3 : Mul.{u1} P] {g₁ : MulHom.{u2, u1} N P _inst_2 _inst_3} {g₂ : MulHom.{u2, u1} N P _inst_2 _inst_3} {f : MulHom.{u3, u2} M N _inst_1 _inst_2}, (Function.Surjective.{succ u3, succ u2} M N (FunLike.coe.{max (succ u3) (succ u2), succ u3, succ u2} (MulHom.{u3, u2} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) _x) (MulHomClass.toFunLike.{max u3 u2, u3, u2} (MulHom.{u3, u2} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u3, u2} M N _inst_1 _inst_2)) f)) -> (Iff (Eq.{max (succ u3) (succ u1)} (MulHom.{u3, u1} M P _inst_1 _inst_3) (MulHom.comp.{u3, u2, u1} M N P _inst_1 _inst_2 _inst_3 g₁ f) (MulHom.comp.{u3, u2, u1} M N P _inst_1 _inst_2 _inst_3 g₂ f)) (Eq.{max (succ u2) (succ u1)} (MulHom.{u2, u1} N P _inst_2 _inst_3) g₁ g₂))
+  forall {M : Type.{u3}} {N : Type.{u2}} {P : Type.{u1}} [_inst_1 : Mul.{u3} M] [_inst_2 : Mul.{u2} N] [_inst_3 : Mul.{u1} P] {g₁ : MulHom.{u2, u1} N P _inst_2 _inst_3} {g₂ : MulHom.{u2, u1} N P _inst_2 _inst_3} {f : MulHom.{u3, u2} M N _inst_1 _inst_2}, (Function.Surjective.{succ u3, succ u2} M N (FunLike.coe.{max (succ u3) (succ u2), succ u3, succ u2} (MulHom.{u3, u2} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{max u3 u2, u3, u2} (MulHom.{u3, u2} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MulHom.mulHomClass.{u3, u2} M N _inst_1 _inst_2)) f)) -> (Iff (Eq.{max (succ u3) (succ u1)} (MulHom.{u3, u1} M P _inst_1 _inst_3) (MulHom.comp.{u3, u2, u1} M N P _inst_1 _inst_2 _inst_3 g₁ f) (MulHom.comp.{u3, u2, u1} M N P _inst_1 _inst_2 _inst_3 g₂ f)) (Eq.{max (succ u2) (succ u1)} (MulHom.{u2, u1} N P _inst_2 _inst_3) g₁ g₂))
 Case conversion may be inaccurate. Consider using '#align mul_hom.cancel_right MulHom.cancel_rightₓ'. -/
 @[to_additive]
 theorem MulHom.cancel_right [Mul M] [Mul N] [Mul P] {g₁ g₂ : N →ₙ* P} {f : M →ₙ* N}
@@ -1811,7 +1811,7 @@ theorem MulHom.cancel_right [Mul M] [Mul N] [Mul P] {g₁ g₂ : N →ₙ* P} {f
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} {P : Type.{u3}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N] [_inst_3 : MulOneClass.{u3} P] {g₁ : MonoidHom.{u2, u3} N P _inst_2 _inst_3} {g₂ : MonoidHom.{u2, u3} N P _inst_2 _inst_3} {f : MonoidHom.{u1, u2} M N _inst_1 _inst_2}, (Function.Surjective.{succ u1, succ u2} M N (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MonoidHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MonoidHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f)) -> (Iff (Eq.{max (succ u3) (succ u1)} (MonoidHom.{u1, u3} M P _inst_1 _inst_3) (MonoidHom.comp.{u1, u2, u3} M N P _inst_1 _inst_2 _inst_3 g₁ f) (MonoidHom.comp.{u1, u2, u3} M N P _inst_1 _inst_2 _inst_3 g₂ f)) (Eq.{max (succ u3) (succ u2)} (MonoidHom.{u2, u3} N P _inst_2 _inst_3) g₁ g₂))
 but is expected to have type
-  forall {M : Type.{u3}} {N : Type.{u2}} {P : Type.{u1}} [_inst_1 : MulOneClass.{u3} M] [_inst_2 : MulOneClass.{u2} N] [_inst_3 : MulOneClass.{u1} P] {g₁ : MonoidHom.{u2, u1} N P _inst_2 _inst_3} {g₂ : MonoidHom.{u2, u1} N P _inst_2 _inst_3} {f : MonoidHom.{u3, u2} M N _inst_1 _inst_2}, (Function.Surjective.{succ u3, succ u2} M N (FunLike.coe.{max (succ u3) (succ u2), succ u3, succ u2} (MonoidHom.{u3, u2} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) _x) (MulHomClass.toFunLike.{max u3 u2, u3, u2} (MonoidHom.{u3, u2} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u3} M _inst_1) (MulOneClass.toMul.{u2} N _inst_2) (MonoidHomClass.toMulHomClass.{max u3 u2, u3, u2} (MonoidHom.{u3, u2} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidHom.monoidHomClass.{u3, u2} M N _inst_1 _inst_2))) f)) -> (Iff (Eq.{max (succ u3) (succ u1)} (MonoidHom.{u3, u1} M P _inst_1 _inst_3) (MonoidHom.comp.{u3, u2, u1} M N P _inst_1 _inst_2 _inst_3 g₁ f) (MonoidHom.comp.{u3, u2, u1} M N P _inst_1 _inst_2 _inst_3 g₂ f)) (Eq.{max (succ u2) (succ u1)} (MonoidHom.{u2, u1} N P _inst_2 _inst_3) g₁ g₂))
+  forall {M : Type.{u3}} {N : Type.{u2}} {P : Type.{u1}} [_inst_1 : MulOneClass.{u3} M] [_inst_2 : MulOneClass.{u2} N] [_inst_3 : MulOneClass.{u1} P] {g₁ : MonoidHom.{u2, u1} N P _inst_2 _inst_3} {g₂ : MonoidHom.{u2, u1} N P _inst_2 _inst_3} {f : MonoidHom.{u3, u2} M N _inst_1 _inst_2}, (Function.Surjective.{succ u3, succ u2} M N (FunLike.coe.{max (succ u3) (succ u2), succ u3, succ u2} (MonoidHom.{u3, u2} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{max u3 u2, u3, u2} (MonoidHom.{u3, u2} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u3} M _inst_1) (MulOneClass.toMul.{u2} N _inst_2) (MonoidHomClass.toMulHomClass.{max u3 u2, u3, u2} (MonoidHom.{u3, u2} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidHom.monoidHomClass.{u3, u2} M N _inst_1 _inst_2))) f)) -> (Iff (Eq.{max (succ u3) (succ u1)} (MonoidHom.{u3, u1} M P _inst_1 _inst_3) (MonoidHom.comp.{u3, u2, u1} M N P _inst_1 _inst_2 _inst_3 g₁ f) (MonoidHom.comp.{u3, u2, u1} M N P _inst_1 _inst_2 _inst_3 g₂ f)) (Eq.{max (succ u2) (succ u1)} (MonoidHom.{u2, u1} N P _inst_2 _inst_3) g₁ g₂))
 Case conversion may be inaccurate. Consider using '#align monoid_hom.cancel_right MonoidHom.cancel_rightₓ'. -/
 @[to_additive]
 theorem MonoidHom.cancel_right [MulOneClass M] [MulOneClass N] [MulOneClass P] {g₁ g₂ : N →* P}
@@ -1824,7 +1824,7 @@ theorem MonoidHom.cancel_right [MulOneClass M] [MulOneClass N] [MulOneClass P] {
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} {P : Type.{u3}} [_inst_1 : MulZeroOneClass.{u1} M] [_inst_2 : MulZeroOneClass.{u2} N] [_inst_3 : MulZeroOneClass.{u3} P] {g₁ : MonoidWithZeroHom.{u2, u3} N P _inst_2 _inst_3} {g₂ : MonoidWithZeroHom.{u2, u3} N P _inst_2 _inst_3} {f : MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2}, (Function.Surjective.{succ u1, succ u2} M N (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MonoidWithZeroHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) f)) -> (Iff (Eq.{max (succ u3) (succ u1)} (MonoidWithZeroHom.{u1, u3} M P _inst_1 _inst_3) (MonoidWithZeroHom.comp.{u1, u2, u3} M N P _inst_1 _inst_2 _inst_3 g₁ f) (MonoidWithZeroHom.comp.{u1, u2, u3} M N P _inst_1 _inst_2 _inst_3 g₂ f)) (Eq.{max (succ u3) (succ u2)} (MonoidWithZeroHom.{u2, u3} N P _inst_2 _inst_3) g₁ g₂))
 but is expected to have type
-  forall {M : Type.{u3}} {N : Type.{u2}} {P : Type.{u1}} [_inst_1 : MulZeroOneClass.{u3} M] [_inst_2 : MulZeroOneClass.{u2} N] [_inst_3 : MulZeroOneClass.{u1} P] {g₁ : MonoidWithZeroHom.{u2, u1} N P _inst_2 _inst_3} {g₂ : MonoidWithZeroHom.{u2, u1} N P _inst_2 _inst_3} {f : MonoidWithZeroHom.{u3, u2} M N _inst_1 _inst_2}, (Function.Surjective.{succ u3, succ u2} M N (FunLike.coe.{max (succ u3) (succ u2), succ u3, succ u2} (MonoidWithZeroHom.{u3, u2} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) _x) (MulHomClass.toFunLike.{max u3 u2, u3, u2} (MonoidWithZeroHom.{u3, u2} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u3} M (MulZeroOneClass.toMulOneClass.{u3} M _inst_1)) (MulOneClass.toMul.{u2} N (MulZeroOneClass.toMulOneClass.{u2} N _inst_2)) (MonoidHomClass.toMulHomClass.{max u3 u2, u3, u2} (MonoidWithZeroHom.{u3, u2} M N _inst_1 _inst_2) M N (MulZeroOneClass.toMulOneClass.{u3} M _inst_1) (MulZeroOneClass.toMulOneClass.{u2} N _inst_2) (MonoidWithZeroHomClass.toMonoidHomClass.{max u3 u2, u3, u2} (MonoidWithZeroHom.{u3, u2} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidWithZeroHom.monoidWithZeroHomClass.{u3, u2} M N _inst_1 _inst_2)))) f)) -> (Iff (Eq.{max (succ u3) (succ u1)} (MonoidWithZeroHom.{u3, u1} M P _inst_1 _inst_3) (MonoidWithZeroHom.comp.{u3, u2, u1} M N P _inst_1 _inst_2 _inst_3 g₁ f) (MonoidWithZeroHom.comp.{u3, u2, u1} M N P _inst_1 _inst_2 _inst_3 g₂ f)) (Eq.{max (succ u2) (succ u1)} (MonoidWithZeroHom.{u2, u1} N P _inst_2 _inst_3) g₁ g₂))
+  forall {M : Type.{u3}} {N : Type.{u2}} {P : Type.{u1}} [_inst_1 : MulZeroOneClass.{u3} M] [_inst_2 : MulZeroOneClass.{u2} N] [_inst_3 : MulZeroOneClass.{u1} P] {g₁ : MonoidWithZeroHom.{u2, u1} N P _inst_2 _inst_3} {g₂ : MonoidWithZeroHom.{u2, u1} N P _inst_2 _inst_3} {f : MonoidWithZeroHom.{u3, u2} M N _inst_1 _inst_2}, (Function.Surjective.{succ u3, succ u2} M N (FunLike.coe.{max (succ u3) (succ u2), succ u3, succ u2} (MonoidWithZeroHom.{u3, u2} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{max u3 u2, u3, u2} (MonoidWithZeroHom.{u3, u2} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u3} M (MulZeroOneClass.toMulOneClass.{u3} M _inst_1)) (MulOneClass.toMul.{u2} N (MulZeroOneClass.toMulOneClass.{u2} N _inst_2)) (MonoidHomClass.toMulHomClass.{max u3 u2, u3, u2} (MonoidWithZeroHom.{u3, u2} M N _inst_1 _inst_2) M N (MulZeroOneClass.toMulOneClass.{u3} M _inst_1) (MulZeroOneClass.toMulOneClass.{u2} N _inst_2) (MonoidWithZeroHomClass.toMonoidHomClass.{max u3 u2, u3, u2} (MonoidWithZeroHom.{u3, u2} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidWithZeroHom.monoidWithZeroHomClass.{u3, u2} M N _inst_1 _inst_2)))) f)) -> (Iff (Eq.{max (succ u3) (succ u1)} (MonoidWithZeroHom.{u3, u1} M P _inst_1 _inst_3) (MonoidWithZeroHom.comp.{u3, u2, u1} M N P _inst_1 _inst_2 _inst_3 g₁ f) (MonoidWithZeroHom.comp.{u3, u2, u1} M N P _inst_1 _inst_2 _inst_3 g₂ f)) (Eq.{max (succ u2) (succ u1)} (MonoidWithZeroHom.{u2, u1} N P _inst_2 _inst_3) g₁ g₂))
 Case conversion may be inaccurate. Consider using '#align monoid_with_zero_hom.cancel_right MonoidWithZeroHom.cancel_rightₓ'. -/
 theorem MonoidWithZeroHom.cancel_right [MulZeroOneClass M] [MulZeroOneClass N] [MulZeroOneClass P]
     {g₁ g₂ : N →*₀ P} {f : M →*₀ N} (hf : Function.Surjective f) :
@@ -1850,7 +1850,7 @@ theorem OneHom.cancel_left [One M] [One N] [One P] {g : OneHom N P} {f₁ f₂ :
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} {P : Type.{u3}} [_inst_1 : Mul.{u1} M] [_inst_2 : Mul.{u2} N] [_inst_3 : Mul.{u3} P] {g : MulHom.{u2, u3} N P _inst_2 _inst_3} {f₁ : MulHom.{u1, u2} M N _inst_1 _inst_2} {f₂ : MulHom.{u1, u2} M N _inst_1 _inst_2}, (Function.Injective.{succ u2, succ u3} N P (coeFn.{max (succ u3) (succ u2), max (succ u2) (succ u3)} (MulHom.{u2, u3} N P _inst_2 _inst_3) (fun (_x : MulHom.{u2, u3} N P _inst_2 _inst_3) => N -> P) (MulHom.hasCoeToFun.{u2, u3} N P _inst_2 _inst_3) g)) -> (Iff (Eq.{max (succ u3) (succ u1)} (MulHom.{u1, u3} M P _inst_1 _inst_3) (MulHom.comp.{u1, u2, u3} M N P _inst_1 _inst_2 _inst_3 g f₁) (MulHom.comp.{u1, u2, u3} M N P _inst_1 _inst_2 _inst_3 g f₂)) (Eq.{max (succ u2) (succ u1)} (MulHom.{u1, u2} M N _inst_1 _inst_2) f₁ f₂))
 but is expected to have type
-  forall {M : Type.{u3}} {N : Type.{u2}} {P : Type.{u1}} [_inst_1 : Mul.{u3} M] [_inst_2 : Mul.{u2} N] [_inst_3 : Mul.{u1} P] {g : MulHom.{u2, u1} N P _inst_2 _inst_3} {f₁ : MulHom.{u3, u2} M N _inst_1 _inst_2} {f₂ : MulHom.{u3, u2} M N _inst_1 _inst_2}, (Function.Injective.{succ u2, succ u1} N P (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} N P _inst_2 _inst_3) N (fun (_x : N) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : N) => P) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} N P _inst_2 _inst_3) N P _inst_2 _inst_3 (MulHom.mulHomClass.{u2, u1} N P _inst_2 _inst_3)) g)) -> (Iff (Eq.{max (succ u3) (succ u1)} (MulHom.{u3, u1} M P _inst_1 _inst_3) (MulHom.comp.{u3, u2, u1} M N P _inst_1 _inst_2 _inst_3 g f₁) (MulHom.comp.{u3, u2, u1} M N P _inst_1 _inst_2 _inst_3 g f₂)) (Eq.{max (succ u3) (succ u2)} (MulHom.{u3, u2} M N _inst_1 _inst_2) f₁ f₂))
+  forall {M : Type.{u3}} {N : Type.{u2}} {P : Type.{u1}} [_inst_1 : Mul.{u3} M] [_inst_2 : Mul.{u2} N] [_inst_3 : Mul.{u1} P] {g : MulHom.{u2, u1} N P _inst_2 _inst_3} {f₁ : MulHom.{u3, u2} M N _inst_1 _inst_2} {f₂ : MulHom.{u3, u2} M N _inst_1 _inst_2}, (Function.Injective.{succ u2, succ u1} N P (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} N P _inst_2 _inst_3) N (fun (_x : N) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : N) => P) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} N P _inst_2 _inst_3) N P _inst_2 _inst_3 (MulHom.mulHomClass.{u2, u1} N P _inst_2 _inst_3)) g)) -> (Iff (Eq.{max (succ u3) (succ u1)} (MulHom.{u3, u1} M P _inst_1 _inst_3) (MulHom.comp.{u3, u2, u1} M N P _inst_1 _inst_2 _inst_3 g f₁) (MulHom.comp.{u3, u2, u1} M N P _inst_1 _inst_2 _inst_3 g f₂)) (Eq.{max (succ u3) (succ u2)} (MulHom.{u3, u2} M N _inst_1 _inst_2) f₁ f₂))
 Case conversion may be inaccurate. Consider using '#align mul_hom.cancel_left MulHom.cancel_leftₓ'. -/
 @[to_additive]
 theorem MulHom.cancel_left [Mul M] [Mul N] [Mul P] {g : N →ₙ* P} {f₁ f₂ : M →ₙ* N}
@@ -1864,7 +1864,7 @@ theorem MulHom.cancel_left [Mul M] [Mul N] [Mul P] {g : N →ₙ* P} {f₁ f₂
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} {P : Type.{u3}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N] [_inst_3 : MulOneClass.{u3} P] {g : MonoidHom.{u2, u3} N P _inst_2 _inst_3} {f₁ : MonoidHom.{u1, u2} M N _inst_1 _inst_2} {f₂ : MonoidHom.{u1, u2} M N _inst_1 _inst_2}, (Function.Injective.{succ u2, succ u3} N P (coeFn.{max (succ u3) (succ u2), max (succ u2) (succ u3)} (MonoidHom.{u2, u3} N P _inst_2 _inst_3) (fun (_x : MonoidHom.{u2, u3} N P _inst_2 _inst_3) => N -> P) (MonoidHom.hasCoeToFun.{u2, u3} N P _inst_2 _inst_3) g)) -> (Iff (Eq.{max (succ u3) (succ u1)} (MonoidHom.{u1, u3} M P _inst_1 _inst_3) (MonoidHom.comp.{u1, u2, u3} M N P _inst_1 _inst_2 _inst_3 g f₁) (MonoidHom.comp.{u1, u2, u3} M N P _inst_1 _inst_2 _inst_3 g f₂)) (Eq.{max (succ u2) (succ u1)} (MonoidHom.{u1, u2} M N _inst_1 _inst_2) f₁ f₂))
 but is expected to have type
-  forall {M : Type.{u3}} {N : Type.{u2}} {P : Type.{u1}} [_inst_1 : MulOneClass.{u3} M] [_inst_2 : MulOneClass.{u2} N] [_inst_3 : MulOneClass.{u1} P] {g : MonoidHom.{u2, u1} N P _inst_2 _inst_3} {f₁ : MonoidHom.{u3, u2} M N _inst_1 _inst_2} {f₂ : MonoidHom.{u3, u2} M N _inst_1 _inst_2}, (Function.Injective.{succ u2, succ u1} N P (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} N P _inst_2 _inst_3) N (fun (_x : N) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : N) => P) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} N P _inst_2 _inst_3) N P (MulOneClass.toMul.{u2} N _inst_2) (MulOneClass.toMul.{u1} P _inst_3) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} N P _inst_2 _inst_3) N P _inst_2 _inst_3 (MonoidHom.monoidHomClass.{u2, u1} N P _inst_2 _inst_3))) g)) -> (Iff (Eq.{max (succ u3) (succ u1)} (MonoidHom.{u3, u1} M P _inst_1 _inst_3) (MonoidHom.comp.{u3, u2, u1} M N P _inst_1 _inst_2 _inst_3 g f₁) (MonoidHom.comp.{u3, u2, u1} M N P _inst_1 _inst_2 _inst_3 g f₂)) (Eq.{max (succ u3) (succ u2)} (MonoidHom.{u3, u2} M N _inst_1 _inst_2) f₁ f₂))
+  forall {M : Type.{u3}} {N : Type.{u2}} {P : Type.{u1}} [_inst_1 : MulOneClass.{u3} M] [_inst_2 : MulOneClass.{u2} N] [_inst_3 : MulOneClass.{u1} P] {g : MonoidHom.{u2, u1} N P _inst_2 _inst_3} {f₁ : MonoidHom.{u3, u2} M N _inst_1 _inst_2} {f₂ : MonoidHom.{u3, u2} M N _inst_1 _inst_2}, (Function.Injective.{succ u2, succ u1} N P (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} N P _inst_2 _inst_3) N (fun (_x : N) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : N) => P) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} N P _inst_2 _inst_3) N P (MulOneClass.toMul.{u2} N _inst_2) (MulOneClass.toMul.{u1} P _inst_3) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} N P _inst_2 _inst_3) N P _inst_2 _inst_3 (MonoidHom.monoidHomClass.{u2, u1} N P _inst_2 _inst_3))) g)) -> (Iff (Eq.{max (succ u3) (succ u1)} (MonoidHom.{u3, u1} M P _inst_1 _inst_3) (MonoidHom.comp.{u3, u2, u1} M N P _inst_1 _inst_2 _inst_3 g f₁) (MonoidHom.comp.{u3, u2, u1} M N P _inst_1 _inst_2 _inst_3 g f₂)) (Eq.{max (succ u3) (succ u2)} (MonoidHom.{u3, u2} M N _inst_1 _inst_2) f₁ f₂))
 Case conversion may be inaccurate. Consider using '#align monoid_hom.cancel_left MonoidHom.cancel_leftₓ'. -/
 @[to_additive]
 theorem MonoidHom.cancel_left [MulOneClass M] [MulOneClass N] [MulOneClass P] {g : N →* P}
@@ -1878,7 +1878,7 @@ theorem MonoidHom.cancel_left [MulOneClass M] [MulOneClass N] [MulOneClass P] {g
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} {P : Type.{u3}} [_inst_1 : MulZeroOneClass.{u1} M] [_inst_2 : MulZeroOneClass.{u2} N] [_inst_3 : MulZeroOneClass.{u3} P] {g : MonoidWithZeroHom.{u2, u3} N P _inst_2 _inst_3} {f₁ : MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2} {f₂ : MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2}, (Function.Injective.{succ u2, succ u3} N P (coeFn.{max (succ u3) (succ u2), max (succ u2) (succ u3)} (MonoidWithZeroHom.{u2, u3} N P _inst_2 _inst_3) (fun (_x : MonoidWithZeroHom.{u2, u3} N P _inst_2 _inst_3) => N -> P) (MonoidWithZeroHom.hasCoeToFun.{u2, u3} N P _inst_2 _inst_3) g)) -> (Iff (Eq.{max (succ u3) (succ u1)} (MonoidWithZeroHom.{u1, u3} M P _inst_1 _inst_3) (MonoidWithZeroHom.comp.{u1, u2, u3} M N P _inst_1 _inst_2 _inst_3 g f₁) (MonoidWithZeroHom.comp.{u1, u2, u3} M N P _inst_1 _inst_2 _inst_3 g f₂)) (Eq.{max (succ u2) (succ u1)} (MonoidWithZeroHom.{u1, u2} M N _inst_1 _inst_2) f₁ f₂))
 but is expected to have type
-  forall {M : Type.{u3}} {N : Type.{u2}} {P : Type.{u1}} [_inst_1 : MulZeroOneClass.{u3} M] [_inst_2 : MulZeroOneClass.{u2} N] [_inst_3 : MulZeroOneClass.{u1} P] {g : MonoidWithZeroHom.{u2, u1} N P _inst_2 _inst_3} {f₁ : MonoidWithZeroHom.{u3, u2} M N _inst_1 _inst_2} {f₂ : MonoidWithZeroHom.{u3, u2} M N _inst_1 _inst_2}, (Function.Injective.{succ u2, succ u1} N P (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidWithZeroHom.{u2, u1} N P _inst_2 _inst_3) N (fun (_x : N) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : N) => P) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} N P _inst_2 _inst_3) N P (MulOneClass.toMul.{u2} N (MulZeroOneClass.toMulOneClass.{u2} N _inst_2)) (MulOneClass.toMul.{u1} P (MulZeroOneClass.toMulOneClass.{u1} P _inst_3)) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} N P _inst_2 _inst_3) N P (MulZeroOneClass.toMulOneClass.{u2} N _inst_2) (MulZeroOneClass.toMulOneClass.{u1} P _inst_3) (MonoidWithZeroHomClass.toMonoidHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} N P _inst_2 _inst_3) N P _inst_2 _inst_3 (MonoidWithZeroHom.monoidWithZeroHomClass.{u2, u1} N P _inst_2 _inst_3)))) g)) -> (Iff (Eq.{max (succ u3) (succ u1)} (MonoidWithZeroHom.{u3, u1} M P _inst_1 _inst_3) (MonoidWithZeroHom.comp.{u3, u2, u1} M N P _inst_1 _inst_2 _inst_3 g f₁) (MonoidWithZeroHom.comp.{u3, u2, u1} M N P _inst_1 _inst_2 _inst_3 g f₂)) (Eq.{max (succ u3) (succ u2)} (MonoidWithZeroHom.{u3, u2} M N _inst_1 _inst_2) f₁ f₂))
+  forall {M : Type.{u3}} {N : Type.{u2}} {P : Type.{u1}} [_inst_1 : MulZeroOneClass.{u3} M] [_inst_2 : MulZeroOneClass.{u2} N] [_inst_3 : MulZeroOneClass.{u1} P] {g : MonoidWithZeroHom.{u2, u1} N P _inst_2 _inst_3} {f₁ : MonoidWithZeroHom.{u3, u2} M N _inst_1 _inst_2} {f₂ : MonoidWithZeroHom.{u3, u2} M N _inst_1 _inst_2}, (Function.Injective.{succ u2, succ u1} N P (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidWithZeroHom.{u2, u1} N P _inst_2 _inst_3) N (fun (_x : N) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : N) => P) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} N P _inst_2 _inst_3) N P (MulOneClass.toMul.{u2} N (MulZeroOneClass.toMulOneClass.{u2} N _inst_2)) (MulOneClass.toMul.{u1} P (MulZeroOneClass.toMulOneClass.{u1} P _inst_3)) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} N P _inst_2 _inst_3) N P (MulZeroOneClass.toMulOneClass.{u2} N _inst_2) (MulZeroOneClass.toMulOneClass.{u1} P _inst_3) (MonoidWithZeroHomClass.toMonoidHomClass.{max u2 u1, u2, u1} (MonoidWithZeroHom.{u2, u1} N P _inst_2 _inst_3) N P _inst_2 _inst_3 (MonoidWithZeroHom.monoidWithZeroHomClass.{u2, u1} N P _inst_2 _inst_3)))) g)) -> (Iff (Eq.{max (succ u3) (succ u1)} (MonoidWithZeroHom.{u3, u1} M P _inst_1 _inst_3) (MonoidWithZeroHom.comp.{u3, u2, u1} M N P _inst_1 _inst_2 _inst_3 g f₁) (MonoidWithZeroHom.comp.{u3, u2, u1} M N P _inst_1 _inst_2 _inst_3 g f₂)) (Eq.{max (succ u3) (succ u2)} (MonoidWithZeroHom.{u3, u2} M N _inst_1 _inst_2) f₁ f₂))
 Case conversion may be inaccurate. Consider using '#align monoid_with_zero_hom.cancel_left MonoidWithZeroHom.cancel_leftₓ'. -/
 theorem MonoidWithZeroHom.cancel_left [MulZeroOneClass M] [MulZeroOneClass N] [MulZeroOneClass P]
     {g : N →*₀ P} {f₁ f₂ : M →*₀ N} (hg : Function.Injective g) : g.comp f₁ = g.comp f₂ ↔ f₁ = f₂ :=
@@ -2038,7 +2038,7 @@ theorem MonoidWithZeroHom.id_comp [MulZeroOneClass M] [MulZeroOneClass N] (f : M
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : Monoid.{u1} M] [_inst_2 : Monoid.{u2} N] (f : MonoidHom.{u1, u2} M N (Monoid.toMulOneClass.{u1} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2)) (a : M) (n : Nat), Eq.{succ u2} N (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} M N (Monoid.toMulOneClass.{u1} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2)) (fun (_x : MonoidHom.{u1, u2} M N (Monoid.toMulOneClass.{u1} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2)) => M -> N) (MonoidHom.hasCoeToFun.{u1, u2} M N (Monoid.toMulOneClass.{u1} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2)) f (HPow.hPow.{u1, 0, u1} M Nat M (instHPow.{u1, 0} M Nat (Monoid.Pow.{u1} M _inst_1)) a n)) (HPow.hPow.{u2, 0, u2} N Nat N (instHPow.{u2, 0} N Nat (Monoid.Pow.{u2} N _inst_2)) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} M N (Monoid.toMulOneClass.{u1} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2)) (fun (_x : MonoidHom.{u1, u2} M N (Monoid.toMulOneClass.{u1} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2)) => M -> N) (MonoidHom.hasCoeToFun.{u1, u2} M N (Monoid.toMulOneClass.{u1} M _inst_1) (Monoid.toMulOneClass.{u2} N _inst_2)) f a) n)
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : Monoid.{u2} M] [_inst_2 : Monoid.{u1} N] (f : MonoidHom.{u2, u1} M N (Monoid.toMulOneClass.{u2} M _inst_1) (Monoid.toMulOneClass.{u1} N _inst_2)) (a : M) (n : Nat), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) (HPow.hPow.{u2, 0, u2} M Nat M (instHPow.{u2, 0} M Nat (Monoid.Pow.{u2} M _inst_1)) a n)) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M N (Monoid.toMulOneClass.{u2} M _inst_1) (Monoid.toMulOneClass.{u1} N _inst_2)) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N (Monoid.toMulOneClass.{u2} M _inst_1) (Monoid.toMulOneClass.{u1} N _inst_2)) M N (MulOneClass.toMul.{u2} M (Monoid.toMulOneClass.{u2} M _inst_1)) (MulOneClass.toMul.{u1} N (Monoid.toMulOneClass.{u1} N _inst_2)) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N (Monoid.toMulOneClass.{u2} M _inst_1) (Monoid.toMulOneClass.{u1} N _inst_2)) M N (Monoid.toMulOneClass.{u2} M _inst_1) (Monoid.toMulOneClass.{u1} N _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N (Monoid.toMulOneClass.{u2} M _inst_1) (Monoid.toMulOneClass.{u1} N _inst_2)))) f (HPow.hPow.{u2, 0, u2} M Nat M (instHPow.{u2, 0} M Nat (Monoid.Pow.{u2} M _inst_1)) a n)) (HPow.hPow.{u1, 0, u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) a) Nat ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) a) (instHPow.{u1, 0} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) a) Nat (Monoid.Pow.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) a) _inst_2)) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M N (Monoid.toMulOneClass.{u2} M _inst_1) (Monoid.toMulOneClass.{u1} N _inst_2)) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N (Monoid.toMulOneClass.{u2} M _inst_1) (Monoid.toMulOneClass.{u1} N _inst_2)) M N (MulOneClass.toMul.{u2} M (Monoid.toMulOneClass.{u2} M _inst_1)) (MulOneClass.toMul.{u1} N (Monoid.toMulOneClass.{u1} N _inst_2)) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N (Monoid.toMulOneClass.{u2} M _inst_1) (Monoid.toMulOneClass.{u1} N _inst_2)) M N (Monoid.toMulOneClass.{u2} M _inst_1) (Monoid.toMulOneClass.{u1} N _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N (Monoid.toMulOneClass.{u2} M _inst_1) (Monoid.toMulOneClass.{u1} N _inst_2)))) f a) n)
+  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : Monoid.{u2} M] [_inst_2 : Monoid.{u1} N] (f : MonoidHom.{u2, u1} M N (Monoid.toMulOneClass.{u2} M _inst_1) (Monoid.toMulOneClass.{u1} N _inst_2)) (a : M) (n : Nat), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) (HPow.hPow.{u2, 0, u2} M Nat M (instHPow.{u2, 0} M Nat (Monoid.Pow.{u2} M _inst_1)) a n)) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M N (Monoid.toMulOneClass.{u2} M _inst_1) (Monoid.toMulOneClass.{u1} N _inst_2)) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N (Monoid.toMulOneClass.{u2} M _inst_1) (Monoid.toMulOneClass.{u1} N _inst_2)) M N (MulOneClass.toMul.{u2} M (Monoid.toMulOneClass.{u2} M _inst_1)) (MulOneClass.toMul.{u1} N (Monoid.toMulOneClass.{u1} N _inst_2)) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N (Monoid.toMulOneClass.{u2} M _inst_1) (Monoid.toMulOneClass.{u1} N _inst_2)) M N (Monoid.toMulOneClass.{u2} M _inst_1) (Monoid.toMulOneClass.{u1} N _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N (Monoid.toMulOneClass.{u2} M _inst_1) (Monoid.toMulOneClass.{u1} N _inst_2)))) f (HPow.hPow.{u2, 0, u2} M Nat M (instHPow.{u2, 0} M Nat (Monoid.Pow.{u2} M _inst_1)) a n)) (HPow.hPow.{u1, 0, u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) a) Nat ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) a) (instHPow.{u1, 0} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) a) Nat (Monoid.Pow.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) a) _inst_2)) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M N (Monoid.toMulOneClass.{u2} M _inst_1) (Monoid.toMulOneClass.{u1} N _inst_2)) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N (Monoid.toMulOneClass.{u2} M _inst_1) (Monoid.toMulOneClass.{u1} N _inst_2)) M N (MulOneClass.toMul.{u2} M (Monoid.toMulOneClass.{u2} M _inst_1)) (MulOneClass.toMul.{u1} N (Monoid.toMulOneClass.{u1} N _inst_2)) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N (Monoid.toMulOneClass.{u2} M _inst_1) (Monoid.toMulOneClass.{u1} N _inst_2)) M N (Monoid.toMulOneClass.{u2} M _inst_1) (Monoid.toMulOneClass.{u1} N _inst_2) (MonoidHom.monoidHomClass.{u2, u1} M N (Monoid.toMulOneClass.{u2} M _inst_1) (Monoid.toMulOneClass.{u1} N _inst_2)))) f a) n)
 Case conversion may be inaccurate. Consider using '#align monoid_hom.map_pow MonoidHom.map_powₓ'. -/
 @[to_additive AddMonoidHom.map_nsmul]
 protected theorem MonoidHom.map_pow [Monoid M] [Monoid N] (f : M →* N) (a : M) (n : ℕ) :
@@ -2051,7 +2051,7 @@ protected theorem MonoidHom.map_pow [Monoid M] [Monoid N] (f : M →* N) (a : M)
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : DivInvMonoid.{u1} M] [_inst_2 : DivInvMonoid.{u2} N] (f : MonoidHom.{u1, u2} M N (Monoid.toMulOneClass.{u1} M (DivInvMonoid.toMonoid.{u1} M _inst_1)) (Monoid.toMulOneClass.{u2} N (DivInvMonoid.toMonoid.{u2} N _inst_2))), (forall (x : M), Eq.{succ u2} N (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} M N (Monoid.toMulOneClass.{u1} M (DivInvMonoid.toMonoid.{u1} M _inst_1)) (Monoid.toMulOneClass.{u2} N (DivInvMonoid.toMonoid.{u2} N _inst_2))) (fun (_x : MonoidHom.{u1, u2} M N (Monoid.toMulOneClass.{u1} M (DivInvMonoid.toMonoid.{u1} M _inst_1)) (Monoid.toMulOneClass.{u2} N (DivInvMonoid.toMonoid.{u2} N _inst_2))) => M -> N) (MonoidHom.hasCoeToFun.{u1, u2} M N (Monoid.toMulOneClass.{u1} M (DivInvMonoid.toMonoid.{u1} M _inst_1)) (Monoid.toMulOneClass.{u2} N (DivInvMonoid.toMonoid.{u2} N _inst_2))) f (Inv.inv.{u1} M (DivInvMonoid.toHasInv.{u1} M _inst_1) x)) (Inv.inv.{u2} N (DivInvMonoid.toHasInv.{u2} N _inst_2) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} M N (Monoid.toMulOneClass.{u1} M (DivInvMonoid.toMonoid.{u1} M _inst_1)) (Monoid.toMulOneClass.{u2} N (DivInvMonoid.toMonoid.{u2} N _inst_2))) (fun (_x : MonoidHom.{u1, u2} M N (Monoid.toMulOneClass.{u1} M (DivInvMonoid.toMonoid.{u1} M _inst_1)) (Monoid.toMulOneClass.{u2} N (DivInvMonoid.toMonoid.{u2} N _inst_2))) => M -> N) (MonoidHom.hasCoeToFun.{u1, u2} M N (Monoid.toMulOneClass.{u1} M (DivInvMonoid.toMonoid.{u1} M _inst_1)) (Monoid.toMulOneClass.{u2} N (DivInvMonoid.toMonoid.{u2} N _inst_2))) f x))) -> (forall (a : M) (n : Int), Eq.{succ u2} N (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} M N (Monoid.toMulOneClass.{u1} M (DivInvMonoid.toMonoid.{u1} M _inst_1)) (Monoid.toMulOneClass.{u2} N (DivInvMonoid.toMonoid.{u2} N _inst_2))) (fun (_x : MonoidHom.{u1, u2} M N (Monoid.toMulOneClass.{u1} M (DivInvMonoid.toMonoid.{u1} M _inst_1)) (Monoid.toMulOneClass.{u2} N (DivInvMonoid.toMonoid.{u2} N _inst_2))) => M -> N) (MonoidHom.hasCoeToFun.{u1, u2} M N (Monoid.toMulOneClass.{u1} M (DivInvMonoid.toMonoid.{u1} M _inst_1)) (Monoid.toMulOneClass.{u2} N (DivInvMonoid.toMonoid.{u2} N _inst_2))) f (HPow.hPow.{u1, 0, u1} M Int M (instHPow.{u1, 0} M Int (DivInvMonoid.Pow.{u1} M _inst_1)) a n)) (HPow.hPow.{u2, 0, u2} N Int N (instHPow.{u2, 0} N Int (DivInvMonoid.Pow.{u2} N _inst_2)) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} M N (Monoid.toMulOneClass.{u1} M (DivInvMonoid.toMonoid.{u1} M _inst_1)) (Monoid.toMulOneClass.{u2} N (DivInvMonoid.toMonoid.{u2} N _inst_2))) (fun (_x : MonoidHom.{u1, u2} M N (Monoid.toMulOneClass.{u1} M (DivInvMonoid.toMonoid.{u1} M _inst_1)) (Monoid.toMulOneClass.{u2} N (DivInvMonoid.toMonoid.{u2} N _inst_2))) => M -> N) (MonoidHom.hasCoeToFun.{u1, u2} M N (Monoid.toMulOneClass.{u1} M (DivInvMonoid.toMonoid.{u1} M _inst_1)) (Monoid.toMulOneClass.{u2} N (DivInvMonoid.toMonoid.{u2} N _inst_2))) f a) n))
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : DivInvMonoid.{u2} M] [_inst_2 : DivInvMonoid.{u1} N] (f : MonoidHom.{u2, u1} M N (Monoid.toMulOneClass.{u2} M (DivInvMonoid.toMonoid.{u2} M _inst_1)) (Monoid.toMulOneClass.{u1} N (DivInvMonoid.toMonoid.{u1} N _inst_2))), (forall (x : M), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) (Inv.inv.{u2} M (DivInvMonoid.toInv.{u2} M _inst_1) x)) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M N (Monoid.toMulOneClass.{u2} M (DivInvMonoid.toMonoid.{u2} M _inst_1)) (Monoid.toMulOneClass.{u1} N (DivInvMonoid.toMonoid.{u1} N _inst_2))) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N (Monoid.toMulOneClass.{u2} M (DivInvMonoid.toMonoid.{u2} M _inst_1)) (Monoid.toMulOneClass.{u1} N (DivInvMonoid.toMonoid.{u1} N _inst_2))) M N (MulOneClass.toMul.{u2} M (Monoid.toMulOneClass.{u2} M (DivInvMonoid.toMonoid.{u2} M _inst_1))) (MulOneClass.toMul.{u1} N (Monoid.toMulOneClass.{u1} N (DivInvMonoid.toMonoid.{u1} N _inst_2))) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N (Monoid.toMulOneClass.{u2} M (DivInvMonoid.toMonoid.{u2} M _inst_1)) (Monoid.toMulOneClass.{u1} N (DivInvMonoid.toMonoid.{u1} N _inst_2))) M N (Monoid.toMulOneClass.{u2} M (DivInvMonoid.toMonoid.{u2} M _inst_1)) (Monoid.toMulOneClass.{u1} N (DivInvMonoid.toMonoid.{u1} N _inst_2)) (MonoidHom.monoidHomClass.{u2, u1} M N (Monoid.toMulOneClass.{u2} M (DivInvMonoid.toMonoid.{u2} M _inst_1)) (Monoid.toMulOneClass.{u1} N (DivInvMonoid.toMonoid.{u1} N _inst_2))))) f (Inv.inv.{u2} M (DivInvMonoid.toInv.{u2} M _inst_1) x)) (Inv.inv.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) x) (DivInvMonoid.toInv.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) x) _inst_2) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M N (Monoid.toMulOneClass.{u2} M (DivInvMonoid.toMonoid.{u2} M _inst_1)) (Monoid.toMulOneClass.{u1} N (DivInvMonoid.toMonoid.{u1} N _inst_2))) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N (Monoid.toMulOneClass.{u2} M (DivInvMonoid.toMonoid.{u2} M _inst_1)) (Monoid.toMulOneClass.{u1} N (DivInvMonoid.toMonoid.{u1} N _inst_2))) M N (MulOneClass.toMul.{u2} M (Monoid.toMulOneClass.{u2} M (DivInvMonoid.toMonoid.{u2} M _inst_1))) (MulOneClass.toMul.{u1} N (Monoid.toMulOneClass.{u1} N (DivInvMonoid.toMonoid.{u1} N _inst_2))) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N (Monoid.toMulOneClass.{u2} M (DivInvMonoid.toMonoid.{u2} M _inst_1)) (Monoid.toMulOneClass.{u1} N (DivInvMonoid.toMonoid.{u1} N _inst_2))) M N (Monoid.toMulOneClass.{u2} M (DivInvMonoid.toMonoid.{u2} M _inst_1)) (Monoid.toMulOneClass.{u1} N (DivInvMonoid.toMonoid.{u1} N _inst_2)) (MonoidHom.monoidHomClass.{u2, u1} M N (Monoid.toMulOneClass.{u2} M (DivInvMonoid.toMonoid.{u2} M _inst_1)) (Monoid.toMulOneClass.{u1} N (DivInvMonoid.toMonoid.{u1} N _inst_2))))) f x))) -> (forall (a : M) (n : Int), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) (HPow.hPow.{u2, 0, u2} M Int M (instHPow.{u2, 0} M Int (DivInvMonoid.Pow.{u2} M _inst_1)) a n)) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M N (Monoid.toMulOneClass.{u2} M (DivInvMonoid.toMonoid.{u2} M _inst_1)) (Monoid.toMulOneClass.{u1} N (DivInvMonoid.toMonoid.{u1} N _inst_2))) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N (Monoid.toMulOneClass.{u2} M (DivInvMonoid.toMonoid.{u2} M _inst_1)) (Monoid.toMulOneClass.{u1} N (DivInvMonoid.toMonoid.{u1} N _inst_2))) M N (MulOneClass.toMul.{u2} M (Monoid.toMulOneClass.{u2} M (DivInvMonoid.toMonoid.{u2} M _inst_1))) (MulOneClass.toMul.{u1} N (Monoid.toMulOneClass.{u1} N (DivInvMonoid.toMonoid.{u1} N _inst_2))) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N (Monoid.toMulOneClass.{u2} M (DivInvMonoid.toMonoid.{u2} M _inst_1)) (Monoid.toMulOneClass.{u1} N (DivInvMonoid.toMonoid.{u1} N _inst_2))) M N (Monoid.toMulOneClass.{u2} M (DivInvMonoid.toMonoid.{u2} M _inst_1)) (Monoid.toMulOneClass.{u1} N (DivInvMonoid.toMonoid.{u1} N _inst_2)) (MonoidHom.monoidHomClass.{u2, u1} M N (Monoid.toMulOneClass.{u2} M (DivInvMonoid.toMonoid.{u2} M _inst_1)) (Monoid.toMulOneClass.{u1} N (DivInvMonoid.toMonoid.{u1} N _inst_2))))) f (HPow.hPow.{u2, 0, u2} M Int M (instHPow.{u2, 0} M Int (DivInvMonoid.Pow.{u2} M _inst_1)) a n)) (HPow.hPow.{u1, 0, u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) a) Int ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) a) (instHPow.{u1, 0} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) a) Int (DivInvMonoid.Pow.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) a) _inst_2)) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M N (Monoid.toMulOneClass.{u2} M (DivInvMonoid.toMonoid.{u2} M _inst_1)) (Monoid.toMulOneClass.{u1} N (DivInvMonoid.toMonoid.{u1} N _inst_2))) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N (Monoid.toMulOneClass.{u2} M (DivInvMonoid.toMonoid.{u2} M _inst_1)) (Monoid.toMulOneClass.{u1} N (DivInvMonoid.toMonoid.{u1} N _inst_2))) M N (MulOneClass.toMul.{u2} M (Monoid.toMulOneClass.{u2} M (DivInvMonoid.toMonoid.{u2} M _inst_1))) (MulOneClass.toMul.{u1} N (Monoid.toMulOneClass.{u1} N (DivInvMonoid.toMonoid.{u1} N _inst_2))) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N (Monoid.toMulOneClass.{u2} M (DivInvMonoid.toMonoid.{u2} M _inst_1)) (Monoid.toMulOneClass.{u1} N (DivInvMonoid.toMonoid.{u1} N _inst_2))) M N (Monoid.toMulOneClass.{u2} M (DivInvMonoid.toMonoid.{u2} M _inst_1)) (Monoid.toMulOneClass.{u1} N (DivInvMonoid.toMonoid.{u1} N _inst_2)) (MonoidHom.monoidHomClass.{u2, u1} M N (Monoid.toMulOneClass.{u2} M (DivInvMonoid.toMonoid.{u2} M _inst_1)) (Monoid.toMulOneClass.{u1} N (DivInvMonoid.toMonoid.{u1} N _inst_2))))) f a) n))
+  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : DivInvMonoid.{u2} M] [_inst_2 : DivInvMonoid.{u1} N] (f : MonoidHom.{u2, u1} M N (Monoid.toMulOneClass.{u2} M (DivInvMonoid.toMonoid.{u2} M _inst_1)) (Monoid.toMulOneClass.{u1} N (DivInvMonoid.toMonoid.{u1} N _inst_2))), (forall (x : M), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) (Inv.inv.{u2} M (DivInvMonoid.toInv.{u2} M _inst_1) x)) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M N (Monoid.toMulOneClass.{u2} M (DivInvMonoid.toMonoid.{u2} M _inst_1)) (Monoid.toMulOneClass.{u1} N (DivInvMonoid.toMonoid.{u1} N _inst_2))) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N (Monoid.toMulOneClass.{u2} M (DivInvMonoid.toMonoid.{u2} M _inst_1)) (Monoid.toMulOneClass.{u1} N (DivInvMonoid.toMonoid.{u1} N _inst_2))) M N (MulOneClass.toMul.{u2} M (Monoid.toMulOneClass.{u2} M (DivInvMonoid.toMonoid.{u2} M _inst_1))) (MulOneClass.toMul.{u1} N (Monoid.toMulOneClass.{u1} N (DivInvMonoid.toMonoid.{u1} N _inst_2))) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N (Monoid.toMulOneClass.{u2} M (DivInvMonoid.toMonoid.{u2} M _inst_1)) (Monoid.toMulOneClass.{u1} N (DivInvMonoid.toMonoid.{u1} N _inst_2))) M N (Monoid.toMulOneClass.{u2} M (DivInvMonoid.toMonoid.{u2} M _inst_1)) (Monoid.toMulOneClass.{u1} N (DivInvMonoid.toMonoid.{u1} N _inst_2)) (MonoidHom.monoidHomClass.{u2, u1} M N (Monoid.toMulOneClass.{u2} M (DivInvMonoid.toMonoid.{u2} M _inst_1)) (Monoid.toMulOneClass.{u1} N (DivInvMonoid.toMonoid.{u1} N _inst_2))))) f (Inv.inv.{u2} M (DivInvMonoid.toInv.{u2} M _inst_1) x)) (Inv.inv.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) x) (DivInvMonoid.toInv.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) x) _inst_2) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M N (Monoid.toMulOneClass.{u2} M (DivInvMonoid.toMonoid.{u2} M _inst_1)) (Monoid.toMulOneClass.{u1} N (DivInvMonoid.toMonoid.{u1} N _inst_2))) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N (Monoid.toMulOneClass.{u2} M (DivInvMonoid.toMonoid.{u2} M _inst_1)) (Monoid.toMulOneClass.{u1} N (DivInvMonoid.toMonoid.{u1} N _inst_2))) M N (MulOneClass.toMul.{u2} M (Monoid.toMulOneClass.{u2} M (DivInvMonoid.toMonoid.{u2} M _inst_1))) (MulOneClass.toMul.{u1} N (Monoid.toMulOneClass.{u1} N (DivInvMonoid.toMonoid.{u1} N _inst_2))) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N (Monoid.toMulOneClass.{u2} M (DivInvMonoid.toMonoid.{u2} M _inst_1)) (Monoid.toMulOneClass.{u1} N (DivInvMonoid.toMonoid.{u1} N _inst_2))) M N (Monoid.toMulOneClass.{u2} M (DivInvMonoid.toMonoid.{u2} M _inst_1)) (Monoid.toMulOneClass.{u1} N (DivInvMonoid.toMonoid.{u1} N _inst_2)) (MonoidHom.monoidHomClass.{u2, u1} M N (Monoid.toMulOneClass.{u2} M (DivInvMonoid.toMonoid.{u2} M _inst_1)) (Monoid.toMulOneClass.{u1} N (DivInvMonoid.toMonoid.{u1} N _inst_2))))) f x))) -> (forall (a : M) (n : Int), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) (HPow.hPow.{u2, 0, u2} M Int M (instHPow.{u2, 0} M Int (DivInvMonoid.Pow.{u2} M _inst_1)) a n)) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M N (Monoid.toMulOneClass.{u2} M (DivInvMonoid.toMonoid.{u2} M _inst_1)) (Monoid.toMulOneClass.{u1} N (DivInvMonoid.toMonoid.{u1} N _inst_2))) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N (Monoid.toMulOneClass.{u2} M (DivInvMonoid.toMonoid.{u2} M _inst_1)) (Monoid.toMulOneClass.{u1} N (DivInvMonoid.toMonoid.{u1} N _inst_2))) M N (MulOneClass.toMul.{u2} M (Monoid.toMulOneClass.{u2} M (DivInvMonoid.toMonoid.{u2} M _inst_1))) (MulOneClass.toMul.{u1} N (Monoid.toMulOneClass.{u1} N (DivInvMonoid.toMonoid.{u1} N _inst_2))) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N (Monoid.toMulOneClass.{u2} M (DivInvMonoid.toMonoid.{u2} M _inst_1)) (Monoid.toMulOneClass.{u1} N (DivInvMonoid.toMonoid.{u1} N _inst_2))) M N (Monoid.toMulOneClass.{u2} M (DivInvMonoid.toMonoid.{u2} M _inst_1)) (Monoid.toMulOneClass.{u1} N (DivInvMonoid.toMonoid.{u1} N _inst_2)) (MonoidHom.monoidHomClass.{u2, u1} M N (Monoid.toMulOneClass.{u2} M (DivInvMonoid.toMonoid.{u2} M _inst_1)) (Monoid.toMulOneClass.{u1} N (DivInvMonoid.toMonoid.{u1} N _inst_2))))) f (HPow.hPow.{u2, 0, u2} M Int M (instHPow.{u2, 0} M Int (DivInvMonoid.Pow.{u2} M _inst_1)) a n)) (HPow.hPow.{u1, 0, u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) a) Int ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) a) (instHPow.{u1, 0} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) a) Int (DivInvMonoid.Pow.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) a) _inst_2)) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M N (Monoid.toMulOneClass.{u2} M (DivInvMonoid.toMonoid.{u2} M _inst_1)) (Monoid.toMulOneClass.{u1} N (DivInvMonoid.toMonoid.{u1} N _inst_2))) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N (Monoid.toMulOneClass.{u2} M (DivInvMonoid.toMonoid.{u2} M _inst_1)) (Monoid.toMulOneClass.{u1} N (DivInvMonoid.toMonoid.{u1} N _inst_2))) M N (MulOneClass.toMul.{u2} M (Monoid.toMulOneClass.{u2} M (DivInvMonoid.toMonoid.{u2} M _inst_1))) (MulOneClass.toMul.{u1} N (Monoid.toMulOneClass.{u1} N (DivInvMonoid.toMonoid.{u1} N _inst_2))) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N (Monoid.toMulOneClass.{u2} M (DivInvMonoid.toMonoid.{u2} M _inst_1)) (Monoid.toMulOneClass.{u1} N (DivInvMonoid.toMonoid.{u1} N _inst_2))) M N (Monoid.toMulOneClass.{u2} M (DivInvMonoid.toMonoid.{u2} M _inst_1)) (Monoid.toMulOneClass.{u1} N (DivInvMonoid.toMonoid.{u1} N _inst_2)) (MonoidHom.monoidHomClass.{u2, u1} M N (Monoid.toMulOneClass.{u2} M (DivInvMonoid.toMonoid.{u2} M _inst_1)) (Monoid.toMulOneClass.{u1} N (DivInvMonoid.toMonoid.{u1} N _inst_2))))) f a) n))
 Case conversion may be inaccurate. Consider using '#align monoid_hom.map_zpow' MonoidHom.map_zpow'ₓ'. -/
 @[to_additive]
 protected theorem MonoidHom.map_zpow' [DivInvMonoid M] [DivInvMonoid N] (f : M →* N)
@@ -2094,7 +2094,7 @@ end End
 lean 3 declaration is
   forall (M : Type.{u1}) [_inst_1 : MulOneClass.{u1} M], Eq.{succ u1} ((fun (_x : Monoid.End.{u1} M _inst_1) => M -> M) (OfNat.ofNat.{u1} (Monoid.End.{u1} M _inst_1) 1 (OfNat.mk.{u1} (Monoid.End.{u1} M _inst_1) 1 (One.one.{u1} (Monoid.End.{u1} M _inst_1) (MulOneClass.toHasOne.{u1} (Monoid.End.{u1} M _inst_1) (Monoid.toMulOneClass.{u1} (Monoid.End.{u1} M _inst_1) (Monoid.End.monoid.{u1} M _inst_1))))))) (coeFn.{succ u1, succ u1} (Monoid.End.{u1} M _inst_1) (fun (_x : Monoid.End.{u1} M _inst_1) => M -> M) (FunLike.hasCoeToFun.{succ u1, succ u1, succ u1} (Monoid.End.{u1} M _inst_1) M (fun (_x : M) => M) (MulHomClass.toFunLike.{u1, u1, u1} (Monoid.End.{u1} M _inst_1) M M (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u1} M _inst_1) (MonoidHomClass.toMulHomClass.{u1, u1, u1} (Monoid.End.{u1} M _inst_1) M M _inst_1 _inst_1 (Monoid.End.monoidHomClass.{u1} M _inst_1)))) (OfNat.ofNat.{u1} (Monoid.End.{u1} M _inst_1) 1 (OfNat.mk.{u1} (Monoid.End.{u1} M _inst_1) 1 (One.one.{u1} (Monoid.End.{u1} M _inst_1) (MulOneClass.toHasOne.{u1} (Monoid.End.{u1} M _inst_1) (Monoid.toMulOneClass.{u1} (Monoid.End.{u1} M _inst_1) (Monoid.End.monoid.{u1} M _inst_1))))))) (id.{succ u1} M)
 but is expected to have type
-  forall (M : Type.{u1}) [_inst_1 : MulOneClass.{u1} M], Eq.{succ u1} (forall (a : M), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => M) a) (FunLike.coe.{succ u1, succ u1, succ u1} (Monoid.End.{u1} M _inst_1) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => M) _x) (MulHomClass.toFunLike.{u1, u1, u1} (Monoid.End.{u1} M _inst_1) M M (MulOneClass.toMul.{u1} M _inst_1) (MulOneClass.toMul.{u1} M _inst_1) (MonoidHomClass.toMulHomClass.{u1, u1, u1} (Monoid.End.{u1} M _inst_1) M M _inst_1 _inst_1 (Monoid.End.instMonoidHomClassEnd.{u1} M _inst_1))) (OfNat.ofNat.{u1} (Monoid.End.{u1} M _inst_1) 1 (One.toOfNat1.{u1} (Monoid.End.{u1} M _inst_1) (Monoid.toOne.{u1} (Monoid.End.{u1} M _inst_1) (Monoid.End.instMonoidEnd.{u1} M _inst_1))))) (id.{succ u1} M)
+  forall (M : Type.{u1}) [_inst_1 : MulOneClass.{u1} M], Eq.{succ u1} (forall (a : M), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => M) a) (FunLike.coe.{succ u1, succ u1, succ u1} (Monoid.End.{u1} M _inst_1) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => M) _x) (MulHomClass.toFunLike.{u1, u1, u1} (Monoid.End.{u1} M _inst_1) M M (MulOneClass.toMul.{u1} M _inst_1) (MulOneClass.toMul.{u1} M _inst_1) (MonoidHomClass.toMulHomClass.{u1, u1, u1} (Monoid.End.{u1} M _inst_1) M M _inst_1 _inst_1 (Monoid.End.instMonoidHomClassEnd.{u1} M _inst_1))) (OfNat.ofNat.{u1} (Monoid.End.{u1} M _inst_1) 1 (One.toOfNat1.{u1} (Monoid.End.{u1} M _inst_1) (Monoid.toOne.{u1} (Monoid.End.{u1} M _inst_1) (Monoid.End.instMonoidEnd.{u1} M _inst_1))))) (id.{succ u1} M)
 Case conversion may be inaccurate. Consider using '#align monoid.coe_one Monoid.coe_oneₓ'. -/
 @[simp]
 theorem coe_one : ((1 : Monoid.End M) : M → M) = id :=
@@ -2105,7 +2105,7 @@ theorem coe_one : ((1 : Monoid.End M) : M → M) = id :=
 lean 3 declaration is
   forall (M : Type.{u1}) [_inst_1 : MulOneClass.{u1} M] (f : Monoid.End.{u1} M _inst_1) (g : Monoid.End.{u1} M _inst_1), Eq.{succ u1} ((fun (_x : Monoid.End.{u1} M _inst_1) => M -> M) (HMul.hMul.{u1, u1, u1} (Monoid.End.{u1} M _inst_1) (Monoid.End.{u1} M _inst_1) (Monoid.End.{u1} M _inst_1) (instHMul.{u1} (Monoid.End.{u1} M _inst_1) (MulOneClass.toHasMul.{u1} (Monoid.End.{u1} M _inst_1) (Monoid.toMulOneClass.{u1} (Monoid.End.{u1} M _inst_1) (Monoid.End.monoid.{u1} M _inst_1)))) f g)) (coeFn.{succ u1, succ u1} (Monoid.End.{u1} M _inst_1) (fun (_x : Monoid.End.{u1} M _inst_1) => M -> M) (FunLike.hasCoeToFun.{succ u1, succ u1, succ u1} (Monoid.End.{u1} M _inst_1) M (fun (_x : M) => M) (MulHomClass.toFunLike.{u1, u1, u1} (Monoid.End.{u1} M _inst_1) M M (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u1} M _inst_1) (MonoidHomClass.toMulHomClass.{u1, u1, u1} (Monoid.End.{u1} M _inst_1) M M _inst_1 _inst_1 (Monoid.End.monoidHomClass.{u1} M _inst_1)))) (HMul.hMul.{u1, u1, u1} (Monoid.End.{u1} M _inst_1) (Monoid.End.{u1} M _inst_1) (Monoid.End.{u1} M _inst_1) (instHMul.{u1} (Monoid.End.{u1} M _inst_1) (MulOneClass.toHasMul.{u1} (Monoid.End.{u1} M _inst_1) (Monoid.toMulOneClass.{u1} (Monoid.End.{u1} M _inst_1) (Monoid.End.monoid.{u1} M _inst_1)))) f g)) (Function.comp.{succ u1, succ u1, succ u1} M M M (coeFn.{succ u1, succ u1} (Monoid.End.{u1} M _inst_1) (fun (_x : Monoid.End.{u1} M _inst_1) => M -> M) (FunLike.hasCoeToFun.{succ u1, succ u1, succ u1} (Monoid.End.{u1} M _inst_1) M (fun (_x : M) => M) (MulHomClass.toFunLike.{u1, u1, u1} (Monoid.End.{u1} M _inst_1) M M (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u1} M _inst_1) (MonoidHomClass.toMulHomClass.{u1, u1, u1} (Monoid.End.{u1} M _inst_1) M M _inst_1 _inst_1 (Monoid.End.monoidHomClass.{u1} M _inst_1)))) f) (coeFn.{succ u1, succ u1} (Monoid.End.{u1} M _inst_1) (fun (_x : Monoid.End.{u1} M _inst_1) => M -> M) (FunLike.hasCoeToFun.{succ u1, succ u1, succ u1} (Monoid.End.{u1} M _inst_1) M (fun (_x : M) => M) (MulHomClass.toFunLike.{u1, u1, u1} (Monoid.End.{u1} M _inst_1) M M (MulOneClass.toHasMul.{u1} M _inst_1) (MulOneClass.toHasMul.{u1} M _inst_1) (MonoidHomClass.toMulHomClass.{u1, u1, u1} (Monoid.End.{u1} M _inst_1) M M _inst_1 _inst_1 (Monoid.End.monoidHomClass.{u1} M _inst_1)))) g))
 but is expected to have type
-  forall (M : Type.{u1}) [_inst_1 : MulOneClass.{u1} M] (f : Monoid.End.{u1} M _inst_1) (g : Monoid.End.{u1} M _inst_1), Eq.{succ u1} (forall (a : M), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => M) a) (FunLike.coe.{succ u1, succ u1, succ u1} (Monoid.End.{u1} M _inst_1) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => M) _x) (MulHomClass.toFunLike.{u1, u1, u1} (Monoid.End.{u1} M _inst_1) M M (MulOneClass.toMul.{u1} M _inst_1) (MulOneClass.toMul.{u1} M _inst_1) (MonoidHomClass.toMulHomClass.{u1, u1, u1} (Monoid.End.{u1} M _inst_1) M M _inst_1 _inst_1 (Monoid.End.instMonoidHomClassEnd.{u1} M _inst_1))) (HMul.hMul.{u1, u1, u1} (Monoid.End.{u1} M _inst_1) (Monoid.End.{u1} M _inst_1) (Monoid.End.{u1} M _inst_1) (instHMul.{u1} (Monoid.End.{u1} M _inst_1) (MulOneClass.toMul.{u1} (Monoid.End.{u1} M _inst_1) (Monoid.toMulOneClass.{u1} (Monoid.End.{u1} M _inst_1) (Monoid.End.instMonoidEnd.{u1} M _inst_1)))) f g)) (Function.comp.{succ u1, succ u1, succ u1} M M M (FunLike.coe.{succ u1, succ u1, succ u1} (Monoid.End.{u1} M _inst_1) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => M) _x) (MulHomClass.toFunLike.{u1, u1, u1} (Monoid.End.{u1} M _inst_1) M M (MulOneClass.toMul.{u1} M _inst_1) (MulOneClass.toMul.{u1} M _inst_1) (MonoidHomClass.toMulHomClass.{u1, u1, u1} (Monoid.End.{u1} M _inst_1) M M _inst_1 _inst_1 (Monoid.End.instMonoidHomClassEnd.{u1} M _inst_1))) f) (FunLike.coe.{succ u1, succ u1, succ u1} (Monoid.End.{u1} M _inst_1) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => M) _x) (MulHomClass.toFunLike.{u1, u1, u1} (Monoid.End.{u1} M _inst_1) M M (MulOneClass.toMul.{u1} M _inst_1) (MulOneClass.toMul.{u1} M _inst_1) (MonoidHomClass.toMulHomClass.{u1, u1, u1} (Monoid.End.{u1} M _inst_1) M M _inst_1 _inst_1 (Monoid.End.instMonoidHomClassEnd.{u1} M _inst_1))) g))
+  forall (M : Type.{u1}) [_inst_1 : MulOneClass.{u1} M] (f : Monoid.End.{u1} M _inst_1) (g : Monoid.End.{u1} M _inst_1), Eq.{succ u1} (forall (a : M), (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => M) a) (FunLike.coe.{succ u1, succ u1, succ u1} (Monoid.End.{u1} M _inst_1) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => M) _x) (MulHomClass.toFunLike.{u1, u1, u1} (Monoid.End.{u1} M _inst_1) M M (MulOneClass.toMul.{u1} M _inst_1) (MulOneClass.toMul.{u1} M _inst_1) (MonoidHomClass.toMulHomClass.{u1, u1, u1} (Monoid.End.{u1} M _inst_1) M M _inst_1 _inst_1 (Monoid.End.instMonoidHomClassEnd.{u1} M _inst_1))) (HMul.hMul.{u1, u1, u1} (Monoid.End.{u1} M _inst_1) (Monoid.End.{u1} M _inst_1) (Monoid.End.{u1} M _inst_1) (instHMul.{u1} (Monoid.End.{u1} M _inst_1) (MulOneClass.toMul.{u1} (Monoid.End.{u1} M _inst_1) (Monoid.toMulOneClass.{u1} (Monoid.End.{u1} M _inst_1) (Monoid.End.instMonoidEnd.{u1} M _inst_1)))) f g)) (Function.comp.{succ u1, succ u1, succ u1} M M M (FunLike.coe.{succ u1, succ u1, succ u1} (Monoid.End.{u1} M _inst_1) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => M) _x) (MulHomClass.toFunLike.{u1, u1, u1} (Monoid.End.{u1} M _inst_1) M M (MulOneClass.toMul.{u1} M _inst_1) (MulOneClass.toMul.{u1} M _inst_1) (MonoidHomClass.toMulHomClass.{u1, u1, u1} (Monoid.End.{u1} M _inst_1) M M _inst_1 _inst_1 (Monoid.End.instMonoidHomClassEnd.{u1} M _inst_1))) f) (FunLike.coe.{succ u1, succ u1, succ u1} (Monoid.End.{u1} M _inst_1) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => M) _x) (MulHomClass.toFunLike.{u1, u1, u1} (Monoid.End.{u1} M _inst_1) M M (MulOneClass.toMul.{u1} M _inst_1) (MulOneClass.toMul.{u1} M _inst_1) (MonoidHomClass.toMulHomClass.{u1, u1, u1} (Monoid.End.{u1} M _inst_1) M M _inst_1 _inst_1 (Monoid.End.instMonoidHomClassEnd.{u1} M _inst_1))) g))
 Case conversion may be inaccurate. Consider using '#align monoid.coe_mul Monoid.coe_mulₓ'. -/
 @[simp]
 theorem coe_mul (f g) : ((f * g : Monoid.End M) : M → M) = f ∘ g :=
@@ -2209,7 +2209,7 @@ theorem OneHom.one_apply [One M] [One N] (x : M) : (1 : OneHom M N) x = 1 :=
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} [_inst_1 : MulOneClass.{u1} M] [_inst_2 : MulOneClass.{u2} N] (x : M), Eq.{succ u2} N (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (fun (_x : MonoidHom.{u1, u2} M N _inst_1 _inst_2) => M -> N) (MonoidHom.hasCoeToFun.{u1, u2} M N _inst_1 _inst_2) (OfNat.ofNat.{max u2 u1} (MonoidHom.{u1, u2} M N _inst_1 _inst_2) 1 (OfNat.mk.{max u2 u1} (MonoidHom.{u1, u2} M N _inst_1 _inst_2) 1 (One.one.{max u2 u1} (MonoidHom.{u1, u2} M N _inst_1 _inst_2) (MonoidHom.hasOne.{u1, u2} M N _inst_1 _inst_2)))) x) (OfNat.ofNat.{u2} N 1 (OfNat.mk.{u2} N 1 (One.one.{u2} N (MulOneClass.toHasOne.{u2} N _inst_2))))
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u1} N] (x : M), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2))) (OfNat.ofNat.{max u2 u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) 1 (One.toOfNat1.{max u2 u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (instOneMonoidHom.{u2, u1} M N _inst_1 _inst_2))) x) (OfNat.ofNat.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) x) 1 (One.toOfNat1.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) x) (MulOneClass.toOne.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) x) _inst_2)))
+  forall {M : Type.{u2}} {N : Type.{u1}} [_inst_1 : MulOneClass.{u2} M] [_inst_2 : MulOneClass.{u1} N] (x : M), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N (MulOneClass.toMul.{u2} M _inst_1) (MulOneClass.toMul.{u1} N _inst_2) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) M N _inst_1 _inst_2 (MonoidHom.monoidHomClass.{u2, u1} M N _inst_1 _inst_2))) (OfNat.ofNat.{max u2 u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) 1 (One.toOfNat1.{max u2 u1} (MonoidHom.{u2, u1} M N _inst_1 _inst_2) (instOneMonoidHom.{u2, u1} M N _inst_1 _inst_2))) x) (OfNat.ofNat.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) x) 1 (One.toOfNat1.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) x) (MulOneClass.toOne.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) x) _inst_2)))
 Case conversion may be inaccurate. Consider using '#align monoid_hom.one_apply MonoidHom.one_applyₓ'. -/
 @[simp, to_additive]
 theorem MonoidHom.one_apply [MulOneClass M] [MulOneClass N] (x : M) : (1 : M →* N) x = 1 :=
@@ -2279,7 +2279,7 @@ add_decl_doc AddHom.hasAdd
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} {mM : Mul.{u1} M} {mN : CommSemigroup.{u2} N} (f : MulHom.{u1, u2} M N mM (Semigroup.toHasMul.{u2} N (CommSemigroup.toSemigroup.{u2} N mN))) (g : MulHom.{u1, u2} M N mM (Semigroup.toHasMul.{u2} N (CommSemigroup.toSemigroup.{u2} N mN))) (x : M), Eq.{succ u2} N (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MulHom.{u1, u2} M N mM (Semigroup.toHasMul.{u2} N (CommSemigroup.toSemigroup.{u2} N mN))) (fun (_x : MulHom.{u1, u2} M N mM (Semigroup.toHasMul.{u2} N (CommSemigroup.toSemigroup.{u2} N mN))) => M -> N) (MulHom.hasCoeToFun.{u1, u2} M N mM (Semigroup.toHasMul.{u2} N (CommSemigroup.toSemigroup.{u2} N mN))) (HMul.hMul.{max u2 u1, max u2 u1, max u2 u1} (MulHom.{u1, u2} M N mM (Semigroup.toHasMul.{u2} N (CommSemigroup.toSemigroup.{u2} N mN))) (MulHom.{u1, u2} M N mM (Semigroup.toHasMul.{u2} N (CommSemigroup.toSemigroup.{u2} N mN))) (MulHom.{u1, u2} M N mM (Semigroup.toHasMul.{u2} N (CommSemigroup.toSemigroup.{u2} N mN))) (instHMul.{max u2 u1} (MulHom.{u1, u2} M N mM (Semigroup.toHasMul.{u2} N (CommSemigroup.toSemigroup.{u2} N mN))) (MulHom.hasMul.{u1, u2} M N mM mN)) f g) x) (HMul.hMul.{u2, u2, u2} N N N (instHMul.{u2} N (Semigroup.toHasMul.{u2} N (CommSemigroup.toSemigroup.{u2} N mN))) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MulHom.{u1, u2} M N mM (Semigroup.toHasMul.{u2} N (CommSemigroup.toSemigroup.{u2} N mN))) (fun (_x : MulHom.{u1, u2} M N mM (Semigroup.toHasMul.{u2} N (CommSemigroup.toSemigroup.{u2} N mN))) => M -> N) (MulHom.hasCoeToFun.{u1, u2} M N mM (Semigroup.toHasMul.{u2} N (CommSemigroup.toSemigroup.{u2} N mN))) f x) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MulHom.{u1, u2} M N mM (Semigroup.toHasMul.{u2} N (CommSemigroup.toSemigroup.{u2} N mN))) (fun (_x : MulHom.{u1, u2} M N mM (Semigroup.toHasMul.{u2} N (CommSemigroup.toSemigroup.{u2} N mN))) => M -> N) (MulHom.hasCoeToFun.{u1, u2} M N mM (Semigroup.toHasMul.{u2} N (CommSemigroup.toSemigroup.{u2} N mN))) g x))
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} {mM : Mul.{u2} M} {mN : CommSemigroup.{u1} N} (f : MulHom.{u2, u1} M N mM (Semigroup.toMul.{u1} N (CommSemigroup.toSemigroup.{u1} N mN))) (g : MulHom.{u2, u1} M N mM (Semigroup.toMul.{u1} N (CommSemigroup.toSemigroup.{u1} N mN))) (x : M), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N mM (Semigroup.toMul.{u1} N (CommSemigroup.toSemigroup.{u1} N mN))) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N mM (Semigroup.toMul.{u1} N (CommSemigroup.toSemigroup.{u1} N mN))) M N mM (Semigroup.toMul.{u1} N (CommSemigroup.toSemigroup.{u1} N mN)) (MulHom.mulHomClass.{u2, u1} M N mM (Semigroup.toMul.{u1} N (CommSemigroup.toSemigroup.{u1} N mN)))) (HMul.hMul.{max u2 u1, max u2 u1, max u2 u1} (MulHom.{u2, u1} M N mM (Semigroup.toMul.{u1} N (CommSemigroup.toSemigroup.{u1} N mN))) (MulHom.{u2, u1} M N mM (Semigroup.toMul.{u1} N (CommSemigroup.toSemigroup.{u1} N mN))) (MulHom.{u2, u1} M N mM (Semigroup.toMul.{u1} N (CommSemigroup.toSemigroup.{u1} N mN))) (instHMul.{max u2 u1} (MulHom.{u2, u1} M N mM (Semigroup.toMul.{u1} N (CommSemigroup.toSemigroup.{u1} N mN))) (MulHom.instMulMulHomToMulToSemigroup.{u2, u1} M N mM mN)) f g) x) (HMul.hMul.{u1, u1, u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) x) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) x) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) x) (instHMul.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) x) (Semigroup.toMul.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) x) (CommSemigroup.toSemigroup.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) x) mN))) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N mM (Semigroup.toMul.{u1} N (CommSemigroup.toSemigroup.{u1} N mN))) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N mM (Semigroup.toMul.{u1} N (CommSemigroup.toSemigroup.{u1} N mN))) M N mM (Semigroup.toMul.{u1} N (CommSemigroup.toSemigroup.{u1} N mN)) (MulHom.mulHomClass.{u2, u1} M N mM (Semigroup.toMul.{u1} N (CommSemigroup.toSemigroup.{u1} N mN)))) f x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N mM (Semigroup.toMul.{u1} N (CommSemigroup.toSemigroup.{u1} N mN))) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N mM (Semigroup.toMul.{u1} N (CommSemigroup.toSemigroup.{u1} N mN))) M N mM (Semigroup.toMul.{u1} N (CommSemigroup.toSemigroup.{u1} N mN)) (MulHom.mulHomClass.{u2, u1} M N mM (Semigroup.toMul.{u1} N (CommSemigroup.toSemigroup.{u1} N mN)))) g x))
+  forall {M : Type.{u2}} {N : Type.{u1}} {mM : Mul.{u2} M} {mN : CommSemigroup.{u1} N} (f : MulHom.{u2, u1} M N mM (Semigroup.toMul.{u1} N (CommSemigroup.toSemigroup.{u1} N mN))) (g : MulHom.{u2, u1} M N mM (Semigroup.toMul.{u1} N (CommSemigroup.toSemigroup.{u1} N mN))) (x : M), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N mM (Semigroup.toMul.{u1} N (CommSemigroup.toSemigroup.{u1} N mN))) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N mM (Semigroup.toMul.{u1} N (CommSemigroup.toSemigroup.{u1} N mN))) M N mM (Semigroup.toMul.{u1} N (CommSemigroup.toSemigroup.{u1} N mN)) (MulHom.mulHomClass.{u2, u1} M N mM (Semigroup.toMul.{u1} N (CommSemigroup.toSemigroup.{u1} N mN)))) (HMul.hMul.{max u2 u1, max u2 u1, max u2 u1} (MulHom.{u2, u1} M N mM (Semigroup.toMul.{u1} N (CommSemigroup.toSemigroup.{u1} N mN))) (MulHom.{u2, u1} M N mM (Semigroup.toMul.{u1} N (CommSemigroup.toSemigroup.{u1} N mN))) (MulHom.{u2, u1} M N mM (Semigroup.toMul.{u1} N (CommSemigroup.toSemigroup.{u1} N mN))) (instHMul.{max u2 u1} (MulHom.{u2, u1} M N mM (Semigroup.toMul.{u1} N (CommSemigroup.toSemigroup.{u1} N mN))) (MulHom.instMulMulHomToMulToSemigroup.{u2, u1} M N mM mN)) f g) x) (HMul.hMul.{u1, u1, u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) x) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) x) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) x) (instHMul.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) x) (Semigroup.toMul.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) x) (CommSemigroup.toSemigroup.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) x) mN))) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N mM (Semigroup.toMul.{u1} N (CommSemigroup.toSemigroup.{u1} N mN))) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N mM (Semigroup.toMul.{u1} N (CommSemigroup.toSemigroup.{u1} N mN))) M N mM (Semigroup.toMul.{u1} N (CommSemigroup.toSemigroup.{u1} N mN)) (MulHom.mulHomClass.{u2, u1} M N mM (Semigroup.toMul.{u1} N (CommSemigroup.toSemigroup.{u1} N mN)))) f x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MulHom.{u2, u1} M N mM (Semigroup.toMul.{u1} N (CommSemigroup.toSemigroup.{u1} N mN))) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MulHom.{u2, u1} M N mM (Semigroup.toMul.{u1} N (CommSemigroup.toSemigroup.{u1} N mN))) M N mM (Semigroup.toMul.{u1} N (CommSemigroup.toSemigroup.{u1} N mN)) (MulHom.mulHomClass.{u2, u1} M N mM (Semigroup.toMul.{u1} N (CommSemigroup.toSemigroup.{u1} N mN)))) g x))
 Case conversion may be inaccurate. Consider using '#align mul_hom.mul_apply MulHom.mul_applyₓ'. -/
 @[simp, to_additive]
 theorem mul_apply {M N} {mM : Mul M} {mN : CommSemigroup N} (f g : M →ₙ* N) (x : M) :
@@ -2342,7 +2342,7 @@ add_decl_doc AddMonoidHom.hasAdd
 lean 3 declaration is
   forall {M : Type.{u1}} {N : Type.{u2}} {mM : MulOneClass.{u1} M} {mN : CommMonoid.{u2} N} (f : MonoidHom.{u1, u2} M N mM (Monoid.toMulOneClass.{u2} N (CommMonoid.toMonoid.{u2} N mN))) (g : MonoidHom.{u1, u2} M N mM (Monoid.toMulOneClass.{u2} N (CommMonoid.toMonoid.{u2} N mN))) (x : M), Eq.{succ u2} N (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} M N mM (Monoid.toMulOneClass.{u2} N (CommMonoid.toMonoid.{u2} N mN))) (fun (_x : MonoidHom.{u1, u2} M N mM (Monoid.toMulOneClass.{u2} N (CommMonoid.toMonoid.{u2} N mN))) => M -> N) (MonoidHom.hasCoeToFun.{u1, u2} M N mM (Monoid.toMulOneClass.{u2} N (CommMonoid.toMonoid.{u2} N mN))) (HMul.hMul.{max u2 u1, max u2 u1, max u2 u1} (MonoidHom.{u1, u2} M N mM (Monoid.toMulOneClass.{u2} N (CommMonoid.toMonoid.{u2} N mN))) (MonoidHom.{u1, u2} M N mM (Monoid.toMulOneClass.{u2} N (CommMonoid.toMonoid.{u2} N mN))) (MonoidHom.{u1, u2} M N mM (Monoid.toMulOneClass.{u2} N (CommMonoid.toMonoid.{u2} N mN))) (instHMul.{max u2 u1} (MonoidHom.{u1, u2} M N mM (Monoid.toMulOneClass.{u2} N (CommMonoid.toMonoid.{u2} N mN))) (MonoidHom.hasMul.{u1, u2} M N mM mN)) f g) x) (HMul.hMul.{u2, u2, u2} N N N (instHMul.{u2} N (MulOneClass.toHasMul.{u2} N (Monoid.toMulOneClass.{u2} N (CommMonoid.toMonoid.{u2} N mN)))) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} M N mM (Monoid.toMulOneClass.{u2} N (CommMonoid.toMonoid.{u2} N mN))) (fun (_x : MonoidHom.{u1, u2} M N mM (Monoid.toMulOneClass.{u2} N (CommMonoid.toMonoid.{u2} N mN))) => M -> N) (MonoidHom.hasCoeToFun.{u1, u2} M N mM (Monoid.toMulOneClass.{u2} N (CommMonoid.toMonoid.{u2} N mN))) f x) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} M N mM (Monoid.toMulOneClass.{u2} N (CommMonoid.toMonoid.{u2} N mN))) (fun (_x : MonoidHom.{u1, u2} M N mM (Monoid.toMulOneClass.{u2} N (CommMonoid.toMonoid.{u2} N mN))) => M -> N) (MonoidHom.hasCoeToFun.{u1, u2} M N mM (Monoid.toMulOneClass.{u2} N (CommMonoid.toMonoid.{u2} N mN))) g x))
 but is expected to have type
-  forall {M : Type.{u2}} {N : Type.{u1}} {mM : MulOneClass.{u2} M} {mN : CommMonoid.{u1} N} (f : MonoidHom.{u2, u1} M N mM (Monoid.toMulOneClass.{u1} N (CommMonoid.toMonoid.{u1} N mN))) (g : MonoidHom.{u2, u1} M N mM (Monoid.toMulOneClass.{u1} N (CommMonoid.toMonoid.{u1} N mN))) (x : M), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M N mM (Monoid.toMulOneClass.{u1} N (CommMonoid.toMonoid.{u1} N mN))) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N mM (Monoid.toMulOneClass.{u1} N (CommMonoid.toMonoid.{u1} N mN))) M N (MulOneClass.toMul.{u2} M mM) (MulOneClass.toMul.{u1} N (Monoid.toMulOneClass.{u1} N (CommMonoid.toMonoid.{u1} N mN))) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N mM (Monoid.toMulOneClass.{u1} N (CommMonoid.toMonoid.{u1} N mN))) M N mM (Monoid.toMulOneClass.{u1} N (CommMonoid.toMonoid.{u1} N mN)) (MonoidHom.monoidHomClass.{u2, u1} M N mM (Monoid.toMulOneClass.{u1} N (CommMonoid.toMonoid.{u1} N mN))))) (HMul.hMul.{max u2 u1, max u2 u1, max u2 u1} (MonoidHom.{u2, u1} M N mM (Monoid.toMulOneClass.{u1} N (CommMonoid.toMonoid.{u1} N mN))) (MonoidHom.{u2, u1} M N mM (Monoid.toMulOneClass.{u1} N (CommMonoid.toMonoid.{u1} N mN))) (MonoidHom.{u2, u1} M N mM (Monoid.toMulOneClass.{u1} N (CommMonoid.toMonoid.{u1} N mN))) (instHMul.{max u2 u1} (MonoidHom.{u2, u1} M N mM (Monoid.toMulOneClass.{u1} N (CommMonoid.toMonoid.{u1} N mN))) (MonoidHom.mul.{u2, u1} M N mM mN)) f g) x) (HMul.hMul.{u1, u1, u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) x) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) x) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) x) (instHMul.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) x) (MulOneClass.toMul.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) x) (Monoid.toMulOneClass.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) x) (CommMonoid.toMonoid.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) x) mN)))) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M N mM (Monoid.toMulOneClass.{u1} N (CommMonoid.toMonoid.{u1} N mN))) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N mM (Monoid.toMulOneClass.{u1} N (CommMonoid.toMonoid.{u1} N mN))) M N (MulOneClass.toMul.{u2} M mM) (MulOneClass.toMul.{u1} N (Monoid.toMulOneClass.{u1} N (CommMonoid.toMonoid.{u1} N mN))) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N mM (Monoid.toMulOneClass.{u1} N (CommMonoid.toMonoid.{u1} N mN))) M N mM (Monoid.toMulOneClass.{u1} N (CommMonoid.toMonoid.{u1} N mN)) (MonoidHom.monoidHomClass.{u2, u1} M N mM (Monoid.toMulOneClass.{u1} N (CommMonoid.toMonoid.{u1} N mN))))) f x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M N mM (Monoid.toMulOneClass.{u1} N (CommMonoid.toMonoid.{u1} N mN))) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N mM (Monoid.toMulOneClass.{u1} N (CommMonoid.toMonoid.{u1} N mN))) M N (MulOneClass.toMul.{u2} M mM) (MulOneClass.toMul.{u1} N (Monoid.toMulOneClass.{u1} N (CommMonoid.toMonoid.{u1} N mN))) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N mM (Monoid.toMulOneClass.{u1} N (CommMonoid.toMonoid.{u1} N mN))) M N mM (Monoid.toMulOneClass.{u1} N (CommMonoid.toMonoid.{u1} N mN)) (MonoidHom.monoidHomClass.{u2, u1} M N mM (Monoid.toMulOneClass.{u1} N (CommMonoid.toMonoid.{u1} N mN))))) g x))
+  forall {M : Type.{u2}} {N : Type.{u1}} {mM : MulOneClass.{u2} M} {mN : CommMonoid.{u1} N} (f : MonoidHom.{u2, u1} M N mM (Monoid.toMulOneClass.{u1} N (CommMonoid.toMonoid.{u1} N mN))) (g : MonoidHom.{u2, u1} M N mM (Monoid.toMulOneClass.{u1} N (CommMonoid.toMonoid.{u1} N mN))) (x : M), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M N mM (Monoid.toMulOneClass.{u1} N (CommMonoid.toMonoid.{u1} N mN))) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N mM (Monoid.toMulOneClass.{u1} N (CommMonoid.toMonoid.{u1} N mN))) M N (MulOneClass.toMul.{u2} M mM) (MulOneClass.toMul.{u1} N (Monoid.toMulOneClass.{u1} N (CommMonoid.toMonoid.{u1} N mN))) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N mM (Monoid.toMulOneClass.{u1} N (CommMonoid.toMonoid.{u1} N mN))) M N mM (Monoid.toMulOneClass.{u1} N (CommMonoid.toMonoid.{u1} N mN)) (MonoidHom.monoidHomClass.{u2, u1} M N mM (Monoid.toMulOneClass.{u1} N (CommMonoid.toMonoid.{u1} N mN))))) (HMul.hMul.{max u2 u1, max u2 u1, max u2 u1} (MonoidHom.{u2, u1} M N mM (Monoid.toMulOneClass.{u1} N (CommMonoid.toMonoid.{u1} N mN))) (MonoidHom.{u2, u1} M N mM (Monoid.toMulOneClass.{u1} N (CommMonoid.toMonoid.{u1} N mN))) (MonoidHom.{u2, u1} M N mM (Monoid.toMulOneClass.{u1} N (CommMonoid.toMonoid.{u1} N mN))) (instHMul.{max u2 u1} (MonoidHom.{u2, u1} M N mM (Monoid.toMulOneClass.{u1} N (CommMonoid.toMonoid.{u1} N mN))) (MonoidHom.mul.{u2, u1} M N mM mN)) f g) x) (HMul.hMul.{u1, u1, u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) x) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) x) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) x) (instHMul.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) x) (MulOneClass.toMul.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) x) (Monoid.toMulOneClass.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) x) (CommMonoid.toMonoid.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) x) mN)))) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M N mM (Monoid.toMulOneClass.{u1} N (CommMonoid.toMonoid.{u1} N mN))) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N mM (Monoid.toMulOneClass.{u1} N (CommMonoid.toMonoid.{u1} N mN))) M N (MulOneClass.toMul.{u2} M mM) (MulOneClass.toMul.{u1} N (Monoid.toMulOneClass.{u1} N (CommMonoid.toMonoid.{u1} N mN))) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N mM (Monoid.toMulOneClass.{u1} N (CommMonoid.toMonoid.{u1} N mN))) M N mM (Monoid.toMulOneClass.{u1} N (CommMonoid.toMonoid.{u1} N mN)) (MonoidHom.monoidHomClass.{u2, u1} M N mM (Monoid.toMulOneClass.{u1} N (CommMonoid.toMonoid.{u1} N mN))))) f x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M N mM (Monoid.toMulOneClass.{u1} N (CommMonoid.toMonoid.{u1} N mN))) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => N) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N mM (Monoid.toMulOneClass.{u1} N (CommMonoid.toMonoid.{u1} N mN))) M N (MulOneClass.toMul.{u2} M mM) (MulOneClass.toMul.{u1} N (Monoid.toMulOneClass.{u1} N (CommMonoid.toMonoid.{u1} N mN))) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M N mM (Monoid.toMulOneClass.{u1} N (CommMonoid.toMonoid.{u1} N mN))) M N mM (Monoid.toMulOneClass.{u1} N (CommMonoid.toMonoid.{u1} N mN)) (MonoidHom.monoidHomClass.{u2, u1} M N mM (Monoid.toMulOneClass.{u1} N (CommMonoid.toMonoid.{u1} N mN))))) g x))
 Case conversion may be inaccurate. Consider using '#align monoid_hom.mul_apply MonoidHom.mul_applyₓ'. -/
 @[simp, to_additive]
 theorem mul_apply {M N} {mM : MulOneClass M} {mN : CommMonoid N} (f g : M →* N) (x : M) :
@@ -2409,7 +2409,7 @@ theorem comp_mul [MulOneClass M] [CommMonoid N] [CommMonoid P] (g : N →* P) (f
 lean 3 declaration is
   forall {α : Type.{u1}} {β : Type.{u2}} [_inst_3 : Group.{u1} α] [_inst_4 : DivisionMonoid.{u2} β] (f : MonoidHom.{u1, u2} α β (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3))) (Monoid.toMulOneClass.{u2} β (DivInvMonoid.toMonoid.{u2} β (DivisionMonoid.toDivInvMonoid.{u2} β _inst_4)))) (a : α), Eq.{succ u2} β (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} α β (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3))) (Monoid.toMulOneClass.{u2} β (DivInvMonoid.toMonoid.{u2} β (DivisionMonoid.toDivInvMonoid.{u2} β _inst_4)))) (fun (_x : MonoidHom.{u1, u2} α β (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3))) (Monoid.toMulOneClass.{u2} β (DivInvMonoid.toMonoid.{u2} β (DivisionMonoid.toDivInvMonoid.{u2} β _inst_4)))) => α -> β) (MonoidHom.hasCoeToFun.{u1, u2} α β (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3))) (Monoid.toMulOneClass.{u2} β (DivInvMonoid.toMonoid.{u2} β (DivisionMonoid.toDivInvMonoid.{u2} β _inst_4)))) f (Inv.inv.{u1} α (DivInvMonoid.toHasInv.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3)) a)) (Inv.inv.{u2} β (DivInvMonoid.toHasInv.{u2} β (DivisionMonoid.toDivInvMonoid.{u2} β _inst_4)) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} α β (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3))) (Monoid.toMulOneClass.{u2} β (DivInvMonoid.toMonoid.{u2} β (DivisionMonoid.toDivInvMonoid.{u2} β _inst_4)))) (fun (_x : MonoidHom.{u1, u2} α β (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3))) (Monoid.toMulOneClass.{u2} β (DivInvMonoid.toMonoid.{u2} β (DivisionMonoid.toDivInvMonoid.{u2} β _inst_4)))) => α -> β) (MonoidHom.hasCoeToFun.{u1, u2} α β (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3))) (Monoid.toMulOneClass.{u2} β (DivInvMonoid.toMonoid.{u2} β (DivisionMonoid.toDivInvMonoid.{u2} β _inst_4)))) f a))
 but is expected to have type
-  forall {α : Type.{u2}} {β : Type.{u1}} [_inst_3 : Group.{u2} α] [_inst_4 : DivisionMonoid.{u1} β] (f : MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) (a : α), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : α) => β) (Inv.inv.{u2} α (InvOneClass.toInv.{u2} α (DivInvOneMonoid.toInvOneClass.{u2} α (DivisionMonoid.toDivInvOneMonoid.{u2} α (Group.toDivisionMonoid.{u2} α _inst_3)))) a)) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : α) => β) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) α β (MulOneClass.toMul.{u2} α (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3)))) (MulOneClass.toMul.{u1} β (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4))) (MonoidHom.monoidHomClass.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))))) f (Inv.inv.{u2} α (InvOneClass.toInv.{u2} α (DivInvOneMonoid.toInvOneClass.{u2} α (DivisionMonoid.toDivInvOneMonoid.{u2} α (Group.toDivisionMonoid.{u2} α _inst_3)))) a)) (Inv.inv.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : α) => β) a) (InvOneClass.toInv.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : α) => β) a) (DivInvOneMonoid.toInvOneClass.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : α) => β) a) (DivisionMonoid.toDivInvOneMonoid.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : α) => β) a) _inst_4))) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : α) => β) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) α β (MulOneClass.toMul.{u2} α (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3)))) (MulOneClass.toMul.{u1} β (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4))) (MonoidHom.monoidHomClass.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))))) f a))
+  forall {α : Type.{u2}} {β : Type.{u1}} [_inst_3 : Group.{u2} α] [_inst_4 : DivisionMonoid.{u1} β] (f : MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) (a : α), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : α) => β) (Inv.inv.{u2} α (InvOneClass.toInv.{u2} α (DivInvOneMonoid.toInvOneClass.{u2} α (DivisionMonoid.toDivInvOneMonoid.{u2} α (Group.toDivisionMonoid.{u2} α _inst_3)))) a)) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : α) => β) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) α β (MulOneClass.toMul.{u2} α (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3)))) (MulOneClass.toMul.{u1} β (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4))) (MonoidHom.monoidHomClass.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))))) f (Inv.inv.{u2} α (InvOneClass.toInv.{u2} α (DivInvOneMonoid.toInvOneClass.{u2} α (DivisionMonoid.toDivInvOneMonoid.{u2} α (Group.toDivisionMonoid.{u2} α _inst_3)))) a)) (Inv.inv.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : α) => β) a) (InvOneClass.toInv.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : α) => β) a) (DivInvOneMonoid.toInvOneClass.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : α) => β) a) (DivisionMonoid.toDivInvOneMonoid.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : α) => β) a) _inst_4))) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : α) => β) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) α β (MulOneClass.toMul.{u2} α (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3)))) (MulOneClass.toMul.{u1} β (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4))) (MonoidHom.monoidHomClass.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))))) f a))
 Case conversion may be inaccurate. Consider using '#align monoid_hom.map_inv MonoidHom.map_invₓ'. -/
 /-- Group homomorphisms preserve inverse. -/
 @[to_additive "Additive group homomorphisms preserve negation."]
@@ -2422,7 +2422,7 @@ protected theorem map_inv [Group α] [DivisionMonoid β] (f : α →* β) (a : 
 lean 3 declaration is
   forall {α : Type.{u1}} {β : Type.{u2}} [_inst_3 : Group.{u1} α] [_inst_4 : DivisionMonoid.{u2} β] (f : MonoidHom.{u1, u2} α β (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3))) (Monoid.toMulOneClass.{u2} β (DivInvMonoid.toMonoid.{u2} β (DivisionMonoid.toDivInvMonoid.{u2} β _inst_4)))) (g : α) (n : Int), Eq.{succ u2} β (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} α β (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3))) (Monoid.toMulOneClass.{u2} β (DivInvMonoid.toMonoid.{u2} β (DivisionMonoid.toDivInvMonoid.{u2} β _inst_4)))) (fun (_x : MonoidHom.{u1, u2} α β (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3))) (Monoid.toMulOneClass.{u2} β (DivInvMonoid.toMonoid.{u2} β (DivisionMonoid.toDivInvMonoid.{u2} β _inst_4)))) => α -> β) (MonoidHom.hasCoeToFun.{u1, u2} α β (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3))) (Monoid.toMulOneClass.{u2} β (DivInvMonoid.toMonoid.{u2} β (DivisionMonoid.toDivInvMonoid.{u2} β _inst_4)))) f (HPow.hPow.{u1, 0, u1} α Int α (instHPow.{u1, 0} α Int (DivInvMonoid.Pow.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3))) g n)) (HPow.hPow.{u2, 0, u2} β Int β (instHPow.{u2, 0} β Int (DivInvMonoid.Pow.{u2} β (DivisionMonoid.toDivInvMonoid.{u2} β _inst_4))) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} α β (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3))) (Monoid.toMulOneClass.{u2} β (DivInvMonoid.toMonoid.{u2} β (DivisionMonoid.toDivInvMonoid.{u2} β _inst_4)))) (fun (_x : MonoidHom.{u1, u2} α β (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3))) (Monoid.toMulOneClass.{u2} β (DivInvMonoid.toMonoid.{u2} β (DivisionMonoid.toDivInvMonoid.{u2} β _inst_4)))) => α -> β) (MonoidHom.hasCoeToFun.{u1, u2} α β (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3))) (Monoid.toMulOneClass.{u2} β (DivInvMonoid.toMonoid.{u2} β (DivisionMonoid.toDivInvMonoid.{u2} β _inst_4)))) f g) n)
 but is expected to have type
-  forall {α : Type.{u2}} {β : Type.{u1}} [_inst_3 : Group.{u2} α] [_inst_4 : DivisionMonoid.{u1} β] (f : MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) (g : α) (n : Int), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : α) => β) (HPow.hPow.{u2, 0, u2} α Int α (instHPow.{u2, 0} α Int (DivInvMonoid.Pow.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) g n)) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : α) => β) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) α β (MulOneClass.toMul.{u2} α (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3)))) (MulOneClass.toMul.{u1} β (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4))) (MonoidHom.monoidHomClass.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))))) f (HPow.hPow.{u2, 0, u2} α Int α (instHPow.{u2, 0} α Int (DivInvMonoid.Pow.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) g n)) (HPow.hPow.{u1, 0, u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : α) => β) g) Int ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : α) => β) g) (instHPow.{u1, 0} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : α) => β) g) Int (DivInvMonoid.Pow.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : α) => β) g) (DivisionMonoid.toDivInvMonoid.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : α) => β) g) _inst_4))) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : α) => β) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) α β (MulOneClass.toMul.{u2} α (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3)))) (MulOneClass.toMul.{u1} β (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4))) (MonoidHom.monoidHomClass.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))))) f g) n)
+  forall {α : Type.{u2}} {β : Type.{u1}} [_inst_3 : Group.{u2} α] [_inst_4 : DivisionMonoid.{u1} β] (f : MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) (g : α) (n : Int), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : α) => β) (HPow.hPow.{u2, 0, u2} α Int α (instHPow.{u2, 0} α Int (DivInvMonoid.Pow.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) g n)) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : α) => β) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) α β (MulOneClass.toMul.{u2} α (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3)))) (MulOneClass.toMul.{u1} β (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4))) (MonoidHom.monoidHomClass.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))))) f (HPow.hPow.{u2, 0, u2} α Int α (instHPow.{u2, 0} α Int (DivInvMonoid.Pow.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) g n)) (HPow.hPow.{u1, 0, u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : α) => β) g) Int ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : α) => β) g) (instHPow.{u1, 0} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : α) => β) g) Int (DivInvMonoid.Pow.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : α) => β) g) (DivisionMonoid.toDivInvMonoid.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : α) => β) g) _inst_4))) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : α) => β) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) α β (MulOneClass.toMul.{u2} α (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3)))) (MulOneClass.toMul.{u1} β (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4))) (MonoidHom.monoidHomClass.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))))) f g) n)
 Case conversion may be inaccurate. Consider using '#align monoid_hom.map_zpow MonoidHom.map_zpowₓ'. -/
 /-- Group homomorphisms preserve integer power. -/
 @[to_additive "Additive group homomorphisms preserve integer scaling."]
@@ -2436,7 +2436,7 @@ protected theorem map_zpow [Group α] [DivisionMonoid β] (f : α →* β) (g :
 lean 3 declaration is
   forall {α : Type.{u1}} {β : Type.{u2}} [_inst_3 : Group.{u1} α] [_inst_4 : DivisionMonoid.{u2} β] (f : MonoidHom.{u1, u2} α β (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3))) (Monoid.toMulOneClass.{u2} β (DivInvMonoid.toMonoid.{u2} β (DivisionMonoid.toDivInvMonoid.{u2} β _inst_4)))) (g : α) (h : α), Eq.{succ u2} β (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} α β (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3))) (Monoid.toMulOneClass.{u2} β (DivInvMonoid.toMonoid.{u2} β (DivisionMonoid.toDivInvMonoid.{u2} β _inst_4)))) (fun (_x : MonoidHom.{u1, u2} α β (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3))) (Monoid.toMulOneClass.{u2} β (DivInvMonoid.toMonoid.{u2} β (DivisionMonoid.toDivInvMonoid.{u2} β _inst_4)))) => α -> β) (MonoidHom.hasCoeToFun.{u1, u2} α β (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3))) (Monoid.toMulOneClass.{u2} β (DivInvMonoid.toMonoid.{u2} β (DivisionMonoid.toDivInvMonoid.{u2} β _inst_4)))) f (HDiv.hDiv.{u1, u1, u1} α α α (instHDiv.{u1} α (DivInvMonoid.toHasDiv.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3))) g h)) (HDiv.hDiv.{u2, u2, u2} β β β (instHDiv.{u2} β (DivInvMonoid.toHasDiv.{u2} β (DivisionMonoid.toDivInvMonoid.{u2} β _inst_4))) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} α β (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3))) (Monoid.toMulOneClass.{u2} β (DivInvMonoid.toMonoid.{u2} β (DivisionMonoid.toDivInvMonoid.{u2} β _inst_4)))) (fun (_x : MonoidHom.{u1, u2} α β (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3))) (Monoid.toMulOneClass.{u2} β (DivInvMonoid.toMonoid.{u2} β (DivisionMonoid.toDivInvMonoid.{u2} β _inst_4)))) => α -> β) (MonoidHom.hasCoeToFun.{u1, u2} α β (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3))) (Monoid.toMulOneClass.{u2} β (DivInvMonoid.toMonoid.{u2} β (DivisionMonoid.toDivInvMonoid.{u2} β _inst_4)))) f g) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} α β (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3))) (Monoid.toMulOneClass.{u2} β (DivInvMonoid.toMonoid.{u2} β (DivisionMonoid.toDivInvMonoid.{u2} β _inst_4)))) (fun (_x : MonoidHom.{u1, u2} α β (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3))) (Monoid.toMulOneClass.{u2} β (DivInvMonoid.toMonoid.{u2} β (DivisionMonoid.toDivInvMonoid.{u2} β _inst_4)))) => α -> β) (MonoidHom.hasCoeToFun.{u1, u2} α β (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3))) (Monoid.toMulOneClass.{u2} β (DivInvMonoid.toMonoid.{u2} β (DivisionMonoid.toDivInvMonoid.{u2} β _inst_4)))) f h))
 but is expected to have type
-  forall {α : Type.{u2}} {β : Type.{u1}} [_inst_3 : Group.{u2} α] [_inst_4 : DivisionMonoid.{u1} β] (f : MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) (g : α) (h : α), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : α) => β) (HDiv.hDiv.{u2, u2, u2} α α α (instHDiv.{u2} α (DivInvMonoid.toDiv.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) g h)) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : α) => β) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) α β (MulOneClass.toMul.{u2} α (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3)))) (MulOneClass.toMul.{u1} β (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4))) (MonoidHom.monoidHomClass.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))))) f (HDiv.hDiv.{u2, u2, u2} α α α (instHDiv.{u2} α (DivInvMonoid.toDiv.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) g h)) (HDiv.hDiv.{u1, u1, u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : α) => β) g) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : α) => β) h) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : α) => β) g) (instHDiv.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : α) => β) g) (DivInvMonoid.toDiv.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : α) => β) g) (DivisionMonoid.toDivInvMonoid.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : α) => β) g) _inst_4))) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : α) => β) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) α β (MulOneClass.toMul.{u2} α (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3)))) (MulOneClass.toMul.{u1} β (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4))) (MonoidHom.monoidHomClass.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))))) f g) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : α) => β) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) α β (MulOneClass.toMul.{u2} α (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3)))) (MulOneClass.toMul.{u1} β (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4))) (MonoidHom.monoidHomClass.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))))) f h))
+  forall {α : Type.{u2}} {β : Type.{u1}} [_inst_3 : Group.{u2} α] [_inst_4 : DivisionMonoid.{u1} β] (f : MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) (g : α) (h : α), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : α) => β) (HDiv.hDiv.{u2, u2, u2} α α α (instHDiv.{u2} α (DivInvMonoid.toDiv.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) g h)) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : α) => β) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) α β (MulOneClass.toMul.{u2} α (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3)))) (MulOneClass.toMul.{u1} β (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4))) (MonoidHom.monoidHomClass.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))))) f (HDiv.hDiv.{u2, u2, u2} α α α (instHDiv.{u2} α (DivInvMonoid.toDiv.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) g h)) (HDiv.hDiv.{u1, u1, u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : α) => β) g) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : α) => β) h) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : α) => β) g) (instHDiv.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : α) => β) g) (DivInvMonoid.toDiv.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : α) => β) g) (DivisionMonoid.toDivInvMonoid.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : α) => β) g) _inst_4))) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : α) => β) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) α β (MulOneClass.toMul.{u2} α (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3)))) (MulOneClass.toMul.{u1} β (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4))) (MonoidHom.monoidHomClass.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))))) f g) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : α) => β) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) α β (MulOneClass.toMul.{u2} α (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3)))) (MulOneClass.toMul.{u1} β (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4))) (MonoidHom.monoidHomClass.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))))) f h))
 Case conversion may be inaccurate. Consider using '#align monoid_hom.map_div MonoidHom.map_divₓ'. -/
 /-- Group homomorphisms preserve division. -/
 @[to_additive "Additive group homomorphisms preserve subtraction."]
@@ -2450,7 +2450,7 @@ protected theorem map_div [Group α] [DivisionMonoid β] (f : α →* β) (g h :
 lean 3 declaration is
   forall {α : Type.{u1}} {β : Type.{u2}} [_inst_3 : Group.{u1} α] [_inst_4 : DivisionMonoid.{u2} β] (f : MonoidHom.{u1, u2} α β (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3))) (Monoid.toMulOneClass.{u2} β (DivInvMonoid.toMonoid.{u2} β (DivisionMonoid.toDivInvMonoid.{u2} β _inst_4)))) (g : α) (h : α), Eq.{succ u2} β (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} α β (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3))) (Monoid.toMulOneClass.{u2} β (DivInvMonoid.toMonoid.{u2} β (DivisionMonoid.toDivInvMonoid.{u2} β _inst_4)))) (fun (_x : MonoidHom.{u1, u2} α β (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3))) (Monoid.toMulOneClass.{u2} β (DivInvMonoid.toMonoid.{u2} β (DivisionMonoid.toDivInvMonoid.{u2} β _inst_4)))) => α -> β) (MonoidHom.hasCoeToFun.{u1, u2} α β (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3))) (Monoid.toMulOneClass.{u2} β (DivInvMonoid.toMonoid.{u2} β (DivisionMonoid.toDivInvMonoid.{u2} β _inst_4)))) f (HMul.hMul.{u1, u1, u1} α α α (instHMul.{u1} α (MulOneClass.toHasMul.{u1} α (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3))))) g (Inv.inv.{u1} α (DivInvMonoid.toHasInv.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3)) h))) (HMul.hMul.{u2, u2, u2} β β β (instHMul.{u2} β (MulOneClass.toHasMul.{u2} β (Monoid.toMulOneClass.{u2} β (DivInvMonoid.toMonoid.{u2} β (DivisionMonoid.toDivInvMonoid.{u2} β _inst_4))))) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} α β (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3))) (Monoid.toMulOneClass.{u2} β (DivInvMonoid.toMonoid.{u2} β (DivisionMonoid.toDivInvMonoid.{u2} β _inst_4)))) (fun (_x : MonoidHom.{u1, u2} α β (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3))) (Monoid.toMulOneClass.{u2} β (DivInvMonoid.toMonoid.{u2} β (DivisionMonoid.toDivInvMonoid.{u2} β _inst_4)))) => α -> β) (MonoidHom.hasCoeToFun.{u1, u2} α β (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3))) (Monoid.toMulOneClass.{u2} β (DivInvMonoid.toMonoid.{u2} β (DivisionMonoid.toDivInvMonoid.{u2} β _inst_4)))) f g) (Inv.inv.{u2} β (DivInvMonoid.toHasInv.{u2} β (DivisionMonoid.toDivInvMonoid.{u2} β _inst_4)) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} α β (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3))) (Monoid.toMulOneClass.{u2} β (DivInvMonoid.toMonoid.{u2} β (DivisionMonoid.toDivInvMonoid.{u2} β _inst_4)))) (fun (_x : MonoidHom.{u1, u2} α β (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3))) (Monoid.toMulOneClass.{u2} β (DivInvMonoid.toMonoid.{u2} β (DivisionMonoid.toDivInvMonoid.{u2} β _inst_4)))) => α -> β) (MonoidHom.hasCoeToFun.{u1, u2} α β (Monoid.toMulOneClass.{u1} α (DivInvMonoid.toMonoid.{u1} α (Group.toDivInvMonoid.{u1} α _inst_3))) (Monoid.toMulOneClass.{u2} β (DivInvMonoid.toMonoid.{u2} β (DivisionMonoid.toDivInvMonoid.{u2} β _inst_4)))) f h)))
 but is expected to have type
-  forall {α : Type.{u2}} {β : Type.{u1}} [_inst_3 : Group.{u2} α] [_inst_4 : DivisionMonoid.{u1} β] (f : MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) (g : α) (h : α), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : α) => β) (HMul.hMul.{u2, u2, u2} α α α (instHMul.{u2} α (MulOneClass.toMul.{u2} α (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))))) g (Inv.inv.{u2} α (InvOneClass.toInv.{u2} α (DivInvOneMonoid.toInvOneClass.{u2} α (DivisionMonoid.toDivInvOneMonoid.{u2} α (Group.toDivisionMonoid.{u2} α _inst_3)))) h))) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : α) => β) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) α β (MulOneClass.toMul.{u2} α (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3)))) (MulOneClass.toMul.{u1} β (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4))) (MonoidHom.monoidHomClass.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))))) f (HMul.hMul.{u2, u2, u2} α α α (instHMul.{u2} α (MulOneClass.toMul.{u2} α (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))))) g (Inv.inv.{u2} α (InvOneClass.toInv.{u2} α (DivInvOneMonoid.toInvOneClass.{u2} α (DivisionMonoid.toDivInvOneMonoid.{u2} α (Group.toDivisionMonoid.{u2} α _inst_3)))) h))) (HMul.hMul.{u1, u1, u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : α) => β) g) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : α) => β) h) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : α) => β) g) (instHMul.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : α) => β) g) (MulOneClass.toMul.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : α) => β) g) (Monoid.toMulOneClass.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : α) => β) g) (DivInvMonoid.toMonoid.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : α) => β) g) (DivisionMonoid.toDivInvMonoid.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : α) => β) g) _inst_4))))) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : α) => β) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) α β (MulOneClass.toMul.{u2} α (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3)))) (MulOneClass.toMul.{u1} β (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4))) (MonoidHom.monoidHomClass.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))))) f g) (Inv.inv.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : α) => β) h) (InvOneClass.toInv.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : α) => β) h) (DivInvOneMonoid.toInvOneClass.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : α) => β) h) (DivisionMonoid.toDivInvOneMonoid.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : α) => β) h) _inst_4))) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : α) => β) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) α β (MulOneClass.toMul.{u2} α (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3)))) (MulOneClass.toMul.{u1} β (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4))) (MonoidHom.monoidHomClass.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))))) f h)))
+  forall {α : Type.{u2}} {β : Type.{u1}} [_inst_3 : Group.{u2} α] [_inst_4 : DivisionMonoid.{u1} β] (f : MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) (g : α) (h : α), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : α) => β) (HMul.hMul.{u2, u2, u2} α α α (instHMul.{u2} α (MulOneClass.toMul.{u2} α (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))))) g (Inv.inv.{u2} α (InvOneClass.toInv.{u2} α (DivInvOneMonoid.toInvOneClass.{u2} α (DivisionMonoid.toDivInvOneMonoid.{u2} α (Group.toDivisionMonoid.{u2} α _inst_3)))) h))) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : α) => β) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) α β (MulOneClass.toMul.{u2} α (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3)))) (MulOneClass.toMul.{u1} β (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4))) (MonoidHom.monoidHomClass.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))))) f (HMul.hMul.{u2, u2, u2} α α α (instHMul.{u2} α (MulOneClass.toMul.{u2} α (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))))) g (Inv.inv.{u2} α (InvOneClass.toInv.{u2} α (DivInvOneMonoid.toInvOneClass.{u2} α (DivisionMonoid.toDivInvOneMonoid.{u2} α (Group.toDivisionMonoid.{u2} α _inst_3)))) h))) (HMul.hMul.{u1, u1, u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : α) => β) g) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : α) => β) h) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : α) => β) g) (instHMul.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : α) => β) g) (MulOneClass.toMul.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : α) => β) g) (Monoid.toMulOneClass.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : α) => β) g) (DivInvMonoid.toMonoid.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : α) => β) g) (DivisionMonoid.toDivInvMonoid.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : α) => β) g) _inst_4))))) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : α) => β) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) α β (MulOneClass.toMul.{u2} α (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3)))) (MulOneClass.toMul.{u1} β (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4))) (MonoidHom.monoidHomClass.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))))) f g) (Inv.inv.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : α) => β) h) (InvOneClass.toInv.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : α) => β) h) (DivInvOneMonoid.toInvOneClass.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : α) => β) h) (DivisionMonoid.toDivInvOneMonoid.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : α) => β) h) _inst_4))) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) α (fun (_x : α) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : α) => β) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) α β (MulOneClass.toMul.{u2} α (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3)))) (MulOneClass.toMul.{u1} β (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))) α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4))) (MonoidHom.monoidHomClass.{u2, u1} α β (Monoid.toMulOneClass.{u2} α (DivInvMonoid.toMonoid.{u2} α (Group.toDivInvMonoid.{u2} α _inst_3))) (Monoid.toMulOneClass.{u1} β (DivInvMonoid.toMonoid.{u1} β (DivisionMonoid.toDivInvMonoid.{u1} β _inst_4)))))) f h)))
 Case conversion may be inaccurate. Consider using '#align monoid_hom.map_mul_inv MonoidHom.map_mul_invₓ'. -/
 /-- Group homomorphisms preserve division. -/
 @[to_additive "Additive group homomorphisms preserve subtraction."]
@@ -2464,7 +2464,7 @@ protected theorem map_mul_inv [Group α] [DivisionMonoid β] (f : α →* β) (g
 lean 3 declaration is
   forall {F : Type.{u1}} {G : Type.{u2}} {H : Type.{u3}} [_inst_3 : Group.{u2} G] [_inst_4 : MulOneClass.{u3} H] [_inst_5 : MonoidHomClass.{u1, u2, u3} F G H (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3))) _inst_4] (f : F), Iff (Function.Injective.{succ u2, succ u3} G H (coeFn.{succ u1, max (succ u2) (succ u3)} F (fun (_x : F) => G -> H) (FunLike.hasCoeToFun.{succ u1, succ u2, succ u3} F G (fun (_x : G) => H) (MulHomClass.toFunLike.{u1, u2, u3} F G H (MulOneClass.toHasMul.{u2} G (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))) (MulOneClass.toHasMul.{u3} H _inst_4) (MonoidHomClass.toMulHomClass.{u1, u2, u3} F G H (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3))) _inst_4 _inst_5))) f)) (forall (a : G), (Eq.{succ u3} H (coeFn.{succ u1, max (succ u2) (succ u3)} F (fun (_x : F) => G -> H) (FunLike.hasCoeToFun.{succ u1, succ u2, succ u3} F G (fun (_x : G) => H) (MulHomClass.toFunLike.{u1, u2, u3} F G H (MulOneClass.toHasMul.{u2} G (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))) (MulOneClass.toHasMul.{u3} H _inst_4) (MonoidHomClass.toMulHomClass.{u1, u2, u3} F G H (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3))) _inst_4 _inst_5))) f a) (OfNat.ofNat.{u3} H 1 (OfNat.mk.{u3} H 1 (One.one.{u3} H (MulOneClass.toHasOne.{u3} H _inst_4))))) -> (Eq.{succ u2} G a (OfNat.ofNat.{u2} G 1 (OfNat.mk.{u2} G 1 (One.one.{u2} G (MulOneClass.toHasOne.{u2} G (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))))))))
 but is expected to have type
-  forall {F : Type.{u1}} {G : Type.{u3}} {H : Type.{u2}} [_inst_3 : Group.{u3} G] [_inst_4 : MulOneClass.{u2} H] [_inst_5 : MonoidHomClass.{u1, u3, u2} F G H (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3))) _inst_4] (f : F), Iff (Function.Injective.{succ u3, succ u2} G H (FunLike.coe.{succ u1, succ u3, succ u2} F G (fun (_x : G) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : G) => H) _x) (MulHomClass.toFunLike.{u1, u3, u2} F G H (MulOneClass.toMul.{u3} G (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3)))) (MulOneClass.toMul.{u2} H _inst_4) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F G H (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3))) _inst_4 _inst_5)) f)) (forall (a : G), (Eq.{succ u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : G) => H) a) (FunLike.coe.{succ u1, succ u3, succ u2} F G (fun (_x : G) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : G) => H) _x) (MulHomClass.toFunLike.{u1, u3, u2} F G H (MulOneClass.toMul.{u3} G (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3)))) (MulOneClass.toMul.{u2} H _inst_4) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F G H (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3))) _inst_4 _inst_5)) f a) (OfNat.ofNat.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : G) => H) a) 1 (One.toOfNat1.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : G) => H) a) (MulOneClass.toOne.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : G) => H) a) _inst_4)))) -> (Eq.{succ u3} G a (OfNat.ofNat.{u3} G 1 (One.toOfNat1.{u3} G (InvOneClass.toOne.{u3} G (DivInvOneMonoid.toInvOneClass.{u3} G (DivisionMonoid.toDivInvOneMonoid.{u3} G (Group.toDivisionMonoid.{u3} G _inst_3))))))))
+  forall {F : Type.{u1}} {G : Type.{u3}} {H : Type.{u2}} [_inst_3 : Group.{u3} G] [_inst_4 : MulOneClass.{u2} H] [_inst_5 : MonoidHomClass.{u1, u3, u2} F G H (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3))) _inst_4] (f : F), Iff (Function.Injective.{succ u3, succ u2} G H (FunLike.coe.{succ u1, succ u3, succ u2} F G (fun (_x : G) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : G) => H) _x) (MulHomClass.toFunLike.{u1, u3, u2} F G H (MulOneClass.toMul.{u3} G (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3)))) (MulOneClass.toMul.{u2} H _inst_4) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F G H (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3))) _inst_4 _inst_5)) f)) (forall (a : G), (Eq.{succ u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : G) => H) a) (FunLike.coe.{succ u1, succ u3, succ u2} F G (fun (_x : G) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : G) => H) _x) (MulHomClass.toFunLike.{u1, u3, u2} F G H (MulOneClass.toMul.{u3} G (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3)))) (MulOneClass.toMul.{u2} H _inst_4) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F G H (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3))) _inst_4 _inst_5)) f a) (OfNat.ofNat.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : G) => H) a) 1 (One.toOfNat1.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : G) => H) a) (MulOneClass.toOne.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : G) => H) a) _inst_4)))) -> (Eq.{succ u3} G a (OfNat.ofNat.{u3} G 1 (One.toOfNat1.{u3} G (InvOneClass.toOne.{u3} G (DivInvOneMonoid.toInvOneClass.{u3} G (DivisionMonoid.toDivInvOneMonoid.{u3} G (Group.toDivisionMonoid.{u3} G _inst_3))))))))
 Case conversion may be inaccurate. Consider using '#align injective_iff_map_eq_one injective_iff_map_eq_oneₓ'. -/
 /-- A homomorphism from a group to a monoid is injective iff its kernel is trivial.
 For the iff statement on the triviality of the kernel, see `injective_iff_map_eq_one'`.  -/
@@ -2481,7 +2481,7 @@ theorem injective_iff_map_eq_one {G H} [Group G] [MulOneClass H] [MonoidHomClass
 lean 3 declaration is
   forall {F : Type.{u1}} {G : Type.{u2}} {H : Type.{u3}} [_inst_3 : Group.{u2} G] [_inst_4 : MulOneClass.{u3} H] [_inst_5 : MonoidHomClass.{u1, u2, u3} F G H (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3))) _inst_4] (f : F), Iff (Function.Injective.{succ u2, succ u3} G H (coeFn.{succ u1, max (succ u2) (succ u3)} F (fun (_x : F) => G -> H) (FunLike.hasCoeToFun.{succ u1, succ u2, succ u3} F G (fun (_x : G) => H) (MulHomClass.toFunLike.{u1, u2, u3} F G H (MulOneClass.toHasMul.{u2} G (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))) (MulOneClass.toHasMul.{u3} H _inst_4) (MonoidHomClass.toMulHomClass.{u1, u2, u3} F G H (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3))) _inst_4 _inst_5))) f)) (forall (a : G), Iff (Eq.{succ u3} H (coeFn.{succ u1, max (succ u2) (succ u3)} F (fun (_x : F) => G -> H) (FunLike.hasCoeToFun.{succ u1, succ u2, succ u3} F G (fun (_x : G) => H) (MulHomClass.toFunLike.{u1, u2, u3} F G H (MulOneClass.toHasMul.{u2} G (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))) (MulOneClass.toHasMul.{u3} H _inst_4) (MonoidHomClass.toMulHomClass.{u1, u2, u3} F G H (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3))) _inst_4 _inst_5))) f a) (OfNat.ofNat.{u3} H 1 (OfNat.mk.{u3} H 1 (One.one.{u3} H (MulOneClass.toHasOne.{u3} H _inst_4))))) (Eq.{succ u2} G a (OfNat.ofNat.{u2} G 1 (OfNat.mk.{u2} G 1 (One.one.{u2} G (MulOneClass.toHasOne.{u2} G (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G _inst_3)))))))))
 but is expected to have type
-  forall {F : Type.{u1}} {G : Type.{u3}} {H : Type.{u2}} [_inst_3 : Group.{u3} G] [_inst_4 : MulOneClass.{u2} H] [_inst_5 : MonoidHomClass.{u1, u3, u2} F G H (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3))) _inst_4] (f : F), Iff (Function.Injective.{succ u3, succ u2} G H (FunLike.coe.{succ u1, succ u3, succ u2} F G (fun (_x : G) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : G) => H) _x) (MulHomClass.toFunLike.{u1, u3, u2} F G H (MulOneClass.toMul.{u3} G (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3)))) (MulOneClass.toMul.{u2} H _inst_4) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F G H (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3))) _inst_4 _inst_5)) f)) (forall (a : G), Iff (Eq.{succ u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : G) => H) a) (FunLike.coe.{succ u1, succ u3, succ u2} F G (fun (_x : G) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : G) => H) _x) (MulHomClass.toFunLike.{u1, u3, u2} F G H (MulOneClass.toMul.{u3} G (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3)))) (MulOneClass.toMul.{u2} H _inst_4) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F G H (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3))) _inst_4 _inst_5)) f a) (OfNat.ofNat.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : G) => H) a) 1 (One.toOfNat1.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : G) => H) a) (MulOneClass.toOne.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : G) => H) a) _inst_4)))) (Eq.{succ u3} G a (OfNat.ofNat.{u3} G 1 (One.toOfNat1.{u3} G (InvOneClass.toOne.{u3} G (DivInvOneMonoid.toInvOneClass.{u3} G (DivisionMonoid.toDivInvOneMonoid.{u3} G (Group.toDivisionMonoid.{u3} G _inst_3))))))))
+  forall {F : Type.{u1}} {G : Type.{u3}} {H : Type.{u2}} [_inst_3 : Group.{u3} G] [_inst_4 : MulOneClass.{u2} H] [_inst_5 : MonoidHomClass.{u1, u3, u2} F G H (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3))) _inst_4] (f : F), Iff (Function.Injective.{succ u3, succ u2} G H (FunLike.coe.{succ u1, succ u3, succ u2} F G (fun (_x : G) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : G) => H) _x) (MulHomClass.toFunLike.{u1, u3, u2} F G H (MulOneClass.toMul.{u3} G (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3)))) (MulOneClass.toMul.{u2} H _inst_4) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F G H (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3))) _inst_4 _inst_5)) f)) (forall (a : G), Iff (Eq.{succ u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : G) => H) a) (FunLike.coe.{succ u1, succ u3, succ u2} F G (fun (_x : G) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : G) => H) _x) (MulHomClass.toFunLike.{u1, u3, u2} F G H (MulOneClass.toMul.{u3} G (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3)))) (MulOneClass.toMul.{u2} H _inst_4) (MonoidHomClass.toMulHomClass.{u1, u3, u2} F G H (Monoid.toMulOneClass.{u3} G (DivInvMonoid.toMonoid.{u3} G (Group.toDivInvMonoid.{u3} G _inst_3))) _inst_4 _inst_5)) f a) (OfNat.ofNat.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : G) => H) a) 1 (One.toOfNat1.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : G) => H) a) (MulOneClass.toOne.{u2} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : G) => H) a) _inst_4)))) (Eq.{succ u3} G a (OfNat.ofNat.{u3} G 1 (One.toOfNat1.{u3} G (InvOneClass.toOne.{u3} G (DivInvOneMonoid.toInvOneClass.{u3} G (DivisionMonoid.toDivInvOneMonoid.{u3} G (Group.toDivisionMonoid.{u3} G _inst_3))))))))
 Case conversion may be inaccurate. Consider using '#align injective_iff_map_eq_one' injective_iff_map_eq_one'ₓ'. -/
 /-- A homomorphism from a group to a monoid is injective iff its kernel is trivial,
 stated as an iff on the triviality of the kernel.
@@ -2544,7 +2544,7 @@ def ofMapMulInv {H : Type _} [Group H] (f : G → H)
 lean 3 declaration is
   forall {G : Type.{u1}} [_inst_1 : Group.{u1} G] {H : Type.{u2}} [_inst_3 : Group.{u2} H] (f : G -> H) (map_div : forall (a : G) (b : G), Eq.{succ u2} H (f (HMul.hMul.{u1, u1, u1} G G G (instHMul.{u1} G (MulOneClass.toHasMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))))) a (Inv.inv.{u1} G (DivInvMonoid.toHasInv.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1)) b))) (HMul.hMul.{u2, u2, u2} H H H (instHMul.{u2} H (MulOneClass.toHasMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_3))))) (f a) (Inv.inv.{u2} H (DivInvMonoid.toHasInv.{u2} H (Group.toDivInvMonoid.{u2} H _inst_3)) (f b)))), Eq.{max (succ u1) (succ u2)} (G -> H) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_3)))) (fun (_x : MonoidHom.{u1, u2} G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_3)))) => G -> H) (MonoidHom.hasCoeToFun.{u1, u2} G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_3)))) (MonoidHom.ofMapMulInv.{u1, u2} G _inst_1 H _inst_3 f map_div)) f
 but is expected to have type
-  forall {G : Type.{u1}} [_inst_1 : Group.{u1} G] {H : Type.{u2}} [_inst_3 : Group.{u2} H] (f : G -> H) (map_div : forall (a : G) (b : G), Eq.{succ u2} H (f (HMul.hMul.{u1, u1, u1} G G G (instHMul.{u1} G (MulOneClass.toMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))))) a (Inv.inv.{u1} G (InvOneClass.toInv.{u1} G (DivInvOneMonoid.toInvOneClass.{u1} G (DivisionMonoid.toDivInvOneMonoid.{u1} G (Group.toDivisionMonoid.{u1} G _inst_1)))) b))) (HMul.hMul.{u2, u2, u2} H H H (instHMul.{u2} H (MulOneClass.toMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_3))))) (f a) (Inv.inv.{u2} H (InvOneClass.toInv.{u2} H (DivInvOneMonoid.toInvOneClass.{u2} H (DivisionMonoid.toDivInvOneMonoid.{u2} H (Group.toDivisionMonoid.{u2} H _inst_3)))) (f b)))), Eq.{max (succ u1) (succ u2)} (G -> H) (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (MonoidHom.{u1, u2} G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_3)))) G (fun (_x : G) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : G) => H) _x) (MulHomClass.toFunLike.{max u1 u2, u1, u2} (MonoidHom.{u1, u2} G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_3)))) G H (MulOneClass.toMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1)))) (MulOneClass.toMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_3)))) (MonoidHomClass.toMulHomClass.{max u1 u2, u1, u2} (MonoidHom.{u1, u2} G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_3)))) G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_3))) (MonoidHom.monoidHomClass.{u1, u2} G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_3)))))) (MonoidHom.ofMapMulInv.{u1, u2} G _inst_1 H _inst_3 f map_div)) f
+  forall {G : Type.{u1}} [_inst_1 : Group.{u1} G] {H : Type.{u2}} [_inst_3 : Group.{u2} H] (f : G -> H) (map_div : forall (a : G) (b : G), Eq.{succ u2} H (f (HMul.hMul.{u1, u1, u1} G G G (instHMul.{u1} G (MulOneClass.toMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))))) a (Inv.inv.{u1} G (InvOneClass.toInv.{u1} G (DivInvOneMonoid.toInvOneClass.{u1} G (DivisionMonoid.toDivInvOneMonoid.{u1} G (Group.toDivisionMonoid.{u1} G _inst_1)))) b))) (HMul.hMul.{u2, u2, u2} H H H (instHMul.{u2} H (MulOneClass.toMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_3))))) (f a) (Inv.inv.{u2} H (InvOneClass.toInv.{u2} H (DivInvOneMonoid.toInvOneClass.{u2} H (DivisionMonoid.toDivInvOneMonoid.{u2} H (Group.toDivisionMonoid.{u2} H _inst_3)))) (f b)))), Eq.{max (succ u1) (succ u2)} (G -> H) (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (MonoidHom.{u1, u2} G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_3)))) G (fun (_x : G) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : G) => H) _x) (MulHomClass.toFunLike.{max u1 u2, u1, u2} (MonoidHom.{u1, u2} G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_3)))) G H (MulOneClass.toMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1)))) (MulOneClass.toMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_3)))) (MonoidHomClass.toMulHomClass.{max u1 u2, u1, u2} (MonoidHom.{u1, u2} G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_3)))) G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_3))) (MonoidHom.monoidHomClass.{u1, u2} G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_3)))))) (MonoidHom.ofMapMulInv.{u1, u2} G _inst_1 H _inst_3 f map_div)) f
 Case conversion may be inaccurate. Consider using '#align monoid_hom.coe_of_map_mul_inv MonoidHom.coe_of_map_mul_invₓ'. -/
 @[simp, to_additive]
 theorem coe_of_map_mul_inv {H : Type _} [Group H] (f : G → H)
@@ -2570,7 +2570,7 @@ def ofMapDiv {H : Type _} [Group H] (f : G → H) (hf : ∀ x y, f (x / y) = f x
 lean 3 declaration is
   forall {G : Type.{u1}} [_inst_1 : Group.{u1} G] {H : Type.{u2}} [_inst_3 : Group.{u2} H] (f : G -> H) (hf : forall (x : G) (y : G), Eq.{succ u2} H (f (HDiv.hDiv.{u1, u1, u1} G G G (instHDiv.{u1} G (DivInvMonoid.toHasDiv.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) x y)) (HDiv.hDiv.{u2, u2, u2} H H H (instHDiv.{u2} H (DivInvMonoid.toHasDiv.{u2} H (Group.toDivInvMonoid.{u2} H _inst_3))) (f x) (f y))), Eq.{max (succ u1) (succ u2)} (G -> H) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_3)))) (fun (_x : MonoidHom.{u1, u2} G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_3)))) => G -> H) (MonoidHom.hasCoeToFun.{u1, u2} G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_3)))) (MonoidHom.ofMapDiv.{u1, u2} G _inst_1 H _inst_3 f hf)) f
 but is expected to have type
-  forall {G : Type.{u1}} [_inst_1 : Group.{u1} G] {H : Type.{u2}} [_inst_3 : Group.{u2} H] (f : G -> H) (hf : forall (x : G) (y : G), Eq.{succ u2} H (f (HDiv.hDiv.{u1, u1, u1} G G G (instHDiv.{u1} G (DivInvMonoid.toDiv.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) x y)) (HDiv.hDiv.{u2, u2, u2} H H H (instHDiv.{u2} H (DivInvMonoid.toDiv.{u2} H (Group.toDivInvMonoid.{u2} H _inst_3))) (f x) (f y))), Eq.{max (succ u1) (succ u2)} (G -> H) (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (MonoidHom.{u1, u2} G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_3)))) G (fun (_x : G) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : G) => H) _x) (MulHomClass.toFunLike.{max u1 u2, u1, u2} (MonoidHom.{u1, u2} G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_3)))) G H (MulOneClass.toMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1)))) (MulOneClass.toMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_3)))) (MonoidHomClass.toMulHomClass.{max u1 u2, u1, u2} (MonoidHom.{u1, u2} G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_3)))) G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_3))) (MonoidHom.monoidHomClass.{u1, u2} G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_3)))))) (MonoidHom.ofMapDiv.{u1, u2} G _inst_1 H _inst_3 f hf)) f
+  forall {G : Type.{u1}} [_inst_1 : Group.{u1} G] {H : Type.{u2}} [_inst_3 : Group.{u2} H] (f : G -> H) (hf : forall (x : G) (y : G), Eq.{succ u2} H (f (HDiv.hDiv.{u1, u1, u1} G G G (instHDiv.{u1} G (DivInvMonoid.toDiv.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) x y)) (HDiv.hDiv.{u2, u2, u2} H H H (instHDiv.{u2} H (DivInvMonoid.toDiv.{u2} H (Group.toDivInvMonoid.{u2} H _inst_3))) (f x) (f y))), Eq.{max (succ u1) (succ u2)} (G -> H) (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (MonoidHom.{u1, u2} G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_3)))) G (fun (_x : G) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : G) => H) _x) (MulHomClass.toFunLike.{max u1 u2, u1, u2} (MonoidHom.{u1, u2} G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_3)))) G H (MulOneClass.toMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1)))) (MulOneClass.toMul.{u2} H (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_3)))) (MonoidHomClass.toMulHomClass.{max u1 u2, u1, u2} (MonoidHom.{u1, u2} G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_3)))) G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_3))) (MonoidHom.monoidHomClass.{u1, u2} G H (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G _inst_1))) (Monoid.toMulOneClass.{u2} H (DivInvMonoid.toMonoid.{u2} H (Group.toDivInvMonoid.{u2} H _inst_3)))))) (MonoidHom.ofMapDiv.{u1, u2} G _inst_1 H _inst_3 f hf)) f
 Case conversion may be inaccurate. Consider using '#align monoid_hom.coe_of_map_div MonoidHom.coe_of_map_divₓ'. -/
 @[simp, to_additive]
 theorem coe_of_map_div {H : Type _} [Group H] (f : G → H) (hf : ∀ x y, f (x / y) = f x / f y) :
@@ -2593,7 +2593,7 @@ add_decl_doc AddMonoidHom.hasNeg
 lean 3 declaration is
   forall {M : Type.{u1}} {G : Type.{u2}} {mM : MulOneClass.{u1} M} {gG : CommGroup.{u2} G} (f : MonoidHom.{u1, u2} M G mM (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G (CommGroup.toGroup.{u2} G gG))))) (x : M), Eq.{succ u2} G (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} M G mM (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G (CommGroup.toGroup.{u2} G gG))))) (fun (_x : MonoidHom.{u1, u2} M G mM (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G (CommGroup.toGroup.{u2} G gG))))) => M -> G) (MonoidHom.hasCoeToFun.{u1, u2} M G mM (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G (CommGroup.toGroup.{u2} G gG))))) (Inv.inv.{max u2 u1} (MonoidHom.{u1, u2} M G mM (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G (CommGroup.toGroup.{u2} G gG))))) (MonoidHom.hasInv.{u1, u2} M G mM gG) f) x) (Inv.inv.{u2} G (DivInvMonoid.toHasInv.{u2} G (Group.toDivInvMonoid.{u2} G (CommGroup.toGroup.{u2} G gG))) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} M G mM (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G (CommGroup.toGroup.{u2} G gG))))) (fun (_x : MonoidHom.{u1, u2} M G mM (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G (CommGroup.toGroup.{u2} G gG))))) => M -> G) (MonoidHom.hasCoeToFun.{u1, u2} M G mM (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G (CommGroup.toGroup.{u2} G gG))))) f x))
 but is expected to have type
-  forall {M : Type.{u2}} {G : Type.{u1}} {mM : MulOneClass.{u2} M} {gG : CommGroup.{u1} G} (f : MonoidHom.{u2, u1} M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))) (x : M), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => G) x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => G) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))) M G (MulOneClass.toMul.{u2} M mM) (MulOneClass.toMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))) M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG)))) (MonoidHom.monoidHomClass.{u2, u1} M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))))) (Inv.inv.{max u2 u1} (MonoidHom.{u2, u1} M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))) (MonoidHom.instInvMonoidHomToMulOneClassToMonoidToDivInvMonoidToGroup.{u2, u1} M G mM gG) f) x) (Inv.inv.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => G) x) (InvOneClass.toInv.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => G) x) (DivInvOneMonoid.toInvOneClass.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => G) x) (DivisionMonoid.toDivInvOneMonoid.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => G) x) (DivisionCommMonoid.toDivisionMonoid.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => G) x) (CommGroup.toDivisionCommMonoid.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => G) x) gG))))) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => G) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))) M G (MulOneClass.toMul.{u2} M mM) (MulOneClass.toMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))) M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG)))) (MonoidHom.monoidHomClass.{u2, u1} M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))))) f x))
+  forall {M : Type.{u2}} {G : Type.{u1}} {mM : MulOneClass.{u2} M} {gG : CommGroup.{u1} G} (f : MonoidHom.{u2, u1} M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))) (x : M), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => G) x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => G) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))) M G (MulOneClass.toMul.{u2} M mM) (MulOneClass.toMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))) M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG)))) (MonoidHom.monoidHomClass.{u2, u1} M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))))) (Inv.inv.{max u2 u1} (MonoidHom.{u2, u1} M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))) (MonoidHom.instInvMonoidHomToMulOneClassToMonoidToDivInvMonoidToGroup.{u2, u1} M G mM gG) f) x) (Inv.inv.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => G) x) (InvOneClass.toInv.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => G) x) (DivInvOneMonoid.toInvOneClass.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => G) x) (DivisionMonoid.toDivInvOneMonoid.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => G) x) (DivisionCommMonoid.toDivisionMonoid.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => G) x) (CommGroup.toDivisionCommMonoid.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => G) x) gG))))) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => G) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))) M G (MulOneClass.toMul.{u2} M mM) (MulOneClass.toMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))) M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG)))) (MonoidHom.monoidHomClass.{u2, u1} M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))))) f x))
 Case conversion may be inaccurate. Consider using '#align monoid_hom.inv_apply MonoidHom.inv_applyₓ'. -/
 @[simp, to_additive]
 theorem inv_apply {M G} {mM : MulOneClass M} {gG : CommGroup G} (f : M →* G) (x : M) :
@@ -2646,7 +2646,7 @@ add_decl_doc AddMonoidHom.hasSub
 lean 3 declaration is
   forall {M : Type.{u1}} {G : Type.{u2}} {mM : MulOneClass.{u1} M} {gG : CommGroup.{u2} G} (f : MonoidHom.{u1, u2} M G mM (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G (CommGroup.toGroup.{u2} G gG))))) (g : MonoidHom.{u1, u2} M G mM (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G (CommGroup.toGroup.{u2} G gG))))) (x : M), Eq.{succ u2} G (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} M G mM (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G (CommGroup.toGroup.{u2} G gG))))) (fun (_x : MonoidHom.{u1, u2} M G mM (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G (CommGroup.toGroup.{u2} G gG))))) => M -> G) (MonoidHom.hasCoeToFun.{u1, u2} M G mM (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G (CommGroup.toGroup.{u2} G gG))))) (HDiv.hDiv.{max u2 u1, max u2 u1, max u2 u1} (MonoidHom.{u1, u2} M G mM (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G (CommGroup.toGroup.{u2} G gG))))) (MonoidHom.{u1, u2} M G mM (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G (CommGroup.toGroup.{u2} G gG))))) (MonoidHom.{u1, u2} M G mM (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G (CommGroup.toGroup.{u2} G gG))))) (instHDiv.{max u2 u1} (MonoidHom.{u1, u2} M G mM (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G (CommGroup.toGroup.{u2} G gG))))) (MonoidHom.hasDiv.{u1, u2} M G mM gG)) f g) x) (HDiv.hDiv.{u2, u2, u2} G G G (instHDiv.{u2} G (DivInvMonoid.toHasDiv.{u2} G (Group.toDivInvMonoid.{u2} G (CommGroup.toGroup.{u2} G gG)))) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} M G mM (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G (CommGroup.toGroup.{u2} G gG))))) (fun (_x : MonoidHom.{u1, u2} M G mM (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G (CommGroup.toGroup.{u2} G gG))))) => M -> G) (MonoidHom.hasCoeToFun.{u1, u2} M G mM (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G (CommGroup.toGroup.{u2} G gG))))) f x) (coeFn.{max (succ u2) (succ u1), max (succ u1) (succ u2)} (MonoidHom.{u1, u2} M G mM (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G (CommGroup.toGroup.{u2} G gG))))) (fun (_x : MonoidHom.{u1, u2} M G mM (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G (CommGroup.toGroup.{u2} G gG))))) => M -> G) (MonoidHom.hasCoeToFun.{u1, u2} M G mM (Monoid.toMulOneClass.{u2} G (DivInvMonoid.toMonoid.{u2} G (Group.toDivInvMonoid.{u2} G (CommGroup.toGroup.{u2} G gG))))) g x))
 but is expected to have type
-  forall {M : Type.{u2}} {G : Type.{u1}} {mM : MulOneClass.{u2} M} {gG : CommGroup.{u1} G} (f : MonoidHom.{u2, u1} M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))) (g : MonoidHom.{u2, u1} M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))) (x : M), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => G) x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => G) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))) M G (MulOneClass.toMul.{u2} M mM) (MulOneClass.toMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))) M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG)))) (MonoidHom.monoidHomClass.{u2, u1} M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))))) (HDiv.hDiv.{max u2 u1, max u2 u1, max u2 u1} (MonoidHom.{u2, u1} M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))) (MonoidHom.{u2, u1} M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))) (MonoidHom.{u2, u1} M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))) (instHDiv.{max u2 u1} (MonoidHom.{u2, u1} M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))) (MonoidHom.instDivMonoidHomToMulOneClassToMonoidToDivInvMonoidToGroup.{u2, u1} M G mM gG)) f g) x) (HDiv.hDiv.{u1, u1, u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => G) x) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => G) x) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => G) x) (instHDiv.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => G) x) (DivInvMonoid.toDiv.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => G) x) (Group.toDivInvMonoid.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => G) x) (CommGroup.toGroup.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => G) x) gG)))) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => G) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))) M G (MulOneClass.toMul.{u2} M mM) (MulOneClass.toMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))) M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG)))) (MonoidHom.monoidHomClass.{u2, u1} M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))))) f x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2398 : M) => G) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))) M G (MulOneClass.toMul.{u2} M mM) (MulOneClass.toMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))) M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG)))) (MonoidHom.monoidHomClass.{u2, u1} M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))))) g x))
+  forall {M : Type.{u2}} {G : Type.{u1}} {mM : MulOneClass.{u2} M} {gG : CommGroup.{u1} G} (f : MonoidHom.{u2, u1} M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))) (g : MonoidHom.{u2, u1} M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))) (x : M), Eq.{succ u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => G) x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => G) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))) M G (MulOneClass.toMul.{u2} M mM) (MulOneClass.toMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))) M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG)))) (MonoidHom.monoidHomClass.{u2, u1} M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))))) (HDiv.hDiv.{max u2 u1, max u2 u1, max u2 u1} (MonoidHom.{u2, u1} M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))) (MonoidHom.{u2, u1} M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))) (MonoidHom.{u2, u1} M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))) (instHDiv.{max u2 u1} (MonoidHom.{u2, u1} M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))) (MonoidHom.instDivMonoidHomToMulOneClassToMonoidToDivInvMonoidToGroup.{u2, u1} M G mM gG)) f g) x) (HDiv.hDiv.{u1, u1, u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => G) x) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => G) x) ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => G) x) (instHDiv.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => G) x) (DivInvMonoid.toDiv.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => G) x) (Group.toDivInvMonoid.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => G) x) (CommGroup.toGroup.{u1} ((fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => G) x) gG)))) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => G) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))) M G (MulOneClass.toMul.{u2} M mM) (MulOneClass.toMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))) M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG)))) (MonoidHom.monoidHomClass.{u2, u1} M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))))) f x) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (MonoidHom.{u2, u1} M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))) M (fun (_x : M) => (fun (x._@.Mathlib.Algebra.Hom.Group._hyg.2372 : M) => G) _x) (MulHomClass.toFunLike.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))) M G (MulOneClass.toMul.{u2} M mM) (MulOneClass.toMul.{u1} G (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))) (MonoidHomClass.toMulHomClass.{max u2 u1, u2, u1} (MonoidHom.{u2, u1} M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))) M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG)))) (MonoidHom.monoidHomClass.{u2, u1} M G mM (Monoid.toMulOneClass.{u1} G (DivInvMonoid.toMonoid.{u1} G (Group.toDivInvMonoid.{u1} G (CommGroup.toGroup.{u1} G gG))))))) g x))
 Case conversion may be inaccurate. Consider using '#align monoid_hom.div_apply MonoidHom.div_applyₓ'. -/
 @[simp, to_additive]
 theorem div_apply {M G} {mM : MulOneClass M} {gG : CommGroup G} (f g : M →* G) (x : M) :

Changes in mathlib4

mathlib3
mathlib4
style: remove redundant instance arguments (#11581)

I removed some redundant instance arguments throughout Mathlib. To do this, I used VS Code's regex search. See https://leanprover.zulipchat.com/#narrow/stream/287929-mathlib4/topic/repeating.20instances.20from.20variable.20command I closed the previous PR for this and reopened it.

Diff
@@ -190,7 +190,7 @@ lemma mul_comp [MulOneClass P] (g₁ g₂ : M →* N) (f : P →* M) :
 #align add_monoid_hom.add_comp AddMonoidHom.add_comp
 
 @[to_additive]
-lemma comp_mul [CommMonoid N] [CommMonoid P] (g : N →* P) (f₁ f₂ : M →* N) :
+lemma comp_mul [CommMonoid P] (g : N →* P) (f₁ f₂ : M →* N) :
     g.comp (f₁ * f₂) = g.comp f₁ * g.comp f₂ := by
   ext; simp only [mul_apply, Function.comp_apply, map_mul, coe_comp]
 #align monoid_hom.comp_mul MonoidHom.comp_mul
chore: Rename zpow_coe_nat to zpow_natCast (#11528)

... and add a deprecated alias for the old name. This is mostly just me discovering the power of F2

Diff
@@ -480,7 +480,7 @@ lemma map_comp_pow [Group G] [DivisionMonoid H] [MonoidHomClass F G H] (f : F) (
 @[to_additive]
 theorem map_zpow' [DivInvMonoid G] [DivInvMonoid H] [MonoidHomClass F G H]
     (f : F) (hf : ∀ x : G, f x⁻¹ = (f x)⁻¹) (a : G) : ∀ n : ℤ, f (a ^ n) = f a ^ n
-  | (n : ℕ) => by rw [zpow_coe_nat, map_pow, zpow_coe_nat]
+  | (n : ℕ) => by rw [zpow_natCast, map_pow, zpow_natCast]
   | Int.negSucc n => by rw [zpow_negSucc, hf, map_pow, ← zpow_negSucc]
 #align map_zpow' map_zpow'
 #align map_zsmul' map_zsmul'
chore: remove tactics (#11365)

More tactics that are not used, found using the linter at #11308.

The PR consists of tactic removals, whitespace changes and replacing a porting note by an explanation.

Diff
@@ -60,7 +60,6 @@ instance [Mul M] [CommSemigroup N] : Mul (M →ₙ* N) :=
   ⟨fun f g =>
     { toFun := fun m => f m * g m,
       map_mul' := fun x y => by
-        intros
         show f (x * y) * g (x * y) = f x * g x * (f y * g y)
         rw [f.map_mul, g.map_mul, ← mul_assoc, ← mul_assoc, mul_right_comm (f x)] }⟩
 
@@ -173,7 +172,6 @@ instance mul : Mul (M →* N) :=
     { toFun := fun m => f m * g m,
       map_one' := show f 1 * g 1 = 1 by simp,
       map_mul' := fun x y => by
-        intros
         show f (x * y) * g (x * y) = f x * g x * (f y * g y)
         rw [f.map_mul, g.map_mul, ← mul_assoc, ← mul_assoc, mul_right_comm (f x)] }⟩
 
chore(Algebra/Group): Do not import GroupWithZero (#11202)

I am claiming that anything within the Algebra.Group folder should be additivisable, to the exception of MonoidHom.End maybe. This is not the case of NeZero, MonoidWithZero and MonoidWithZeroHom which were all imported to prove a few lemmas. Those lemmas are easily moved to another file.

Diff
@@ -3,8 +3,9 @@ Copyright (c) 2020 Patrick Massot. All rights reserved.
 Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Eric Wieser
 -/
-import Mathlib.Algebra.Group.Hom.Defs
+import Mathlib.Algebra.Group.Equiv.Basic
 import Mathlib.Algebra.GroupWithZero.Defs
+import Mathlib.Algebra.NeZero
 
 #align_import algebra.hom.group from "leanprover-community/mathlib"@"a148d797a1094ab554ad4183a4ad6f130358ef64"
 
@@ -35,6 +36,19 @@ monoid homomorphism
 
 open Function
 
+namespace NeZero
+variable {F α β  : Type*} [Zero α] [Zero β] [FunLike F α β] [ZeroHomClass F α β] {a : α}
+
+lemma of_map (f : F) [neZero : NeZero (f a)] : NeZero a :=
+  ⟨fun h ↦ ne (f a) <| by rw [h]; exact ZeroHomClass.map_zero f⟩
+#align ne_zero.of_map NeZero.of_map
+
+lemma of_injective {f : F} (hf : Injective f) [NeZero a] : NeZero (f a) :=
+  ⟨by rw [← ZeroHomClass.map_zero f]; exact hf.ne NeZero.out⟩
+#align ne_zero.of_injective NeZero.of_injective
+
+end NeZero
+
 variable {F α β γ δ : Type*} [MulZeroOneClass α] [MulZeroOneClass β] [MulZeroOneClass γ]
   [MulZeroOneClass δ]
 
@@ -234,3 +248,34 @@ lemma toZeroHom_injective : Injective (toZeroHom : (α →*₀ β) → ZeroHom 
 
 -- Unlike the other homs, `MonoidWithZeroHom` does not have a `1` or `0`
 instance : Inhabited (α →*₀ α) := ⟨id α⟩
+
+/-- Given two monoid with zero morphisms `f`, `g` to a commutative monoid with zero, `f * g` is the
+monoid with zero morphism sending `x` to `f x * g x`. -/
+instance {β} [CommMonoidWithZero β] : Mul (α →*₀ β) where
+  mul f g :=
+    { (f * g : α →* β) with
+      map_zero' := by dsimp; rw [map_zero, zero_mul] }
+
+end MonoidWithZeroHom
+
+/-! ### Equivalences -/
+
+namespace MulEquivClass
+variable {F α β : Type*} [EquivLike F α β]
+
+-- See note [lower instance priority]
+instance (priority := 100) toZeroHomClass [MulZeroClass α] [MulZeroClass β] [MulEquivClass F α β] :
+    ZeroHomClass F α β where
+  map_zero f :=
+    calc
+      f 0 = f 0 * f (EquivLike.inv f 0) := by rw [← map_mul, zero_mul]
+        _ = 0 := by simp
+
+-- See note [lower instance priority]
+instance (priority := 100) toMonoidWithZeroHomClass
+    [MulZeroOneClass α] [MulZeroOneClass β] [MulEquivClass F α β] :
+    MonoidWithZeroHomClass F α β :=
+  { MulEquivClass.instMonoidHomClass F, MulEquivClass.toZeroHomClass with }
+#align mul_equiv_class.to_monoid_with_zero_hom_class MulEquivClass.toMonoidWithZeroHomClass
+
+end MulEquivClass
chore(Algebra/Group): Do not import GroupWithZero (#11202)

I am claiming that anything within the Algebra.Group folder should be additivisable, to the exception of MonoidHom.End maybe. This is not the case of NeZero, MonoidWithZero and MonoidWithZeroHom which were all imported to prove a few lemmas. Those lemmas are easily moved to another file.

Diff
@@ -5,8 +5,7 @@ Authors: Patrick Massot, Kevin Buzzard, Scott Morrison, Johan Commelin, Chris Hu
   Johannes Hölzl, Yury Kudryashov
 -/
 import Mathlib.Algebra.Group.Basic
-import Mathlib.Algebra.GroupWithZero.Hom
-import Mathlib.Algebra.NeZero
+import Mathlib.Algebra.Group.Hom.Defs
 
 #align_import algebra.hom.group from "leanprover-community/mathlib"@"a148d797a1094ab554ad4183a4ad6f130358ef64"
 
@@ -15,6 +14,9 @@ import Mathlib.Algebra.NeZero
 
 -/
 
+-- `NeZero` cannot be additivised, hence its theory should be developed outside of the
+-- `Algebra.Group` folder.
+assert_not_exists NeZero
 
 variable {α β M N P : Type*}
 
@@ -24,23 +26,6 @@ variable {G : Type*} {H : Type*}
 -- groups
 variable {F : Type*}
 
-namespace NeZero
-
-theorem of_map {R M} [Zero R] [Zero M] [FunLike F R M] [ZeroHomClass F R M]
-    (f : F) {r : R} [neZero : NeZero (f r)] : NeZero r :=
-  ⟨fun h => ne (f r) <| by rw [h]; exact ZeroHomClass.map_zero f⟩
-#align ne_zero.of_map NeZero.of_map
-
-theorem of_injective {R M} [Zero R] {r : R} [NeZero r] [Zero M] [FunLike F R M]
-    [ZeroHomClass F R M] {f : F}
-    (hf : Function.Injective f) : NeZero (f r) :=
-  ⟨by
-    rw [← ZeroHomClass.map_zero f]
-    exact hf.ne NeZero.out⟩
-#align ne_zero.of_injective NeZero.of_injective
-
-end NeZero
-
 section DivisionCommMonoid
 
 variable [DivisionCommMonoid α]
@@ -261,11 +246,3 @@ lemma comp_div (f : G →* H) (g h : M →* G) : f.comp (g / h) = f.comp g / f.c
   ext; simp only [Function.comp_apply, div_apply, map_div, coe_comp]
 
 end InvDiv
-
-/-- Given two monoid with zero morphisms `f`, `g` to a commutative monoid, `f * g` is the monoid
-with zero morphism sending `x` to `f x * g x`. -/
-instance [MulZeroOneClass M] [CommMonoidWithZero N] : Mul (M →*₀ N) :=
-  ⟨fun f g => { (f * g : M →* N) with
-    toFun := fun a => f a * g a,
-    map_zero' := by dsimp only []; rw [map_zero, zero_mul] }⟩
-    -- Porting note: why do we need `dsimp` here?
fix: correct statement of zpow_ofNat and ofNat_zsmul (#10969)

Previously these were syntactically identical to the corresponding zpow_coe_nat and coe_nat_zsmul lemmas, now they are about OfNat.ofNat.

Unfortunately, almost every call site uses the ofNat name to refer to Nat.cast, so the downstream proofs had to be adjusted too.

Diff
@@ -480,7 +480,7 @@ lemma map_comp_pow [Group G] [DivisionMonoid H] [MonoidHomClass F G H] (f : F) (
 @[to_additive]
 theorem map_zpow' [DivInvMonoid G] [DivInvMonoid H] [MonoidHomClass F G H]
     (f : F) (hf : ∀ x : G, f x⁻¹ = (f x)⁻¹) (a : G) : ∀ n : ℤ, f (a ^ n) = f a ^ n
-  | (n : ℕ) => by rw [zpow_ofNat, map_pow, zpow_ofNat]
+  | (n : ℕ) => by rw [zpow_coe_nat, map_pow, zpow_coe_nat]
   | Int.negSucc n => by rw [zpow_negSucc, hf, map_pow, ← zpow_negSucc]
 #align map_zpow' map_zpow'
 #align map_zsmul' map_zsmul'
move: Algebraic pi instances (#10693)

Rename

  • Data.Pi.Algebra to Algebra.Group.Pi.Basic
  • Algebra.Group.Pi to Algebra.Group.Pi.Lemmas

Move a few instances from the latter to the former, the goal being that Algebra.Group.Pi.Basic is about all the pi instances of the classes defined in Algebra.Group.Defs. Algebra.Group.Pi.Lemmas will need further rearranging.

Diff
@@ -4,9 +4,8 @@ Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Patrick Massot, Kevin Buzzard, Scott Morrison, Johan Commelin, Chris Hughes,
   Johannes Hölzl, Yury Kudryashov
 -/
-import Mathlib.Algebra.Group.Defs
+import Mathlib.Algebra.Group.Pi.Basic
 import Mathlib.Data.FunLike.Basic
-import Mathlib.Data.Pi.Algebra
 
 #align_import algebra.hom.group from "leanprover-community/mathlib"@"a148d797a1094ab554ad4183a4ad6f130358ef64"
 
feat(Algebra/Group): Miscellaneous lemmas (#9387)

From LeanAPAP, LeanCamCombi and PFR

Diff
@@ -6,6 +6,7 @@ Authors: Patrick Massot, Kevin Buzzard, Scott Morrison, Johan Commelin, Chris Hu
 -/
 import Mathlib.Algebra.Group.Defs
 import Mathlib.Data.FunLike.Basic
+import Mathlib.Data.Pi.Algebra
 
 #align_import algebra.hom.group from "leanprover-community/mathlib"@"a148d797a1094ab554ad4183a4ad6f130358ef64"
 
@@ -58,7 +59,7 @@ MonoidHom, AddMonoidHom
 -/
 
 
-variable {α β M N P : Type*}
+variable {ι α β M N P : Type*}
 
 -- monoids
 variable {G : Type*} {H : Type*}
@@ -205,6 +206,8 @@ theorem map_one [OneHomClass F M N] (f : F) : f 1 = 1 :=
 #align map_one map_one
 #align map_zero map_zero
 
+@[to_additive] lemma map_comp_one [OneHomClass F M N] (f : F) : f ∘ (1 : ι → M) = 1 := by simp
+
 /-- In principle this could be an instance, but in practice it causes performance issues. -/
 @[to_additive]
 theorem Subsingleton.of_oneHomClass [Subsingleton M] [OneHomClass F M N] :
@@ -308,6 +311,10 @@ theorem map_mul [MulHomClass F M N] (f : F) (x y : M) : f (x * y) = f x * f y :=
 #align map_mul map_mul
 #align map_add map_add
 
+@[to_additive (attr := simp)]
+lemma map_comp_mul [MulHomClass F M N] (f : F) (g h : ι → M) : f ∘ (g * h) = f ∘ g * f ∘ h := by
+  ext; simp
+
 /-- Turn an element of a type `F` satisfying `MulHomClass F M N` into an actual
 `MulHom`. This is declared as the default coercion from `F` to `M →ₙ* N`. -/
 @[to_additive (attr := coe)
@@ -420,6 +427,11 @@ theorem map_div' [DivInvMonoid G] [DivInvMonoid H] [MonoidHomClass F G H]
 #align map_div' map_div'
 #align map_sub' map_sub'
 
+@[to_additive]
+lemma map_comp_div' [DivInvMonoid G] [DivInvMonoid H] [MonoidHomClass F G H] (f : F)
+    (hf : ∀ a, f a⁻¹ = (f a)⁻¹) (g h : ι → G) : f ∘ (g / h) = f ∘ g / f ∘ h := by
+  ext; simp [map_div' f hf]
+
 /-- Group homomorphisms preserve inverse. -/
 @[to_additive (attr := simp) "Additive group homomorphisms preserve negation."]
 theorem map_inv [Group G] [DivisionMonoid H] [MonoidHomClass F G H]
@@ -428,6 +440,10 @@ theorem map_inv [Group G] [DivisionMonoid H] [MonoidHomClass F G H]
 #align map_inv map_inv
 #align map_neg map_neg
 
+@[to_additive (attr := simp)]
+lemma map_comp_inv [Group G] [DivisionMonoid H] [MonoidHomClass F G H] (f : F) (g : ι → G) :
+    f ∘ g⁻¹ = (f ∘ g)⁻¹ := by ext; simp
+
 /-- Group homomorphisms preserve division. -/
 @[to_additive "Additive group homomorphisms preserve subtraction."]
 theorem map_mul_inv [Group G] [DivisionMonoid H] [MonoidHomClass F G H] (f : F) (a b : G) :
@@ -435,6 +451,10 @@ theorem map_mul_inv [Group G] [DivisionMonoid H] [MonoidHomClass F G H] (f : F)
 #align map_mul_inv map_mul_inv
 #align map_add_neg map_add_neg
 
+@[to_additive]
+lemma map_comp_mul_inv [Group G] [DivisionMonoid H] [MonoidHomClass F G H] (f : F) (g h : ι → G) :
+    f ∘ (g * h⁻¹) = f ∘ g * (f ∘ h)⁻¹ := by simp
+
 /-- Group homomorphisms preserve division. -/
 @[to_additive (attr := simp) "Additive group homomorphisms preserve subtraction."]
 theorem map_div [Group G] [DivisionMonoid H] [MonoidHomClass F G H] (f : F) :
@@ -442,6 +462,10 @@ theorem map_div [Group G] [DivisionMonoid H] [MonoidHomClass F G H] (f : F) :
 #align map_div map_div
 #align map_sub map_sub
 
+@[to_additive (attr := simp)]
+lemma map_comp_div [Group G] [DivisionMonoid H] [MonoidHomClass F G H] (f : F) (g h : ι → G) :
+    f ∘ (g / h) = f ∘ g / f ∘ h := by ext; simp
+
 @[to_additive (attr := simp) (reorder := 9 10)]
 theorem map_pow [Monoid G] [Monoid H] [MonoidHomClass F G H] (f : F) (a : G) :
     ∀ n : ℕ, f (a ^ n) = f a ^ n
@@ -450,6 +474,10 @@ theorem map_pow [Monoid G] [Monoid H] [MonoidHomClass F G H] (f : F) (a : G) :
 #align map_pow map_pow
 #align map_nsmul map_nsmul
 
+@[to_additive (attr := simp)]
+lemma map_comp_pow [Group G] [DivisionMonoid H] [MonoidHomClass F G H] (f : F) (g : ι → G) (n : ℕ) :
+    f ∘ (g ^ n) = f ∘ g ^ n := by ext; simp
+
 @[to_additive]
 theorem map_zpow' [DivInvMonoid G] [DivInvMonoid H] [MonoidHomClass F G H]
     (f : F) (hf : ∀ x : G, f x⁻¹ = (f x)⁻¹) (a : G) : ∀ n : ℤ, f (a ^ n) = f a ^ n
@@ -458,6 +486,11 @@ theorem map_zpow' [DivInvMonoid G] [DivInvMonoid H] [MonoidHomClass F G H]
 #align map_zpow' map_zpow'
 #align map_zsmul' map_zsmul'
 
+@[to_additive (attr := simp)]
+lemma map_comp_zpow' [DivInvMonoid G] [DivInvMonoid H] [MonoidHomClass F G H] (f : F)
+    (hf : ∀ x : G, f x⁻¹ = (f x)⁻¹) (g : ι → G) (n : ℤ) : f ∘ (g ^ n) = f ∘ g ^ n := by
+  ext; simp [map_zpow' f hf]
+
 /-- Group homomorphisms preserve integer power. -/
 @[to_additive (attr := simp) (reorder := 9 10)
 "Additive group homomorphisms preserve integer scaling."]
@@ -466,6 +499,10 @@ theorem map_zpow [Group G] [DivisionMonoid H] [MonoidHomClass F G H]
 #align map_zpow map_zpow
 #align map_zsmul map_zsmul
 
+@[to_additive]
+lemma map_comp_zpow [Group G] [DivisionMonoid H] [MonoidHomClass F G H] (f : F) (g : ι → G)
+    (n : ℤ) : f ∘ (g ^ n) = f ∘ g ^ n := by simp
+
 end mul_one
 
 -- completely uninteresting lemmas about coercion to function, that all homs need
feat(Algebra/Group): Miscellaneous lemmas (#9387)

From LeanAPAP, LeanCamCombi and PFR

Diff
@@ -102,45 +102,9 @@ theorem comp_mul [Mul M] [CommSemigroup N] [CommSemigroup P] (g : N →ₙ* P) (
 end MulHom
 
 namespace MonoidHom
-
+section Group
 variable [Group G] [CommGroup H]
 
-/-- Given two monoid morphisms `f`, `g` to a commutative monoid, `f * g` is the monoid morphism
-sending `x` to `f x * g x`. -/
-@[to_additive]
-instance mul {M N} [MulOneClass M] [CommMonoid N] : Mul (M →* N) :=
-  ⟨fun f g =>
-    { toFun := fun m => f m * g m,
-      map_one' := show f 1 * g 1 = 1 by simp,
-      map_mul' := fun x y => by
-        intros
-        show f (x * y) * g (x * y) = f x * g x * (f y * g y)
-        rw [f.map_mul, g.map_mul, ← mul_assoc, ← mul_assoc, mul_right_comm (f x)] }⟩
-
-/-- Given two additive monoid morphisms `f`, `g` to an additive commutative monoid,
-`f + g` is the additive monoid morphism sending `x` to `f x + g x`. -/
-add_decl_doc AddMonoidHom.add
-
-@[to_additive (attr := simp)]
-theorem mul_apply {M N} [MulOneClass M] [CommMonoid N] (f g : M →* N) (x : M) :
-    (f * g) x = f x * g x := rfl
-#align monoid_hom.mul_apply MonoidHom.mul_apply
-#align add_monoid_hom.add_apply AddMonoidHom.add_apply
-
-@[to_additive]
-theorem mul_comp [MulOneClass M] [MulOneClass N] [CommMonoid P] (g₁ g₂ : N →* P) (f : M →* N) :
-    (g₁ * g₂).comp f = g₁.comp f * g₂.comp f := rfl
-#align monoid_hom.mul_comp MonoidHom.mul_comp
-#align add_monoid_hom.add_comp AddMonoidHom.add_comp
-
-@[to_additive]
-theorem comp_mul [MulOneClass M] [CommMonoid N] [CommMonoid P] (g : N →* P) (f₁ f₂ : M →* N) :
-    g.comp (f₁ * f₂) = g.comp f₁ * g.comp f₂ := by
-  ext
-  simp only [mul_apply, Function.comp_apply, map_mul, coe_comp]
-#align monoid_hom.comp_mul MonoidHom.comp_mul
-#align add_monoid_hom.comp_add AddMonoidHom.comp_add
-
 /-- A homomorphism from a group to a monoid is injective iff its kernel is trivial.
 For the iff statement on the triviality of the kernel, see `injective_iff_map_eq_one'`.  -/
 @[to_additive
@@ -211,30 +175,67 @@ theorem coe_of_map_div {H : Type*} [Group H] (f : G → H) (hf : ∀ x y, f (x /
 #align monoid_hom.coe_of_map_div MonoidHom.coe_of_map_div
 #align add_monoid_hom.coe_of_map_sub AddMonoidHom.coe_of_map_sub
 
+end Group
+
+section Mul
+variable [MulOneClass M] [CommMonoid N]
+
+/-- Given two monoid morphisms `f`, `g` to a commutative monoid, `f * g` is the monoid morphism
+sending `x` to `f x * g x`. -/
+@[to_additive]
+instance mul : Mul (M →* N) :=
+  ⟨fun f g =>
+    { toFun := fun m => f m * g m,
+      map_one' := show f 1 * g 1 = 1 by simp,
+      map_mul' := fun x y => by
+        intros
+        show f (x * y) * g (x * y) = f x * g x * (f y * g y)
+        rw [f.map_mul, g.map_mul, ← mul_assoc, ← mul_assoc, mul_right_comm (f x)] }⟩
+
+/-- Given two additive monoid morphisms `f`, `g` to an additive commutative monoid,
+`f + g` is the additive monoid morphism sending `x` to `f x + g x`. -/
+add_decl_doc AddMonoidHom.add
+
+@[to_additive (attr := simp)] lemma mul_apply (f g : M →* N) (x : M) : (f * g) x = f x * g x := rfl
+#align monoid_hom.mul_apply MonoidHom.mul_apply
+#align add_monoid_hom.add_apply AddMonoidHom.add_apply
+
+@[to_additive]
+lemma mul_comp [MulOneClass P] (g₁ g₂ : M →* N) (f : P →* M) :
+    (g₁ * g₂).comp f = g₁.comp f * g₂.comp f := rfl
+#align monoid_hom.mul_comp MonoidHom.mul_comp
+#align add_monoid_hom.add_comp AddMonoidHom.add_comp
+
+@[to_additive]
+lemma comp_mul [CommMonoid N] [CommMonoid P] (g : N →* P) (f₁ f₂ : M →* N) :
+    g.comp (f₁ * f₂) = g.comp f₁ * g.comp f₂ := by
+  ext; simp only [mul_apply, Function.comp_apply, map_mul, coe_comp]
+#align monoid_hom.comp_mul MonoidHom.comp_mul
+#align add_monoid_hom.comp_add AddMonoidHom.comp_add
+
+end Mul
+
+section InvDiv
+variable [MulOneClass M] [MulOneClass N] [CommGroup G] [CommGroup H]
+
 /-- If `f` is a monoid homomorphism to a commutative group, then `f⁻¹` is the homomorphism sending
 `x` to `(f x)⁻¹`. -/
 @[to_additive "If `f` is an additive monoid homomorphism to an additive commutative group,
 then `-f` is the homomorphism sending `x` to `-(f x)`."]
-instance {M G} [MulOneClass M] [CommGroup G] : Inv (M →* G) :=
-  ⟨fun f => (mk' fun g => (f g)⁻¹) fun a b => by rw [← mul_inv, f.map_mul]⟩
+instance : Inv (M →* G) where
+  inv f := mk' (fun g ↦ (f g)⁻¹) fun a b ↦ by simp_rw [← mul_inv, f.map_mul]
 
-@[to_additive (attr := simp)]
-theorem inv_apply {M G} [MulOneClass M] [CommGroup G] (f : M →* G) (x : M) :
-    f⁻¹ x = (f x)⁻¹ := rfl
+@[to_additive (attr := simp)] lemma inv_apply (f : M →* G) (x : M) : f⁻¹ x = (f x)⁻¹ := rfl
 #align monoid_hom.inv_apply MonoidHom.inv_apply
 #align add_monoid_hom.neg_apply AddMonoidHom.neg_apply
 
 @[to_additive (attr := simp)]
-theorem inv_comp {M N A} [MulOneClass M] [MulOneClass N] [CommGroup A]
-    (φ : N →* A) (ψ : M →* N) : φ⁻¹.comp ψ = (φ.comp ψ)⁻¹ := by
-  ext
-  simp only [Function.comp_apply, inv_apply, coe_comp]
+theorem inv_comp (φ : N →* G) (ψ : M →* N) : φ⁻¹.comp ψ = (φ.comp ψ)⁻¹ := rfl
 #align monoid_hom.inv_comp MonoidHom.inv_comp
 #align add_monoid_hom.neg_comp AddMonoidHom.neg_comp
 
 @[to_additive (attr := simp)]
-theorem comp_inv {M A B} [MulOneClass M] [CommGroup A] [CommGroup B]
-    (φ : A →* B) (ψ : M →* A) : φ.comp ψ⁻¹ = (φ.comp ψ)⁻¹ := by
+theorem comp_inv (φ : G →* H) (ψ : M →* G) : φ.comp ψ⁻¹ = (φ.comp ψ)⁻¹ := by
   ext
   simp only [Function.comp_apply, inv_apply, map_inv, coe_comp]
 #align monoid_hom.comp_inv MonoidHom.comp_inv
@@ -244,17 +245,22 @@ theorem comp_inv {M A B} [MulOneClass M] [CommGroup A] [CommGroup B]
 sending `x` to `(f x) / (g x)`. -/
 @[to_additive "If `f` and `g` are monoid homomorphisms to an additive commutative group,
 then `f - g` is the homomorphism sending `x` to `(f x) - (g x)`."]
-instance {M G} [MulOneClass M] [CommGroup G] : Div (M →* G) :=
-  ⟨fun f g => (mk' fun x => f x / g x) fun a b => by
-    simp [div_eq_mul_inv, mul_assoc, mul_left_comm, mul_comm]⟩
+instance : Div (M →* G) where
+  div f g := mk' (fun x ↦ f x / g x) fun a b ↦ by
+    simp [div_eq_mul_inv, mul_assoc, mul_left_comm, mul_comm]
 
-@[to_additive (attr := simp)]
-theorem div_apply {M G} [MulOneClass M] [CommGroup G] (f g : M →* G) (x : M) :
-    (f / g) x = f x / g x := rfl
+@[to_additive (attr := simp)] lemma div_apply (f g : M →* G) (x : M) : (f / g) x = f x / g x := rfl
 #align monoid_hom.div_apply MonoidHom.div_apply
 #align add_monoid_hom.sub_apply AddMonoidHom.sub_apply
 
-end MonoidHom
+@[to_additive (attr := simp)]
+lemma div_comp (f g : N →* G) (h : M →* N) : (f / g).comp h = f.comp h / g.comp h := rfl
+
+@[to_additive (attr := simp)]
+lemma comp_div (f : G →* H) (g h : M →* G) : f.comp (g / h) = f.comp g / f.comp h := by
+  ext; simp only [Function.comp_apply, div_apply, map_div, coe_comp]
+
+end InvDiv
 
 /-- Given two monoid with zero morphisms `f`, `g` to a commutative monoid, `f * g` is the monoid
 with zero morphism sending `x` to `f x * g x`. -/
move: Move MonoidWithZeroHom to its own file (#10438)

MonoidWithZeroHom confusingly pulled Algebra.GroupWithZero.Defs in Algebra.Group.Hom.Defs.

move: Move MonoidWithZeroHom to its own file (#10438)

MonoidWithZeroHom confusingly pulled Algebra.GroupWithZero.Defs in Algebra.Group.Hom.Defs.

Diff
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Patrick Massot, Kevin Buzzard, Scott Morrison, Johan Commelin, Chris Hughes,
   Johannes Hölzl, Yury Kudryashov
 -/
-import Mathlib.Algebra.GroupWithZero.Defs
+import Mathlib.Algebra.Group.Defs
 import Mathlib.Data.FunLike.Basic
 
 #align_import algebra.hom.group from "leanprover-community/mathlib"@"a148d797a1094ab554ad4183a4ad6f130358ef64"
@@ -26,13 +26,11 @@ building blocks for other homomorphisms:
 * `OneHom`
 * `AddHom`
 * `MulHom`
-* `MonoidWithZeroHom`
 
 ## Notations
 
 * `→+`: Bundled `AddMonoid` homs. Also use for `AddGroup` homs.
 * `→*`: Bundled `Monoid` homs. Also use for `Group` homs.
-* `→*₀`: Bundled `MonoidWithZero` homs. Also use for `GroupWithZero` homs.
 * `→ₙ*`: Bundled `Semigroup` homs.
 
 ## Implementation notes
@@ -470,77 +468,6 @@ theorem map_zpow [Group G] [DivisionMonoid H] [MonoidHomClass F G H]
 
 end mul_one
 
-section MulZeroOne
-
-variable [MulZeroOneClass M] [MulZeroOneClass N]
-
-/-- `M →*₀ N` is the type of functions `M → N` that preserve
-the `MonoidWithZero` structure.
-
-`MonoidWithZeroHom` is also used for group homomorphisms.
-
-When possible, instead of parametrizing results over `(f : M →*₀ N)`,
-you should parametrize over `(F : Type*) [MonoidWithZeroHomClass F M N] (f : F)`.
-
-When you extend this structure, make sure to extend `MonoidWithZeroHomClass`.
--/
-structure MonoidWithZeroHom (M : Type*) (N : Type*)
-  [MulZeroOneClass M] [MulZeroOneClass N] extends ZeroHom M N, MonoidHom M N
-#align monoid_with_zero_hom MonoidWithZeroHom
-
-attribute [nolint docBlame] MonoidWithZeroHom.toMonoidHom
-attribute [nolint docBlame] MonoidWithZeroHom.toZeroHom
-
-/-- `M →*₀ N` denotes the type of zero-preserving monoid homomorphisms from `M` to `N`. -/
-infixr:25 " →*₀ " => MonoidWithZeroHom
-
-/-- `MonoidWithZeroHomClass F M N` states that `F` is a type of
-`MonoidWithZero`-preserving homomorphisms.
-
-You should also extend this typeclass when you extend `MonoidWithZeroHom`.
--/
-class MonoidWithZeroHomClass (F : Type*) (M N : outParam Type*)
-  [MulZeroOneClass M] [MulZeroOneClass N] [FunLike F M N]
-  extends MonoidHomClass F M N, ZeroHomClass F M N : Prop
-#align monoid_with_zero_hom_class MonoidWithZeroHomClass
-
-instance MonoidWithZeroHom.funLike : FunLike (M →*₀ N) M N where
-  coe f := f.toFun
-  coe_injective' f g h := by
-    cases f
-    cases g
-    congr
-    apply DFunLike.coe_injective'
-    exact h
-
-instance MonoidWithZeroHom.monoidWithZeroHomClass : MonoidWithZeroHomClass (M →*₀ N) M N where
-  map_mul := MonoidWithZeroHom.map_mul'
-  map_one := MonoidWithZeroHom.map_one'
-  map_zero f := f.map_zero'
-#align monoid_with_zero_hom.monoid_with_zero_hom_class MonoidWithZeroHom.monoidWithZeroHomClass
-
-instance [Subsingleton M] : Subsingleton (M →*₀ N) := .of_oneHomClass
-
-variable [FunLike F M N]
-
-/-- Turn an element of a type `F` satisfying `MonoidWithZeroHomClass F M N` into an actual
-`MonoidWithZeroHom`. This is declared as the default coercion from `F` to `M →*₀ N`. -/
-@[coe]
-def MonoidWithZeroHomClass.toMonoidWithZeroHom [MonoidWithZeroHomClass F M N] (f : F) : M →*₀ N :=
-  { (f : M →* N), (f : ZeroHom M N) with }
-
-/-- Any type satisfying `MonoidWithZeroHomClass` can be cast into `MonoidWithZeroHom` via
-`MonoidWithZeroHomClass.toMonoidWithZeroHom`. -/
-instance [MonoidWithZeroHomClass F M N] : CoeTC F (M →*₀ N) :=
-  ⟨MonoidWithZeroHomClass.toMonoidWithZeroHom⟩
-
-@[simp]
-theorem MonoidWithZeroHom.coe_coe [MonoidWithZeroHomClass F M N] (f : F) :
-    ((f : M →*₀ N) : M → N) = f := rfl
-#align monoid_with_zero_hom.coe_coe MonoidWithZeroHom.coe_coe
-
-end MulZeroOne
-
 -- completely uninteresting lemmas about coercion to function, that all homs need
 section Coes
 
@@ -566,20 +493,6 @@ instance MonoidHom.coeToMulHom [MulOneClass M] [MulOneClass N] :
 #align monoid_hom.has_coe_to_mul_hom MonoidHom.coeToMulHom
 #align add_monoid_hom.has_coe_to_add_hom AddMonoidHom.coeToAddHom
 
-attribute [coe] MonoidWithZeroHom.toMonoidHom
-
-/-- `MonoidWithZeroHom` down-cast to a `MonoidHom`, forgetting the 0-preserving property. -/
-instance MonoidWithZeroHom.coeToMonoidHom [MulZeroOneClass M] [MulZeroOneClass N] :
-  Coe (M →*₀ N) (M →* N) := ⟨MonoidWithZeroHom.toMonoidHom⟩
-#align monoid_with_zero_hom.has_coe_to_monoid_hom MonoidWithZeroHom.coeToMonoidHom
-
-attribute [coe] MonoidWithZeroHom.toZeroHom
-
-/-- `MonoidWithZeroHom` down-cast to a `ZeroHom`, forgetting the monoidal property. -/
-instance MonoidWithZeroHom.coeToZeroHom [MulZeroOneClass M] [MulZeroOneClass N] :
-  Coe (M →*₀ N) (ZeroHom M N) := ⟨MonoidWithZeroHom.toZeroHom⟩
-#align monoid_with_zero_hom.has_coe_to_zero_hom MonoidWithZeroHom.coeToZeroHom
-
 -- these must come after the coe_toFun definitions
 initialize_simps_projections ZeroHom (toFun → apply)
 initialize_simps_projections AddHom (toFun → apply)
@@ -587,7 +500,6 @@ initialize_simps_projections AddMonoidHom (toFun → apply)
 initialize_simps_projections OneHom (toFun → apply)
 initialize_simps_projections MulHom (toFun → apply)
 initialize_simps_projections MonoidHom (toFun → apply)
-initialize_simps_projections MonoidWithZeroHom (toFun → apply)
 
 @[to_additive (attr := simp)]
 theorem OneHom.coe_mk [One M] [One N] (f : M → N) (h1) : (OneHom.mk f h1 : M → N) = f := rfl
@@ -632,20 +544,6 @@ theorem MonoidHom.toFun_eq_coe [MulOneClass M] [MulOneClass N] (f : M →* N) :
 #align monoid_hom.to_fun_eq_coe MonoidHom.toFun_eq_coe
 #align add_monoid_hom.to_fun_eq_coe AddMonoidHom.toFun_eq_coe
 
-@[simp]
-theorem MonoidWithZeroHom.coe_mk [MulZeroOneClass M] [MulZeroOneClass N] (f h1 hmul) :
-    (MonoidWithZeroHom.mk f h1 hmul : M → N) = (f : M → N) := rfl
-#align monoid_with_zero_hom.coe_mk MonoidWithZeroHom.coe_mk
-
-@[simp]
-theorem MonoidWithZeroHom.toZeroHom_coe [MulZeroOneClass M] [MulZeroOneClass N] (f : M →*₀ N) :
-    (f.toZeroHom : M → N) = f := rfl
-#align monoid_with_zero_hom.to_zero_hom_coe MonoidWithZeroHom.toZeroHom_coe
-
-theorem MonoidWithZeroHom.toMonoidHom_coe [MulZeroOneClass M] [MulZeroOneClass N] (f : M →*₀ N) :
-    f.toMonoidHom.toFun = f := rfl
-#align monoid_with_zero_hom.to_monoid_hom_coe MonoidWithZeroHom.toMonoidHom_coe
-
 @[to_additive (attr := ext)]
 theorem OneHom.ext [One M] [One N] ⦃f g : OneHom M N⦄ (h : ∀ x, f x = g x) : f = g :=
   DFunLike.ext _ _ h
@@ -664,12 +562,6 @@ theorem MonoidHom.ext [MulOneClass M] [MulOneClass N] ⦃f g : M →* N⦄ (h :
 #align monoid_hom.ext MonoidHom.ext
 #align add_monoid_hom.ext AddMonoidHom.ext
 
-@[ext]
-theorem MonoidWithZeroHom.ext [MulZeroOneClass M] [MulZeroOneClass N] ⦃f g : M →*₀ N⦄
-    (h : ∀ x, f x = g x) : f = g := DFunLike.ext _ _ h
-#align monoid_with_zero_hom.ext MonoidWithZeroHom.ext
-
-
 namespace MonoidHom
 
 variable [Group G]
@@ -712,12 +604,6 @@ theorem MonoidHom.congr_fun [MulOneClass M] [MulOneClass N] {f g : M →* N} (h
 #align monoid_hom.congr_fun MonoidHom.congr_fun
 #align add_monoid_hom.congr_fun AddMonoidHom.congr_fun
 
-/-- Deprecated: use `DFunLike.congr_fun` instead. -/
-@[deprecated]
-theorem MonoidWithZeroHom.congr_fun [MulZeroOneClass M] [MulZeroOneClass N] {f g : M →*₀ N}
-    (h : f = g) (x : M) : f x = g x := DFunLike.congr_fun h x
-#align monoid_with_zero_hom.congr_fun MonoidWithZeroHom.congr_fun
-
 /-- Deprecated: use `DFunLike.congr_arg` instead. -/
 @[to_additive (attr := deprecated) "Deprecated: use `DFunLike.congr_arg` instead."]
 theorem OneHom.congr_arg [One M] [One N] (f : OneHom M N) {x y : M} (h : x = y) : f x = f y :=
@@ -739,12 +625,6 @@ theorem MonoidHom.congr_arg [MulOneClass M] [MulOneClass N] (f : M →* N) {x y
 #align monoid_hom.congr_arg MonoidHom.congr_arg
 #align add_monoid_hom.congr_arg AddMonoidHom.congr_arg
 
-/-- Deprecated: use `DFunLike.congr_arg` instead. -/
-@[deprecated]
-theorem MonoidWithZeroHom.congr_arg [MulZeroOneClass M] [MulZeroOneClass N] (f : M →*₀ N) {x y : M}
-    (h : x = y) : f x = f y := DFunLike.congr_arg f h
-#align monoid_with_zero_hom.congr_arg MonoidWithZeroHom.congr_arg
-
 /-- Deprecated: use `DFunLike.coe_injective` instead. -/
 @[to_additive (attr := deprecated) "Deprecated: use `DFunLike.coe_injective` instead."]
 theorem OneHom.coe_inj [One M] [One N] ⦃f g : OneHom M N⦄ (h : (f : M → N) = g) : f = g :=
@@ -766,12 +646,6 @@ theorem MonoidHom.coe_inj [MulOneClass M] [MulOneClass N] ⦃f g : M →* N⦄ (
 #align monoid_hom.coe_inj MonoidHom.coe_inj
 #align add_monoid_hom.coe_inj AddMonoidHom.coe_inj
 
-/-- Deprecated: use `DFunLike.coe_injective` instead. -/
-@[deprecated]
-theorem MonoidWithZeroHom.coe_inj [MulZeroOneClass M] [MulZeroOneClass N] ⦃f g : M →*₀ N⦄
-    (h : (f : M → N) = g) : f = g := DFunLike.coe_injective h
-#align monoid_with_zero_hom.coe_inj MonoidWithZeroHom.coe_inj
-
 /-- Deprecated: use `DFunLike.ext_iff` instead. -/
 @[to_additive (attr := deprecated) "Deprecated: use `DFunLike.ext_iff` instead."]
 theorem OneHom.ext_iff [One M] [One N] {f g : OneHom M N} : f = g ↔ ∀ x, f x = g x :=
@@ -793,12 +667,6 @@ theorem MonoidHom.ext_iff [MulOneClass M] [MulOneClass N] {f g : M →* N} : f =
 #align monoid_hom.ext_iff MonoidHom.ext_iff
 #align add_monoid_hom.ext_iff AddMonoidHom.ext_iff
 
-/-- Deprecated: use `DFunLike.ext_iff` instead. -/
-@[deprecated]
-theorem MonoidWithZeroHom.ext_iff [MulZeroOneClass M] [MulZeroOneClass N] {f g : M →*₀ N} :
-    f = g ↔ ∀ x, f x = g x := DFunLike.ext_iff
-#align monoid_with_zero_hom.ext_iff MonoidWithZeroHom.ext_iff
-
 end Deprecated
 
 @[to_additive (attr := simp)]
@@ -819,11 +687,6 @@ theorem MonoidHom.mk_coe [MulOneClass M] [MulOneClass N] (f : M →* N) (hmul) :
 #align monoid_hom.mk_coe MonoidHom.mk_coe
 #align add_monoid_hom.mk_coe AddMonoidHom.mk_coe
 
-@[simp]
-theorem MonoidWithZeroHom.mk_coe [MulZeroOneClass M] [MulZeroOneClass N] (f : M →*₀ N) (h1 hmul) :
-    MonoidWithZeroHom.mk f h1 hmul = f := MonoidWithZeroHom.ext fun _ => rfl
-#align monoid_with_zero_hom.mk_coe MonoidWithZeroHom.mk_coe
-
 end Coes
 
 /-- Copy of a `OneHom` with a new `toFun` equal to the old one. Useful to fix definitional
@@ -903,24 +766,6 @@ theorem MonoidHom.copy_eq {_ : MulOneClass M} {_ : MulOneClass N} (f : M →* N)
 #align monoid_hom.copy_eq MonoidHom.copy_eq
 #align add_monoid_hom.copy_eq AddMonoidHom.copy_eq
 
-/-- Copy of a `MonoidHom` with a new `toFun` equal to the old one. Useful to fix
-definitional equalities. -/
-protected def MonoidWithZeroHom.copy [MulZeroOneClass M] [MulZeroOneClass N] (f : M →*₀ N)
-    (f' : M → N) (h : f' = f) : M →* N :=
-  { f.toZeroHom.copy f' h, f.toMonoidHom.copy f' h with }
-#align monoid_with_zero_hom.copy MonoidWithZeroHom.copy
-
-@[simp]
-theorem MonoidWithZeroHom.coe_copy {_ : MulZeroOneClass M} {_ : MulZeroOneClass N} (f : M →*₀ N)
-    (f' : M → N) (h : f' = f) : (f.copy f' h) = f' :=
-  rfl
-#align monoid_with_zero_hom.coe_copy MonoidWithZeroHom.coe_copy
-
-theorem MonoidWithZeroHom.copy_eq {_ : MulZeroOneClass M} {_ : MulZeroOneClass N} (f : M →*₀ N)
-    (f' : M → N) (h : f' = f) : f.copy f' h = f :=
-  DFunLike.ext' h
-#align monoid_with_zero_hom.copy_eq MonoidWithZeroHom.copy_eq
-
 @[to_additive]
 protected theorem OneHom.map_one [One M] [One N] (f : OneHom M N) : f 1 = 1 :=
   f.map_one'
@@ -928,23 +773,12 @@ protected theorem OneHom.map_one [One M] [One N] (f : OneHom M N) : f 1 = 1 :=
 #align zero_hom.map_zero ZeroHom.map_zero
 
 /-- If `f` is a monoid homomorphism then `f 1 = 1`. -/
-@[to_additive]
+@[to_additive "If `f` is an additive monoid homomorphism then `f 0 = 0`."]
 protected theorem MonoidHom.map_one [MulOneClass M] [MulOneClass N] (f : M →* N) : f 1 = 1 :=
   f.map_one'
 #align monoid_hom.map_one MonoidHom.map_one
 #align add_monoid_hom.map_zero AddMonoidHom.map_zero
 
-protected theorem MonoidWithZeroHom.map_one [MulZeroOneClass M] [MulZeroOneClass N] (f : M →*₀ N) :
-    f 1 = 1 := f.map_one'
-#align monoid_with_zero_hom.map_one MonoidWithZeroHom.map_one
-
-/-- If `f` is an additive monoid homomorphism then `f 0 = 0`. -/
-add_decl_doc AddMonoidHom.map_zero
-
-protected theorem MonoidWithZeroHom.map_zero [MulZeroOneClass M] [MulZeroOneClass N] (f : M →*₀ N) :
-    f 0 = 0 := f.map_zero'
-#align monoid_with_zero_hom.map_zero MonoidWithZeroHom.map_zero
-
 @[to_additive]
 protected theorem MulHom.map_mul [Mul M] [Mul N] (f : M →ₙ* N) (a b : M) : f (a * b) = f a * f b :=
   f.map_mul' a b
@@ -952,19 +786,12 @@ protected theorem MulHom.map_mul [Mul M] [Mul N] (f : M →ₙ* N) (a b : M) : f
 #align add_hom.map_add AddHom.map_add
 
 /-- If `f` is a monoid homomorphism then `f (a * b) = f a * f b`. -/
-@[to_additive]
+@[to_additive "If `f` is an additive monoid homomorphism then `f (a + b) = f a + f b`."]
 protected theorem MonoidHom.map_mul [MulOneClass M] [MulOneClass N] (f : M →* N) (a b : M) :
     f (a * b) = f a * f b := f.map_mul' a b
 #align monoid_hom.map_mul MonoidHom.map_mul
 #align add_monoid_hom.map_add AddMonoidHom.map_add
 
-protected theorem MonoidWithZeroHom.map_mul [MulZeroOneClass M] [MulZeroOneClass N] (f : M →*₀ N)
-    (a b : M) : f (a * b) = f a * f b := f.map_mul' a b
-#align monoid_with_zero_hom.map_mul MonoidWithZeroHom.map_mul
-
-/-- If `f` is an additive monoid homomorphism then `f (a + b) = f a + f b`. -/
-add_decl_doc AddMonoidHom.map_add
-
 namespace MonoidHom
 
 variable [MulOneClass M] [MulOneClass N] [FunLike F M N] [MonoidHomClass F M N]
@@ -995,7 +822,7 @@ theorem map_exists_left_inv (f : F) {x : M} (hx : ∃ y, y * x = 1) : ∃ y, y *
 end MonoidHom
 
 /-- The identity map from a type with 1 to itself. -/
-@[to_additive (attr := simps)]
+@[to_additive (attr := simps) "The identity map from a type with zero to itself."]
 def OneHom.id (M : Type*) [One M] : OneHom M M where
   toFun x := x
   map_one' := rfl
@@ -1005,7 +832,7 @@ def OneHom.id (M : Type*) [One M] : OneHom M M where
 #align one_hom.id_apply OneHom.id_apply
 
 /-- The identity map from a type with multiplication to itself. -/
-@[to_additive (attr := simps)]
+@[to_additive (attr := simps) "The identity map from a type with addition to itself."]
 def MulHom.id (M : Type*) [Mul M] : M →ₙ* M where
   toFun x := x
   map_mul' _ _ := rfl
@@ -1015,7 +842,7 @@ def MulHom.id (M : Type*) [Mul M] : M →ₙ* M where
 #align mul_hom.id_apply MulHom.id_apply
 
 /-- The identity map from a monoid to itself. -/
-@[to_additive (attr := simps)]
+@[to_additive (attr := simps) "The identity map from an additive monoid to itself."]
 def MonoidHom.id (M : Type*) [MulOneClass M] : M →* M where
   toFun x := x
   map_one' := rfl
@@ -1025,27 +852,8 @@ def MonoidHom.id (M : Type*) [MulOneClass M] : M →* M where
 #align monoid_hom.id_apply MonoidHom.id_apply
 #align add_monoid_hom.id_apply AddMonoidHom.id_apply
 
-/-- The identity map from a `MonoidWithZero` to itself. -/
-@[simps]
-def MonoidWithZeroHom.id (M : Type*) [MulZeroOneClass M] : M →*₀ M where
-  toFun x := x
-  map_zero' := rfl
-  map_one' := rfl
-  map_mul' _ _ := rfl
-#align monoid_with_zero_hom.id MonoidWithZeroHom.id
-#align monoid_with_zero_hom.id_apply MonoidWithZeroHom.id_apply
-
-/-- The identity map from a type with zero to itself. -/
-add_decl_doc ZeroHom.id
-
-/-- The identity map from a type with addition to itself. -/
-add_decl_doc AddHom.id
-
-/-- The identity map from an additive monoid to itself. -/
-add_decl_doc AddMonoidHom.id
-
 /-- Composition of `OneHom`s as a `OneHom`. -/
-@[to_additive]
+@[to_additive "Composition of `ZeroHom`s as a `ZeroHom`."]
 def OneHom.comp [One M] [One N] [One P] (hnp : OneHom N P) (hmn : OneHom M N) : OneHom M P where
   toFun := hnp ∘ hmn
   map_one' := by simp
@@ -1053,7 +861,7 @@ def OneHom.comp [One M] [One N] [One P] (hnp : OneHom N P) (hmn : OneHom M N) :
 #align zero_hom.comp ZeroHom.comp
 
 /-- Composition of `MulHom`s as a `MulHom`. -/
-@[to_additive]
+@[to_additive "Composition of `AddHom`s as an `AddHom`."]
 def MulHom.comp [Mul M] [Mul N] [Mul P] (hnp : N →ₙ* P) (hmn : M →ₙ* N) : M →ₙ* P where
   toFun := hnp ∘ hmn
   map_mul' x y := by simp
@@ -1061,7 +869,7 @@ def MulHom.comp [Mul M] [Mul N] [Mul P] (hnp : N →ₙ* P) (hmn : M →ₙ* N)
 #align add_hom.comp AddHom.comp
 
 /-- Composition of monoid morphisms as a monoid morphism. -/
-@[to_additive]
+@[to_additive "Composition of additive monoid morphisms as an additive monoid morphism."]
 def MonoidHom.comp [MulOneClass M] [MulOneClass N] [MulOneClass P] (hnp : N →* P) (hmn : M →* N) :
     M →* P where
   toFun := hnp ∘ hmn
@@ -1070,24 +878,6 @@ def MonoidHom.comp [MulOneClass M] [MulOneClass N] [MulOneClass P] (hnp : N →*
 #align monoid_hom.comp MonoidHom.comp
 #align add_monoid_hom.comp AddMonoidHom.comp
 
-/-- Composition of `MonoidWithZeroHom`s as a `MonoidWithZeroHom`. -/
-def MonoidWithZeroHom.comp [MulZeroOneClass M] [MulZeroOneClass N] [MulZeroOneClass P]
-    (hnp : N →*₀ P) (hmn : M →*₀ N) : M →*₀ P where
-  toFun := hnp ∘ hmn
-  map_zero' := by rw [Function.comp_apply, map_zero, map_zero]
-  map_one' := by simp
-  map_mul' := by simp
-#align monoid_with_zero_hom.comp MonoidWithZeroHom.comp
-
-/-- Composition of `ZeroHom`s as a `ZeroHom`. -/
-add_decl_doc ZeroHom.comp
-
-/-- Composition of `AddHom`s as an `AddHom`. -/
-add_decl_doc AddHom.comp
-
-/-- Composition of additive monoid morphisms as an additive monoid morphism. -/
-add_decl_doc AddMonoidHom.comp
-
 @[to_additive (attr := simp)]
 theorem OneHom.coe_comp [One M] [One N] [One P] (g : OneHom N P) (f : OneHom M N) :
     ↑(g.comp f) = g ∘ f := rfl
@@ -1106,11 +896,6 @@ theorem MonoidHom.coe_comp [MulOneClass M] [MulOneClass N] [MulOneClass P]
 #align monoid_hom.coe_comp MonoidHom.coe_comp
 #align add_monoid_hom.coe_comp AddMonoidHom.coe_comp
 
-@[simp]
-theorem MonoidWithZeroHom.coe_comp [MulZeroOneClass M] [MulZeroOneClass N] [MulZeroOneClass P]
-    (g : N →*₀ P) (f : M →*₀ N) : ↑(g.comp f) = g ∘ f := rfl
-#align monoid_with_zero_hom.coe_comp MonoidWithZeroHom.coe_comp
-
 @[to_additive]
 theorem OneHom.comp_apply [One M] [One N] [One P] (g : OneHom N P) (f : OneHom M N) (x : M) :
     g.comp f x = g (f x) := rfl
@@ -1129,10 +914,6 @@ theorem MonoidHom.comp_apply [MulOneClass M] [MulOneClass N] [MulOneClass P]
 #align monoid_hom.comp_apply MonoidHom.comp_apply
 #align add_monoid_hom.comp_apply AddMonoidHom.comp_apply
 
-theorem MonoidWithZeroHom.comp_apply [MulZeroOneClass M] [MulZeroOneClass N] [MulZeroOneClass P]
-    (g : N →*₀ P) (f : M →*₀ N) (x : M) : g.comp f x = g (f x) := rfl
-#align monoid_with_zero_hom.comp_apply MonoidWithZeroHom.comp_apply
-
 /-- Composition of monoid homomorphisms is associative. -/
 @[to_additive "Composition of additive monoid homomorphisms is associative."]
 theorem OneHom.comp_assoc {Q : Type*} [One M] [One N] [One P] [One Q]
@@ -1154,11 +935,6 @@ theorem MonoidHom.comp_assoc {Q : Type*} [MulOneClass M] [MulOneClass N] [MulOne
 #align monoid_hom.comp_assoc MonoidHom.comp_assoc
 #align add_monoid_hom.comp_assoc AddMonoidHom.comp_assoc
 
-theorem MonoidWithZeroHom.comp_assoc {Q : Type*} [MulZeroOneClass M] [MulZeroOneClass N]
-    [MulZeroOneClass P] [MulZeroOneClass Q] (f : M →*₀ N) (g : N →*₀ P) (h : P →*₀ Q) :
-    (h.comp g).comp f = h.comp (g.comp f) := rfl
-#align monoid_with_zero_hom.comp_assoc MonoidWithZeroHom.comp_assoc
-
 @[to_additive]
 theorem OneHom.cancel_right [One M] [One N] [One P] {g₁ g₂ : OneHom N P} {f : OneHom M N}
     (hf : Function.Surjective f) : g₁.comp f = g₂.comp f ↔ g₁ = g₂ :=
@@ -1181,12 +957,6 @@ theorem MonoidHom.cancel_right [MulOneClass M] [MulOneClass N] [MulOneClass P]
 #align monoid_hom.cancel_right MonoidHom.cancel_right
 #align add_monoid_hom.cancel_right AddMonoidHom.cancel_right
 
-theorem MonoidWithZeroHom.cancel_right [MulZeroOneClass M] [MulZeroOneClass N] [MulZeroOneClass P]
-    {g₁ g₂ : N →*₀ P} {f : M →*₀ N} (hf : Function.Surjective f) :
-    g₁.comp f = g₂.comp f ↔ g₁ = g₂ :=
-  ⟨fun h => MonoidWithZeroHom.ext <| hf.forall.2 (DFunLike.ext_iff.1 h), fun h => h ▸ rfl⟩
-#align monoid_with_zero_hom.cancel_right MonoidWithZeroHom.cancel_right
-
 @[to_additive]
 theorem OneHom.cancel_left [One M] [One N] [One P] {g : OneHom N P} {f₁ f₂ : OneHom M N}
     (hg : Function.Injective g) : g.comp f₁ = g.comp f₂ ↔ f₁ = f₂ :=
@@ -1211,14 +981,6 @@ theorem MonoidHom.cancel_left [MulOneClass M] [MulOneClass N] [MulOneClass P]
 #align monoid_hom.cancel_left MonoidHom.cancel_left
 #align add_monoid_hom.cancel_left AddMonoidHom.cancel_left
 
-theorem MonoidWithZeroHom.cancel_left [MulZeroOneClass M] [MulZeroOneClass N] [MulZeroOneClass P]
-    {g : N →*₀ P} {f₁ f₂ : M →*₀ N} (hg : Function.Injective g) :
-    g.comp f₁ = g.comp f₂ ↔ f₁ = f₂ :=
-  ⟨fun h =>
-    MonoidWithZeroHom.ext fun x => hg <| by rw [← MonoidWithZeroHom.comp_apply, h,
-    MonoidWithZeroHom.comp_apply], fun h => h ▸ rfl⟩
-#align monoid_with_zero_hom.cancel_left MonoidWithZeroHom.cancel_left
-
 set_option linter.deprecated false in
 section
 
@@ -1236,18 +998,8 @@ theorem MonoidHom.toMulHom_injective [MulOneClass M] [MulOneClass N] :
 #align monoid_hom.to_mul_hom_injective MonoidHom.toMulHom_injective
 #align add_monoid_hom.to_add_hom_injective AddMonoidHom.toAddHom_injective
 
-theorem MonoidWithZeroHom.toMonoidHom_injective [MulZeroOneClass M] [MulZeroOneClass N] :
-    Function.Injective (MonoidWithZeroHom.toMonoidHom : (M →*₀ N) → M →* N) :=
-  fun _ _ h => MonoidWithZeroHom.ext <| MonoidHom.ext_iff.mp h
-#align monoid_with_zero_hom.to_monoid_hom_injective MonoidWithZeroHom.toMonoidHom_injective
-
 end
 
-theorem MonoidWithZeroHom.toZeroHom_injective [MulZeroOneClass M] [MulZeroOneClass N] :
-    Function.Injective (MonoidWithZeroHom.toZeroHom : (M →*₀ N) → ZeroHom M N) :=
-  fun _ _ h => MonoidWithZeroHom.ext <| (DFunLike.ext_iff (F := ZeroHom M N)).mp h
-#align monoid_with_zero_hom.to_zero_hom_injective MonoidWithZeroHom.toZeroHom_injective
-
 @[to_additive (attr := simp)]
 theorem OneHom.comp_id [One M] [One N] (f : OneHom M N) : f.comp (OneHom.id M) = f :=
   OneHom.ext fun _ => rfl
@@ -1266,11 +1018,6 @@ theorem MonoidHom.comp_id [MulOneClass M] [MulOneClass N] (f : M →* N) :
 #align monoid_hom.comp_id MonoidHom.comp_id
 #align add_monoid_hom.comp_id AddMonoidHom.comp_id
 
-@[simp]
-theorem MonoidWithZeroHom.comp_id [MulZeroOneClass M] [MulZeroOneClass N] (f : M →*₀ N) :
-    f.comp (MonoidWithZeroHom.id M) = f := MonoidWithZeroHom.ext fun _ => rfl
-#align monoid_with_zero_hom.comp_id MonoidWithZeroHom.comp_id
-
 @[to_additive (attr := simp)]
 theorem OneHom.id_comp [One M] [One N] (f : OneHom M N) : (OneHom.id N).comp f = f :=
   OneHom.ext fun _ => rfl
@@ -1289,11 +1036,6 @@ theorem MonoidHom.id_comp [MulOneClass M] [MulOneClass N] (f : M →* N) :
 #align monoid_hom.id_comp MonoidHom.id_comp
 #align add_monoid_hom.id_comp AddMonoidHom.id_comp
 
-@[simp]
-theorem MonoidWithZeroHom.id_comp [MulZeroOneClass M] [MulZeroOneClass N] (f : M →*₀ N) :
-    (MonoidWithZeroHom.id N).comp f = f := MonoidWithZeroHom.ext fun _ => rfl
-#align monoid_with_zero_hom.id_comp MonoidWithZeroHom.id_comp
-
 @[to_additive]
 protected theorem MonoidHom.map_pow [Monoid M] [Monoid N] (f : M →* N) (a : M) (n : ℕ) :
     f (a ^ n) = f a ^ n := map_pow f a n
@@ -1427,9 +1169,6 @@ instance [Mul M] [MulOneClass N] : Inhabited (M →ₙ* N) := ⟨1⟩
 @[to_additive]
 instance [MulOneClass M] [MulOneClass N] : Inhabited (M →* N) := ⟨1⟩
 
--- unlike the other homs, `MonoidWithZeroHom` does not have a `1` or `0`
-instance [MulZeroOneClass M] : Inhabited (M →*₀ M) := ⟨MonoidWithZeroHom.id M⟩
-
 namespace MonoidHom
 
 variable [Group G] [CommGroup H]
move: Move MonoidWithZeroHom to its own file (#10438)

MonoidWithZeroHom confusingly pulled Algebra.GroupWithZero.Defs in Algebra.Group.Hom.Defs.

Diff
@@ -5,7 +5,7 @@ Authors: Patrick Massot, Kevin Buzzard, Scott Morrison, Johan Commelin, Chris Hu
   Johannes Hölzl, Yury Kudryashov
 -/
 import Mathlib.Algebra.Group.Basic
-import Mathlib.Algebra.Group.Hom.Defs
+import Mathlib.Algebra.GroupWithZero.Hom
 import Mathlib.Algebra.NeZero
 
 #align_import algebra.hom.group from "leanprover-community/mathlib"@"a148d797a1094ab554ad4183a4ad6f130358ef64"
refactor(Data/FunLike): use unbundled inheritance from FunLike (#8386)

The FunLike hierarchy is very big and gets scanned through each time we need a coercion (via the CoeFun instance). It looks like unbundled inheritance suits Lean 4 better here. The only class that still extends FunLike is EquivLike, since that has a custom coe_injective' field that is easier to implement. All other classes should take FunLike or EquivLike as a parameter.

Zulip thread

Important changes

Previously, morphism classes would be Type-valued and extend FunLike:

/-- `MyHomClass F A B` states that `F` is a type of `MyClass.op`-preserving morphisms.
You should extend this class when you extend `MyHom`. -/
class MyHomClass (F : Type*) (A B : outParam <| Type*) [MyClass A] [MyClass B]
  extends FunLike F A B :=
(map_op : ∀ (f : F) (x y : A), f (MyClass.op x y) = MyClass.op (f x) (f y))

After this PR, they should be Prop-valued and take FunLike as a parameter:

/-- `MyHomClass F A B` states that `F` is a type of `MyClass.op`-preserving morphisms.
You should extend this class when you extend `MyHom`. -/
class MyHomClass (F : Type*) (A B : outParam <| Type*) [MyClass A] [MyClass B]
  [FunLike F A B] : Prop :=
(map_op : ∀ (f : F) (x y : A), f (MyClass.op x y) = MyClass.op (f x) (f y))

(Note that A B stay marked as outParam even though they are not purely required to be so due to the FunLike parameter already filling them in. This is required to see through type synonyms, which is important in the category theory library. Also, I think keeping them as outParam is slightly faster.)

Similarly, MyEquivClass should take EquivLike as a parameter.

As a result, every mention of [MyHomClass F A B] should become [FunLike F A B] [MyHomClass F A B].

Remaining issues

Slower (failing) search

While overall this gives some great speedups, there are some cases that are noticeably slower. In particular, a failing application of a lemma such as map_mul is more expensive. This is due to suboptimal processing of arguments. For example:

variable [FunLike F M N] [Mul M] [Mul N] (f : F) (x : M) (y : M)

theorem map_mul [MulHomClass F M N] : f (x * y) = f x * f y

example [AddHomClass F A B] : f (x * y) = f x * f y := map_mul f _ _

Before this PR, applying map_mul f gives the goals [Mul ?M] [Mul ?N] [MulHomClass F ?M ?N]. Since M and N are out_params, [MulHomClass F ?M ?N] is synthesized first, supplies values for ?M and ?N and then the Mul M and Mul N instances can be found.

After this PR, the goals become [FunLike F ?M ?N] [Mul ?M] [Mul ?N] [MulHomClass F ?M ?N]. Now [FunLike F ?M ?N] is synthesized first, supplies values for ?M and ?N and then the Mul M and Mul N instances can be found, before trying MulHomClass F M N which fails. Since the Mul hierarchy is very big, this can be slow to fail, especially when there is no such Mul instance.

A long-term but harder to achieve solution would be to specify the order in which instance goals get solved. For example, we'd like to change the arguments to map_mul to look like [FunLike F M N] [Mul M] [Mul N] [highPriority <| MulHomClass F M N] because MulHomClass fails or succeeds much faster than the others.

As a consequence, the simpNF linter is much slower since by design it tries and fails to apply many map_ lemmas. The same issue occurs a few times in existing calls to simp [map_mul], where map_mul is tried "too soon" and fails. Thanks to the speedup of leanprover/lean4#2478 the impact is very limited, only in files that already were close to the timeout.

simp not firing sometimes

This affects map_smulₛₗ and related definitions. For simp lemmas Lean apparently uses a slightly different mechanism to find instances, so that rw can find every argument to map_smulₛₗ successfully but simp can't: leanprover/lean4#3701.

Missing instances due to unification failing

Especially in the category theory library, we might sometimes have a type A which is also accessible as a synonym (Bundled A hA).1. Instance synthesis doesn't always work if we have f : A →* B but x * y : (Bundled A hA).1 or vice versa. This seems to be mostly fixed by keeping A B as outParams in MulHomClass F A B. (Presumably because Lean will do a definitional check A =?= (Bundled A hA).1 instead of using the syntax in the discrimination tree.)

Workaround for issues

The timeouts can be worked around for now by specifying which map_mul we mean, either as map_mul f for some explicit f, or as e.g. MonoidHomClass.map_mul.

map_smulₛₗ not firing as simp lemma can be worked around by going back to the pre-FunLike situation and making LinearMap.map_smulₛₗ a simp lemma instead of the generic map_smulₛₗ. Writing simp [map_smulₛₗ _] also works.

Co-authored-by: Matthew Ballard <matt@mrb.email> Co-authored-by: Scott Morrison <scott.morrison@gmail.com> Co-authored-by: Scott Morrison <scott@tqft.net> Co-authored-by: Anne Baanen <Vierkantor@users.noreply.github.com>

Diff
@@ -90,8 +90,8 @@ structure ZeroHom (M : Type*) (N : Type*) [Zero M] [Zero N] where
 
 You should extend this typeclass when you extend `ZeroHom`.
 -/
-class ZeroHomClass (F : Type*) (M N : outParam (Type*)) [Zero M] [Zero N]
-  extends DFunLike F M fun _ => N where
+class ZeroHomClass (F : Type*) (M N : outParam Type*) [Zero M] [Zero N] [FunLike F M N] : Prop
+    where
   /-- The proposition that the function preserves 0 -/
   map_zero : ∀ f : F, f 0 = 0
 #align zero_hom_class ZeroHomClass
@@ -119,8 +119,7 @@ structure AddHom (M : Type*) (N : Type*) [Add M] [Add N] where
 /-- `AddHomClass F M N` states that `F` is a type of addition-preserving homomorphisms.
 You should declare an instance of this typeclass when you extend `AddHom`.
 -/
-class AddHomClass (F : Type*) (M N : outParam (Type*)) [Add M] [Add N]
-  extends DFunLike F M fun _ => N where
+class AddHomClass (F : Type*) (M N : outParam Type*) [Add M] [Add N] [FunLike F M N] : Prop where
   /-- The proposition that the function preserves addition -/
   map_add : ∀ (f : F) (x y : M), f (x + y) = f x + f y
 #align add_hom_class AddHomClass
@@ -154,8 +153,8 @@ homomorphisms.
 
 You should also extend this typeclass when you extend `AddMonoidHom`.
 -/
-class AddMonoidHomClass (F : Type*) (M N : outParam (Type*)) [AddZeroClass M] [AddZeroClass N]
-  extends AddHomClass F M N, ZeroHomClass F M N
+class AddMonoidHomClass (F M N : Type*) [AddZeroClass M] [AddZeroClass N] [FunLike F M N]
+  extends AddHomClass F M N, ZeroHomClass F M N : Prop
 #align add_monoid_hom_class AddMonoidHomClass
 
 -- Instances and lemmas are defined below through `@[to_additive]`.
@@ -184,20 +183,24 @@ structure OneHom (M : Type*) (N : Type*) [One M] [One N] where
 You should extend this typeclass when you extend `OneHom`.
 -/
 @[to_additive]
-class OneHomClass (F : Type*) (M N : outParam (Type*)) [One M] [One N]
-  extends DFunLike F M fun _ => N where
+class OneHomClass (F : Type*) (M N : outParam Type*) [One M] [One N] [FunLike F M N] : Prop where
   /-- The proposition that the function preserves 1 -/
   map_one : ∀ f : F, f 1 = 1
 #align one_hom_class OneHomClass
 
 @[to_additive]
-instance OneHom.oneHomClass : OneHomClass (OneHom M N) M N where
+instance OneHom.funLike : FunLike (OneHom M N) M N where
   coe := OneHom.toFun
   coe_injective' f g h := by cases f; cases g; congr
+
+@[to_additive]
+instance OneHom.oneHomClass : OneHomClass (OneHom M N) M N where
   map_one := OneHom.map_one'
 #align one_hom.one_hom_class OneHom.oneHomClass
 #align zero_hom.zero_hom_class ZeroHom.zeroHomClass
 
+variable [FunLike F M N]
+
 @[to_additive (attr := simp)]
 theorem map_one [OneHomClass F M N] (f : F) : f 1 = 1 :=
   OneHomClass.map_one f
@@ -213,20 +216,21 @@ theorem Subsingleton.of_oneHomClass [Subsingleton M] [OneHomClass F M N] :
 @[to_additive] instance [Subsingleton M] : Subsingleton (OneHom M N) := .of_oneHomClass
 
 @[to_additive]
-theorem map_eq_one_iff [OneHomClass F M N] (f : F) (hf : Function.Injective f) {x : M} :
+theorem map_eq_one_iff [OneHomClass F M N] (f : F) (hf : Function.Injective f)
+    {x : M} :
     f x = 1 ↔ x = 1 := hf.eq_iff' (map_one f)
 #align map_eq_one_iff map_eq_one_iff
 #align map_eq_zero_iff map_eq_zero_iff
 
 @[to_additive]
-theorem map_ne_one_iff {R S F : Type*} [One R] [One S] [OneHomClass F R S] (f : F)
+theorem map_ne_one_iff {R S F : Type*} [One R] [One S] [FunLike F R S] [OneHomClass F R S] (f : F)
     (hf : Function.Injective f) {x : R} : f x ≠ 1 ↔ x ≠ 1 := (map_eq_one_iff f hf).not
 #align map_ne_one_iff map_ne_one_iff
 #align map_ne_zero_iff map_ne_zero_iff
 
 @[to_additive]
-theorem ne_one_of_map {R S F : Type*} [One R] [One S] [OneHomClass F R S] {f : F} {x : R}
-    (hx : f x ≠ 1) : x ≠ 1 := ne_of_apply_ne f <| (by rwa [(map_one f)])
+theorem ne_one_of_map {R S F : Type*} [One R] [One S] [FunLike F R S] [OneHomClass F R S]
+    {f : F} {x : R} (hx : f x ≠ 1) : x ≠ 1 := ne_of_apply_ne f <| (by rwa [(map_one f)])
 #align ne_one_of_map ne_one_of_map
 #align ne_zero_of_map ne_zero_of_map
 
@@ -246,7 +250,8 @@ instance [OneHomClass F M N] : CoeTC F (OneHom M N) :=
   ⟨OneHomClass.toOneHom⟩
 
 @[to_additive (attr := simp)]
-theorem OneHom.coe_coe [OneHomClass F M N] (f : F) : ((f : OneHom M N) : M → N) = f := rfl
+theorem OneHom.coe_coe [OneHomClass F M N] (f : F) :
+    ((f : OneHom M N) : M → N) = f := rfl
 #align one_hom.coe_coe OneHom.coe_coe
 #align zero_hom.coe_coe ZeroHom.coe_coe
 
@@ -280,21 +285,25 @@ infixr:25 " →ₙ* " => MulHom
 You should declare an instance of this typeclass when you extend `MulHom`.
 -/
 @[to_additive]
-class MulHomClass (F : Type*) (M N : outParam (Type*)) [Mul M] [Mul N]
-  extends DFunLike F M fun _ => N where
+class MulHomClass (F : Type*) (M N : outParam Type*) [Mul M] [Mul N] [FunLike F M N] : Prop where
   /-- The proposition that the function preserves multiplication -/
   map_mul : ∀ (f : F) (x y : M), f (x * y) = f x * f y
 #align mul_hom_class MulHomClass
 
+@[to_additive]
+instance MulHom.funLike : FunLike (M →ₙ* N) M N where
+  coe := MulHom.toFun
+  coe_injective' f g h := by cases f; cases g; congr
+
 /-- `MulHom` is a type of multiplication-preserving homomorphisms -/
 @[to_additive "`AddHom` is a type of addition-preserving homomorphisms"]
 instance MulHom.mulHomClass : MulHomClass (M →ₙ* N) M N where
-  coe := MulHom.toFun
-  coe_injective' f g h := by cases f; cases g; congr
   map_mul := MulHom.map_mul'
 #align mul_hom.mul_hom_class MulHom.mulHomClass
 #align add_hom.add_hom_class AddHom.addHomClass
 
+variable [FunLike F M N]
+
 @[to_additive (attr := simp)]
 theorem map_mul [MulHomClass F M N] (f : F) (x y : M) : f (x * y) = f x * f y :=
   MulHomClass.map_mul f x y
@@ -352,12 +361,13 @@ infixr:25 " →* " => MonoidHom
 /-- `MonoidHomClass F M N` states that `F` is a type of `Monoid`-preserving homomorphisms.
 You should also extend this typeclass when you extend `MonoidHom`. -/
 @[to_additive]
-class MonoidHomClass (F : Type*) (M N : outParam (Type*)) [MulOneClass M] [MulOneClass N]
-  extends MulHomClass F M N, OneHomClass F M N
+class MonoidHomClass (F : Type*) (M N : outParam Type*) [MulOneClass M] [MulOneClass N]
+  [FunLike F M N]
+  extends MulHomClass F M N, OneHomClass F M N : Prop
 #align monoid_hom_class MonoidHomClass
 
 @[to_additive]
-instance MonoidHom.monoidHomClass : MonoidHomClass (M →* N) M N where
+instance MonoidHom.instFunLike : FunLike (M →* N) M N where
   coe f := f.toFun
   coe_injective' f g h := by
     cases f
@@ -365,17 +375,18 @@ instance MonoidHom.monoidHomClass : MonoidHomClass (M →* N) M N where
     congr
     apply DFunLike.coe_injective'
     exact h
+
+@[to_additive]
+instance MonoidHom.instMonoidHomClass : MonoidHomClass (M →* N) M N where
   map_mul := MonoidHom.map_mul'
   map_one f := f.toOneHom.map_one'
-#align monoid_hom.monoid_hom_class MonoidHom.monoidHomClass
-#align add_monoid_hom.add_monoid_hom_class AddMonoidHom.addMonoidHomClass
-
--- Porting note: we need to add an extra `to_additive`.
--- This is waiting on https://github.com/leanprover-community/mathlib4/issues/660
-attribute [to_additive existing] MonoidHomClass.toOneHomClass
+#align monoid_hom.monoid_hom_class MonoidHom.instMonoidHomClass
+#align add_monoid_hom.add_monoid_hom_class AddMonoidHom.instAddMonoidHomClass
 
 @[to_additive] instance [Subsingleton M] : Subsingleton (M →* N) := .of_oneHomClass
 
+variable [FunLike F M N]
+
 /-- Turn an element of a type `F` satisfying `MonoidHomClass F M N` into an actual
 `MonoidHom`. This is declared as the default coercion from `F` to `M →* N`. -/
 @[to_additive (attr := coe)
@@ -402,6 +413,8 @@ theorem map_mul_eq_one [MonoidHomClass F M N] (f : F) {a b : M} (h : a * b = 1)
 #align map_mul_eq_one map_mul_eq_one
 #align map_add_eq_zero map_add_eq_zero
 
+variable [FunLike F G H]
+
 @[to_additive]
 theorem map_div' [DivInvMonoid G] [DivInvMonoid H] [MonoidHomClass F G H]
     (f : F) (hf : ∀ a, f a⁻¹ = (f a)⁻¹) (a b : G) : f (a / b) = f a / f b := by
@@ -431,7 +444,7 @@ theorem map_div [Group G] [DivisionMonoid H] [MonoidHomClass F G H] (f : F) :
 #align map_div map_div
 #align map_sub map_sub
 
-@[to_additive (attr := simp) (reorder := 8 9)]
+@[to_additive (attr := simp) (reorder := 9 10)]
 theorem map_pow [Monoid G] [Monoid H] [MonoidHomClass F G H] (f : F) (a : G) :
     ∀ n : ℕ, f (a ^ n) = f a ^ n
   | 0 => by rw [pow_zero, pow_zero, map_one]
@@ -448,7 +461,7 @@ theorem map_zpow' [DivInvMonoid G] [DivInvMonoid H] [MonoidHomClass F G H]
 #align map_zsmul' map_zsmul'
 
 /-- Group homomorphisms preserve integer power. -/
-@[to_additive (attr := simp) (reorder := 8 9)
+@[to_additive (attr := simp) (reorder := 9 10)
 "Additive group homomorphisms preserve integer scaling."]
 theorem map_zpow [Group G] [DivisionMonoid H] [MonoidHomClass F G H]
     (f : F) (g : G) (n : ℤ) : f (g ^ n) = f g ^ n := map_zpow' f (map_inv f) g n
@@ -486,11 +499,12 @@ infixr:25 " →*₀ " => MonoidWithZeroHom
 
 You should also extend this typeclass when you extend `MonoidWithZeroHom`.
 -/
-class MonoidWithZeroHomClass (F : Type*) (M N : outParam (Type*)) [MulZeroOneClass M]
-  [MulZeroOneClass N] extends MonoidHomClass F M N, ZeroHomClass F M N
+class MonoidWithZeroHomClass (F : Type*) (M N : outParam Type*)
+  [MulZeroOneClass M] [MulZeroOneClass N] [FunLike F M N]
+  extends MonoidHomClass F M N, ZeroHomClass F M N : Prop
 #align monoid_with_zero_hom_class MonoidWithZeroHomClass
 
-instance MonoidWithZeroHom.monoidWithZeroHomClass : MonoidWithZeroHomClass (M →*₀ N) M N where
+instance MonoidWithZeroHom.funLike : FunLike (M →*₀ N) M N where
   coe f := f.toFun
   coe_injective' f g h := by
     cases f
@@ -498,6 +512,8 @@ instance MonoidWithZeroHom.monoidWithZeroHomClass : MonoidWithZeroHomClass (M 
     congr
     apply DFunLike.coe_injective'
     exact h
+
+instance MonoidWithZeroHom.monoidWithZeroHomClass : MonoidWithZeroHomClass (M →*₀ N) M N where
   map_mul := MonoidWithZeroHom.map_mul'
   map_one := MonoidWithZeroHom.map_one'
   map_zero f := f.map_zero'
@@ -505,6 +521,8 @@ instance MonoidWithZeroHom.monoidWithZeroHomClass : MonoidWithZeroHomClass (M 
 
 instance [Subsingleton M] : Subsingleton (M →*₀ N) := .of_oneHomClass
 
+variable [FunLike F M N]
+
 /-- Turn an element of a type `F` satisfying `MonoidWithZeroHomClass F M N` into an actual
 `MonoidWithZeroHom`. This is declared as the default coercion from `F` to `M →*₀ N`. -/
 @[coe]
@@ -949,7 +967,7 @@ add_decl_doc AddMonoidHom.map_add
 
 namespace MonoidHom
 
-variable [MulOneClass M] [MulOneClass N] [MonoidHomClass F M N]
+variable [MulOneClass M] [MulOneClass N] [FunLike F M N] [MonoidHomClass F M N]
 
 /-- Given a monoid homomorphism `f : M →* N` and an element `x : M`, if `x` has a right inverse,
 then `f x` has a right inverse too. For elements invertible on both sides see `IsUnit.map`. -/
@@ -1310,7 +1328,9 @@ instance : Monoid (Monoid.End M) where
 
 instance : Inhabited (Monoid.End M) := ⟨1⟩
 
-instance : MonoidHomClass (Monoid.End M) M M := MonoidHom.monoidHomClass
+instance : FunLike (Monoid.End M) M M := MonoidHom.instFunLike
+
+instance : MonoidHomClass (Monoid.End M) M M := MonoidHom.instMonoidHomClass
 
 end End
 
@@ -1343,7 +1363,9 @@ instance monoid : Monoid (AddMonoid.End A) where
 
 instance : Inhabited (AddMonoid.End A) := ⟨1⟩
 
-instance : AddMonoidHomClass (AddMonoid.End A) A A := AddMonoidHom.addMonoidHomClass
+instance : FunLike (AddMonoid.End A) A A := AddMonoidHom.instFunLike
+
+instance : AddMonoidHomClass (AddMonoid.End A) A A := AddMonoidHom.instAddMonoidHomClass
 
 end End
 
refactor(Data/FunLike): use unbundled inheritance from FunLike (#8386)

The FunLike hierarchy is very big and gets scanned through each time we need a coercion (via the CoeFun instance). It looks like unbundled inheritance suits Lean 4 better here. The only class that still extends FunLike is EquivLike, since that has a custom coe_injective' field that is easier to implement. All other classes should take FunLike or EquivLike as a parameter.

Zulip thread

Important changes

Previously, morphism classes would be Type-valued and extend FunLike:

/-- `MyHomClass F A B` states that `F` is a type of `MyClass.op`-preserving morphisms.
You should extend this class when you extend `MyHom`. -/
class MyHomClass (F : Type*) (A B : outParam <| Type*) [MyClass A] [MyClass B]
  extends FunLike F A B :=
(map_op : ∀ (f : F) (x y : A), f (MyClass.op x y) = MyClass.op (f x) (f y))

After this PR, they should be Prop-valued and take FunLike as a parameter:

/-- `MyHomClass F A B` states that `F` is a type of `MyClass.op`-preserving morphisms.
You should extend this class when you extend `MyHom`. -/
class MyHomClass (F : Type*) (A B : outParam <| Type*) [MyClass A] [MyClass B]
  [FunLike F A B] : Prop :=
(map_op : ∀ (f : F) (x y : A), f (MyClass.op x y) = MyClass.op (f x) (f y))

(Note that A B stay marked as outParam even though they are not purely required to be so due to the FunLike parameter already filling them in. This is required to see through type synonyms, which is important in the category theory library. Also, I think keeping them as outParam is slightly faster.)

Similarly, MyEquivClass should take EquivLike as a parameter.

As a result, every mention of [MyHomClass F A B] should become [FunLike F A B] [MyHomClass F A B].

Remaining issues

Slower (failing) search

While overall this gives some great speedups, there are some cases that are noticeably slower. In particular, a failing application of a lemma such as map_mul is more expensive. This is due to suboptimal processing of arguments. For example:

variable [FunLike F M N] [Mul M] [Mul N] (f : F) (x : M) (y : M)

theorem map_mul [MulHomClass F M N] : f (x * y) = f x * f y

example [AddHomClass F A B] : f (x * y) = f x * f y := map_mul f _ _

Before this PR, applying map_mul f gives the goals [Mul ?M] [Mul ?N] [MulHomClass F ?M ?N]. Since M and N are out_params, [MulHomClass F ?M ?N] is synthesized first, supplies values for ?M and ?N and then the Mul M and Mul N instances can be found.

After this PR, the goals become [FunLike F ?M ?N] [Mul ?M] [Mul ?N] [MulHomClass F ?M ?N]. Now [FunLike F ?M ?N] is synthesized first, supplies values for ?M and ?N and then the Mul M and Mul N instances can be found, before trying MulHomClass F M N which fails. Since the Mul hierarchy is very big, this can be slow to fail, especially when there is no such Mul instance.

A long-term but harder to achieve solution would be to specify the order in which instance goals get solved. For example, we'd like to change the arguments to map_mul to look like [FunLike F M N] [Mul M] [Mul N] [highPriority <| MulHomClass F M N] because MulHomClass fails or succeeds much faster than the others.

As a consequence, the simpNF linter is much slower since by design it tries and fails to apply many map_ lemmas. The same issue occurs a few times in existing calls to simp [map_mul], where map_mul is tried "too soon" and fails. Thanks to the speedup of leanprover/lean4#2478 the impact is very limited, only in files that already were close to the timeout.

simp not firing sometimes

This affects map_smulₛₗ and related definitions. For simp lemmas Lean apparently uses a slightly different mechanism to find instances, so that rw can find every argument to map_smulₛₗ successfully but simp can't: leanprover/lean4#3701.

Missing instances due to unification failing

Especially in the category theory library, we might sometimes have a type A which is also accessible as a synonym (Bundled A hA).1. Instance synthesis doesn't always work if we have f : A →* B but x * y : (Bundled A hA).1 or vice versa. This seems to be mostly fixed by keeping A B as outParams in MulHomClass F A B. (Presumably because Lean will do a definitional check A =?= (Bundled A hA).1 instead of using the syntax in the discrimination tree.)

Workaround for issues

The timeouts can be worked around for now by specifying which map_mul we mean, either as map_mul f for some explicit f, or as e.g. MonoidHomClass.map_mul.

map_smulₛₗ not firing as simp lemma can be worked around by going back to the pre-FunLike situation and making LinearMap.map_smulₛₗ a simp lemma instead of the generic map_smulₛₗ. Writing simp [map_smulₛₗ _] also works.

Co-authored-by: Matthew Ballard <matt@mrb.email> Co-authored-by: Scott Morrison <scott.morrison@gmail.com> Co-authored-by: Scott Morrison <scott@tqft.net> Co-authored-by: Anne Baanen <Vierkantor@users.noreply.github.com>

Diff
@@ -26,12 +26,13 @@ variable {F : Type*}
 
 namespace NeZero
 
-theorem of_map {R M} [Zero R] [Zero M] [ZeroHomClass F R M]
+theorem of_map {R M} [Zero R] [Zero M] [FunLike F R M] [ZeroHomClass F R M]
     (f : F) {r : R} [neZero : NeZero (f r)] : NeZero r :=
   ⟨fun h => ne (f r) <| by rw [h]; exact ZeroHomClass.map_zero f⟩
 #align ne_zero.of_map NeZero.of_map
 
-theorem of_injective {R M} [Zero R] {r : R} [NeZero r] [Zero M] [ZeroHomClass F R M] {f : F}
+theorem of_injective {R M} [Zero R] {r : R} [NeZero r] [Zero M] [FunLike F R M]
+    [ZeroHomClass F R M] {f : F}
     (hf : Function.Injective f) : NeZero (f r) :=
   ⟨by
     rw [← ZeroHomClass.map_zero f]
@@ -146,7 +147,8 @@ For the iff statement on the triviality of the kernel, see `injective_iff_map_eq
   "A homomorphism from an additive group to an additive monoid is injective iff
   its kernel is trivial. For the iff statement on the triviality of the kernel,
   see `injective_iff_map_eq_zero'`."]
-theorem _root_.injective_iff_map_eq_one {G H} [Group G] [MulOneClass H] [MonoidHomClass F G H]
+theorem _root_.injective_iff_map_eq_one {G H} [Group G] [MulOneClass H]
+    [FunLike F G H] [MonoidHomClass F G H]
     (f : F) : Function.Injective f ↔ ∀ a, f a = 1 → a = 1 :=
   ⟨fun h x => (map_eq_one_iff f h).mp, fun h x y hxy =>
     mul_inv_eq_one.1 <| h _ <| by rw [map_mul, hxy, ← map_mul, mul_inv_self, map_one]⟩
@@ -160,7 +162,8 @@ For the implication, see `injective_iff_map_eq_one`. -/
   "A homomorphism from an additive group to an additive monoid is injective iff its
   kernel is trivial, stated as an iff on the triviality of the kernel. For the implication, see
   `injective_iff_map_eq_zero`."]
-theorem _root_.injective_iff_map_eq_one' {G H} [Group G] [MulOneClass H] [MonoidHomClass F G H]
+theorem _root_.injective_iff_map_eq_one' {G H} [Group G] [MulOneClass H]
+    [FunLike F G H] [MonoidHomClass F G H]
     (f : F) : Function.Injective f ↔ ∀ a, f a = 1 ↔ a = 1 :=
   (injective_iff_map_eq_one f).trans <|
     forall_congr' fun _ => ⟨fun h => ⟨h, fun H => H.symm ▸ map_one f⟩, Iff.mp⟩
chore(*): rename FunLike to DFunLike (#9785)

This prepares for the introduction of a non-dependent synonym of FunLike, which helps a lot with keeping #8386 readable.

This is entirely search-and-replace in 680197f combined with manual fixes in 4145626, e900597 and b8428f8. The commands that generated this change:

sed -i 's/\bFunLike\b/DFunLike/g' {Archive,Counterexamples,Mathlib,test}/**/*.lean
sed -i 's/\btoFunLike\b/toDFunLike/g' {Archive,Counterexamples,Mathlib,test}/**/*.lean
sed -i 's/import Mathlib.Data.DFunLike/import Mathlib.Data.FunLike/g' {Archive,Counterexamples,Mathlib,test}/**/*.lean
sed -i 's/\bHom_FunLike\b/Hom_DFunLike/g' {Archive,Counterexamples,Mathlib,test}/**/*.lean     
sed -i 's/\binstFunLike\b/instDFunLike/g' {Archive,Counterexamples,Mathlib,test}/**/*.lean
sed -i 's/\bfunLike\b/instDFunLike/g' {Archive,Counterexamples,Mathlib,test}/**/*.lean
sed -i 's/\btoo many metavariables to apply `fun_like.has_coe_to_fun`/too many metavariables to apply `DFunLike.hasCoeToFun`/g' {Archive,Counterexamples,Mathlib,test}/**/*.lean

Co-authored-by: Anne Baanen <Vierkantor@users.noreply.github.com>

Diff
@@ -91,7 +91,7 @@ structure ZeroHom (M : Type*) (N : Type*) [Zero M] [Zero N] where
 You should extend this typeclass when you extend `ZeroHom`.
 -/
 class ZeroHomClass (F : Type*) (M N : outParam (Type*)) [Zero M] [Zero N]
-  extends FunLike F M fun _ => N where
+  extends DFunLike F M fun _ => N where
   /-- The proposition that the function preserves 0 -/
   map_zero : ∀ f : F, f 0 = 0
 #align zero_hom_class ZeroHomClass
@@ -120,7 +120,7 @@ structure AddHom (M : Type*) (N : Type*) [Add M] [Add N] where
 You should declare an instance of this typeclass when you extend `AddHom`.
 -/
 class AddHomClass (F : Type*) (M N : outParam (Type*)) [Add M] [Add N]
-  extends FunLike F M fun _ => N where
+  extends DFunLike F M fun _ => N where
   /-- The proposition that the function preserves addition -/
   map_add : ∀ (f : F) (x y : M), f (x + y) = f x + f y
 #align add_hom_class AddHomClass
@@ -185,7 +185,7 @@ You should extend this typeclass when you extend `OneHom`.
 -/
 @[to_additive]
 class OneHomClass (F : Type*) (M N : outParam (Type*)) [One M] [One N]
-  extends FunLike F M fun _ => N where
+  extends DFunLike F M fun _ => N where
   /-- The proposition that the function preserves 1 -/
   map_one : ∀ f : F, f 1 = 1
 #align one_hom_class OneHomClass
@@ -208,7 +208,7 @@ theorem map_one [OneHomClass F M N] (f : F) : f 1 = 1 :=
 @[to_additive]
 theorem Subsingleton.of_oneHomClass [Subsingleton M] [OneHomClass F M N] :
     Subsingleton F where
-  allEq f g := FunLike.ext _ _ fun x ↦ by simp [Subsingleton.elim x 1]
+  allEq f g := DFunLike.ext _ _ fun x ↦ by simp [Subsingleton.elim x 1]
 
 @[to_additive] instance [Subsingleton M] : Subsingleton (OneHom M N) := .of_oneHomClass
 
@@ -281,7 +281,7 @@ You should declare an instance of this typeclass when you extend `MulHom`.
 -/
 @[to_additive]
 class MulHomClass (F : Type*) (M N : outParam (Type*)) [Mul M] [Mul N]
-  extends FunLike F M fun _ => N where
+  extends DFunLike F M fun _ => N where
   /-- The proposition that the function preserves multiplication -/
   map_mul : ∀ (f : F) (x y : M), f (x * y) = f x * f y
 #align mul_hom_class MulHomClass
@@ -363,7 +363,7 @@ instance MonoidHom.monoidHomClass : MonoidHomClass (M →* N) M N where
     cases f
     cases g
     congr
-    apply FunLike.coe_injective'
+    apply DFunLike.coe_injective'
     exact h
   map_mul := MonoidHom.map_mul'
   map_one f := f.toOneHom.map_one'
@@ -496,7 +496,7 @@ instance MonoidWithZeroHom.monoidWithZeroHomClass : MonoidWithZeroHomClass (M 
     cases f
     cases g
     congr
-    apply FunLike.coe_injective'
+    apply DFunLike.coe_injective'
     exact h
   map_mul := MonoidWithZeroHom.map_mul'
   map_one := MonoidWithZeroHom.map_one'
@@ -630,25 +630,25 @@ theorem MonoidWithZeroHom.toMonoidHom_coe [MulZeroOneClass M] [MulZeroOneClass N
 
 @[to_additive (attr := ext)]
 theorem OneHom.ext [One M] [One N] ⦃f g : OneHom M N⦄ (h : ∀ x, f x = g x) : f = g :=
-  FunLike.ext _ _ h
+  DFunLike.ext _ _ h
 #align one_hom.ext OneHom.ext
 #align zero_hom.ext ZeroHom.ext
 
 @[to_additive (attr := ext)]
 theorem MulHom.ext [Mul M] [Mul N] ⦃f g : M →ₙ* N⦄ (h : ∀ x, f x = g x) : f = g :=
-  FunLike.ext _ _ h
+  DFunLike.ext _ _ h
 #align mul_hom.ext MulHom.ext
 #align add_hom.ext AddHom.ext
 
 @[to_additive (attr := ext)]
 theorem MonoidHom.ext [MulOneClass M] [MulOneClass N] ⦃f g : M →* N⦄ (h : ∀ x, f x = g x) : f = g :=
-  FunLike.ext _ _ h
+  DFunLike.ext _ _ h
 #align monoid_hom.ext MonoidHom.ext
 #align add_monoid_hom.ext AddMonoidHom.ext
 
 @[ext]
 theorem MonoidWithZeroHom.ext [MulZeroOneClass M] [MulZeroOneClass N] ⦃f g : M →*₀ N⦄
-    (h : ∀ x, f x = g x) : f = g := FunLike.ext _ _ h
+    (h : ∀ x, f x = g x) : f = g := DFunLike.ext _ _ h
 #align monoid_with_zero_hom.ext MonoidWithZeroHom.ext
 
 
@@ -673,112 +673,112 @@ end MonoidHom
 
 section Deprecated
 
-/-- Deprecated: use `FunLike.congr_fun` instead. -/
-@[to_additive (attr := deprecated) "Deprecated: use `FunLike.congr_fun` instead."]
+/-- Deprecated: use `DFunLike.congr_fun` instead. -/
+@[to_additive (attr := deprecated) "Deprecated: use `DFunLike.congr_fun` instead."]
 theorem OneHom.congr_fun [One M] [One N] {f g : OneHom M N} (h : f = g) (x : M) : f x = g x :=
-  FunLike.congr_fun h x
+  DFunLike.congr_fun h x
 #align one_hom.congr_fun OneHom.congr_fun
 #align zero_hom.congr_fun ZeroHom.congr_fun
 
-/-- Deprecated: use `FunLike.congr_fun` instead. -/
-@[to_additive (attr := deprecated) "Deprecated: use `FunLike.congr_fun` instead."]
+/-- Deprecated: use `DFunLike.congr_fun` instead. -/
+@[to_additive (attr := deprecated) "Deprecated: use `DFunLike.congr_fun` instead."]
 theorem MulHom.congr_fun [Mul M] [Mul N] {f g : M →ₙ* N} (h : f = g) (x : M) : f x = g x :=
-  FunLike.congr_fun h x
+  DFunLike.congr_fun h x
 #align mul_hom.congr_fun MulHom.congr_fun
 #align add_hom.congr_fun AddHom.congr_fun
 
-/-- Deprecated: use `FunLike.congr_fun` instead. -/
-@[to_additive (attr := deprecated) "Deprecated: use `FunLike.congr_fun` instead."]
+/-- Deprecated: use `DFunLike.congr_fun` instead. -/
+@[to_additive (attr := deprecated) "Deprecated: use `DFunLike.congr_fun` instead."]
 theorem MonoidHom.congr_fun [MulOneClass M] [MulOneClass N] {f g : M →* N} (h : f = g) (x : M) :
-    f x = g x := FunLike.congr_fun h x
+    f x = g x := DFunLike.congr_fun h x
 #align monoid_hom.congr_fun MonoidHom.congr_fun
 #align add_monoid_hom.congr_fun AddMonoidHom.congr_fun
 
-/-- Deprecated: use `FunLike.congr_fun` instead. -/
+/-- Deprecated: use `DFunLike.congr_fun` instead. -/
 @[deprecated]
 theorem MonoidWithZeroHom.congr_fun [MulZeroOneClass M] [MulZeroOneClass N] {f g : M →*₀ N}
-    (h : f = g) (x : M) : f x = g x := FunLike.congr_fun h x
+    (h : f = g) (x : M) : f x = g x := DFunLike.congr_fun h x
 #align monoid_with_zero_hom.congr_fun MonoidWithZeroHom.congr_fun
 
-/-- Deprecated: use `FunLike.congr_arg` instead. -/
-@[to_additive (attr := deprecated) "Deprecated: use `FunLike.congr_arg` instead."]
+/-- Deprecated: use `DFunLike.congr_arg` instead. -/
+@[to_additive (attr := deprecated) "Deprecated: use `DFunLike.congr_arg` instead."]
 theorem OneHom.congr_arg [One M] [One N] (f : OneHom M N) {x y : M} (h : x = y) : f x = f y :=
-  FunLike.congr_arg f h
+  DFunLike.congr_arg f h
 #align one_hom.congr_arg OneHom.congr_arg
 #align zero_hom.congr_arg ZeroHom.congr_arg
 
-/-- Deprecated: use `FunLike.congr_arg` instead. -/
-@[to_additive (attr := deprecated) "Deprecated: use `FunLike.congr_arg` instead."]
+/-- Deprecated: use `DFunLike.congr_arg` instead. -/
+@[to_additive (attr := deprecated) "Deprecated: use `DFunLike.congr_arg` instead."]
 theorem MulHom.congr_arg [Mul M] [Mul N] (f : M →ₙ* N) {x y : M} (h : x = y) : f x = f y :=
-  FunLike.congr_arg f h
+  DFunLike.congr_arg f h
 #align mul_hom.congr_arg MulHom.congr_arg
 #align add_hom.congr_arg AddHom.congr_arg
 
-/-- Deprecated: use `FunLike.congr_arg` instead. -/
-@[to_additive (attr := deprecated) "Deprecated: use `FunLike.congr_arg` instead."]
+/-- Deprecated: use `DFunLike.congr_arg` instead. -/
+@[to_additive (attr := deprecated) "Deprecated: use `DFunLike.congr_arg` instead."]
 theorem MonoidHom.congr_arg [MulOneClass M] [MulOneClass N] (f : M →* N) {x y : M} (h : x = y) :
-    f x = f y := FunLike.congr_arg f h
+    f x = f y := DFunLike.congr_arg f h
 #align monoid_hom.congr_arg MonoidHom.congr_arg
 #align add_monoid_hom.congr_arg AddMonoidHom.congr_arg
 
-/-- Deprecated: use `FunLike.congr_arg` instead. -/
+/-- Deprecated: use `DFunLike.congr_arg` instead. -/
 @[deprecated]
 theorem MonoidWithZeroHom.congr_arg [MulZeroOneClass M] [MulZeroOneClass N] (f : M →*₀ N) {x y : M}
-    (h : x = y) : f x = f y := FunLike.congr_arg f h
+    (h : x = y) : f x = f y := DFunLike.congr_arg f h
 #align monoid_with_zero_hom.congr_arg MonoidWithZeroHom.congr_arg
 
-/-- Deprecated: use `FunLike.coe_injective` instead. -/
-@[to_additive (attr := deprecated) "Deprecated: use `FunLike.coe_injective` instead."]
+/-- Deprecated: use `DFunLike.coe_injective` instead. -/
+@[to_additive (attr := deprecated) "Deprecated: use `DFunLike.coe_injective` instead."]
 theorem OneHom.coe_inj [One M] [One N] ⦃f g : OneHom M N⦄ (h : (f : M → N) = g) : f = g :=
-  FunLike.coe_injective h
+  DFunLike.coe_injective h
 #align one_hom.coe_inj OneHom.coe_inj
 #align zero_hom.coe_inj ZeroHom.coe_inj
 
-/-- Deprecated: use `FunLike.coe_injective` instead. -/
-@[to_additive (attr := deprecated) "Deprecated: use `FunLike.coe_injective` instead."]
+/-- Deprecated: use `DFunLike.coe_injective` instead. -/
+@[to_additive (attr := deprecated) "Deprecated: use `DFunLike.coe_injective` instead."]
 theorem MulHom.coe_inj [Mul M] [Mul N] ⦃f g : M →ₙ* N⦄ (h : (f : M → N) = g) : f = g :=
-  FunLike.coe_injective h
+  DFunLike.coe_injective h
 #align mul_hom.coe_inj MulHom.coe_inj
 #align add_hom.coe_inj AddHom.coe_inj
 
-/-- Deprecated: use `FunLike.coe_injective` instead. -/
-@[to_additive (attr := deprecated) "Deprecated: use `FunLike.coe_injective` instead."]
+/-- Deprecated: use `DFunLike.coe_injective` instead. -/
+@[to_additive (attr := deprecated) "Deprecated: use `DFunLike.coe_injective` instead."]
 theorem MonoidHom.coe_inj [MulOneClass M] [MulOneClass N] ⦃f g : M →* N⦄ (h : (f : M → N) = g) :
-    f = g := FunLike.coe_injective h
+    f = g := DFunLike.coe_injective h
 #align monoid_hom.coe_inj MonoidHom.coe_inj
 #align add_monoid_hom.coe_inj AddMonoidHom.coe_inj
 
-/-- Deprecated: use `FunLike.coe_injective` instead. -/
+/-- Deprecated: use `DFunLike.coe_injective` instead. -/
 @[deprecated]
 theorem MonoidWithZeroHom.coe_inj [MulZeroOneClass M] [MulZeroOneClass N] ⦃f g : M →*₀ N⦄
-    (h : (f : M → N) = g) : f = g := FunLike.coe_injective h
+    (h : (f : M → N) = g) : f = g := DFunLike.coe_injective h
 #align monoid_with_zero_hom.coe_inj MonoidWithZeroHom.coe_inj
 
-/-- Deprecated: use `FunLike.ext_iff` instead. -/
-@[to_additive (attr := deprecated) "Deprecated: use `FunLike.ext_iff` instead."]
+/-- Deprecated: use `DFunLike.ext_iff` instead. -/
+@[to_additive (attr := deprecated) "Deprecated: use `DFunLike.ext_iff` instead."]
 theorem OneHom.ext_iff [One M] [One N] {f g : OneHom M N} : f = g ↔ ∀ x, f x = g x :=
-  FunLike.ext_iff
+  DFunLike.ext_iff
 #align one_hom.ext_iff OneHom.ext_iff
 #align zero_hom.ext_iff ZeroHom.ext_iff
 
-/-- Deprecated: use `FunLike.ext_iff` instead. -/
-@[to_additive (attr := deprecated) "Deprecated: use `FunLike.ext_iff` instead."]
+/-- Deprecated: use `DFunLike.ext_iff` instead. -/
+@[to_additive (attr := deprecated) "Deprecated: use `DFunLike.ext_iff` instead."]
 theorem MulHom.ext_iff [Mul M] [Mul N] {f g : M →ₙ* N} : f = g ↔ ∀ x, f x = g x :=
-  FunLike.ext_iff
+  DFunLike.ext_iff
 #align mul_hom.ext_iff MulHom.ext_iff
 #align add_hom.ext_iff AddHom.ext_iff
 
-/-- Deprecated: use `FunLike.ext_iff` instead. -/
-@[to_additive (attr := deprecated) "Deprecated: use `FunLike.ext_iff` instead."]
+/-- Deprecated: use `DFunLike.ext_iff` instead. -/
+@[to_additive (attr := deprecated) "Deprecated: use `DFunLike.ext_iff` instead."]
 theorem MonoidHom.ext_iff [MulOneClass M] [MulOneClass N] {f g : M →* N} : f = g ↔ ∀ x, f x = g x :=
-  FunLike.ext_iff
+  DFunLike.ext_iff
 #align monoid_hom.ext_iff MonoidHom.ext_iff
 #align add_monoid_hom.ext_iff AddMonoidHom.ext_iff
 
-/-- Deprecated: use `FunLike.ext_iff` instead. -/
+/-- Deprecated: use `DFunLike.ext_iff` instead. -/
 @[deprecated]
 theorem MonoidWithZeroHom.ext_iff [MulZeroOneClass M] [MulZeroOneClass N] {f g : M →*₀ N} :
-    f = g ↔ ∀ x, f x = g x := FunLike.ext_iff
+    f = g ↔ ∀ x, f x = g x := DFunLike.ext_iff
 #align monoid_with_zero_hom.ext_iff MonoidWithZeroHom.ext_iff
 
 end Deprecated
@@ -830,7 +830,7 @@ theorem OneHom.coe_copy {_ : One M} {_ : One N} (f : OneHom M N) (f' : M → N)
 @[to_additive]
 theorem OneHom.coe_copy_eq {_ : One M} {_ : One N} (f : OneHom M N) (f' : M → N) (h : f' = f) :
     f.copy f' h = f :=
-  FunLike.ext' h
+  DFunLike.ext' h
 #align one_hom.coe_copy_eq OneHom.coe_copy_eq
 #align zero_hom.coe_copy_eq ZeroHom.coe_copy_eq
 
@@ -856,7 +856,7 @@ theorem MulHom.coe_copy {_ : Mul M} {_ : Mul N} (f : M →ₙ* N) (f' : M → N)
 @[to_additive]
 theorem MulHom.coe_copy_eq {_ : Mul M} {_ : Mul N} (f : M →ₙ* N) (f' : M → N) (h : f' = f) :
     f.copy f' h = f :=
-  FunLike.ext' h
+  DFunLike.ext' h
 #align mul_hom.coe_copy_eq MulHom.coe_copy_eq
 #align add_hom.coe_copy_eq AddHom.coe_copy_eq
 
@@ -881,7 +881,7 @@ theorem MonoidHom.coe_copy {_ : MulOneClass M} {_ : MulOneClass N} (f : M →* N
 @[to_additive]
 theorem MonoidHom.copy_eq {_ : MulOneClass M} {_ : MulOneClass N} (f : M →* N) (f' : M → N)
     (h : f' = f) : f.copy f' h = f :=
-  FunLike.ext' h
+  DFunLike.ext' h
 #align monoid_hom.copy_eq MonoidHom.copy_eq
 #align add_monoid_hom.copy_eq AddMonoidHom.copy_eq
 
@@ -900,7 +900,7 @@ theorem MonoidWithZeroHom.coe_copy {_ : MulZeroOneClass M} {_ : MulZeroOneClass
 
 theorem MonoidWithZeroHom.copy_eq {_ : MulZeroOneClass M} {_ : MulZeroOneClass N} (f : M →*₀ N)
     (f' : M → N) (h : f' = f) : f.copy f' h = f :=
-  FunLike.ext' h
+  DFunLike.ext' h
 #align monoid_with_zero_hom.copy_eq MonoidWithZeroHom.copy_eq
 
 @[to_additive]
@@ -1144,14 +1144,14 @@ theorem MonoidWithZeroHom.comp_assoc {Q : Type*} [MulZeroOneClass M] [MulZeroOne
 @[to_additive]
 theorem OneHom.cancel_right [One M] [One N] [One P] {g₁ g₂ : OneHom N P} {f : OneHom M N}
     (hf : Function.Surjective f) : g₁.comp f = g₂.comp f ↔ g₁ = g₂ :=
-  ⟨fun h => OneHom.ext <| hf.forall.2 (FunLike.ext_iff.1 h), fun h => h ▸ rfl⟩
+  ⟨fun h => OneHom.ext <| hf.forall.2 (DFunLike.ext_iff.1 h), fun h => h ▸ rfl⟩
 #align one_hom.cancel_right OneHom.cancel_right
 #align zero_hom.cancel_right ZeroHom.cancel_right
 
 @[to_additive]
 theorem MulHom.cancel_right [Mul M] [Mul N] [Mul P] {g₁ g₂ : N →ₙ* P} {f : M →ₙ* N}
     (hf : Function.Surjective f) : g₁.comp f = g₂.comp f ↔ g₁ = g₂ :=
-  ⟨fun h => MulHom.ext <| hf.forall.2 (FunLike.ext_iff.1 h), fun h => h ▸ rfl⟩
+  ⟨fun h => MulHom.ext <| hf.forall.2 (DFunLike.ext_iff.1 h), fun h => h ▸ rfl⟩
 #align mul_hom.cancel_right MulHom.cancel_right
 #align add_hom.cancel_right AddHom.cancel_right
 
@@ -1159,14 +1159,14 @@ theorem MulHom.cancel_right [Mul M] [Mul N] [Mul P] {g₁ g₂ : N →ₙ* P} {f
 theorem MonoidHom.cancel_right [MulOneClass M] [MulOneClass N] [MulOneClass P]
     {g₁ g₂ : N →* P} {f : M →* N} (hf : Function.Surjective f) :
     g₁.comp f = g₂.comp f ↔ g₁ = g₂ :=
-  ⟨fun h => MonoidHom.ext <| hf.forall.2 (FunLike.ext_iff.1 h), fun h => h ▸ rfl⟩
+  ⟨fun h => MonoidHom.ext <| hf.forall.2 (DFunLike.ext_iff.1 h), fun h => h ▸ rfl⟩
 #align monoid_hom.cancel_right MonoidHom.cancel_right
 #align add_monoid_hom.cancel_right AddMonoidHom.cancel_right
 
 theorem MonoidWithZeroHom.cancel_right [MulZeroOneClass M] [MulZeroOneClass N] [MulZeroOneClass P]
     {g₁ g₂ : N →*₀ P} {f : M →*₀ N} (hf : Function.Surjective f) :
     g₁.comp f = g₂.comp f ↔ g₁ = g₂ :=
-  ⟨fun h => MonoidWithZeroHom.ext <| hf.forall.2 (FunLike.ext_iff.1 h), fun h => h ▸ rfl⟩
+  ⟨fun h => MonoidWithZeroHom.ext <| hf.forall.2 (DFunLike.ext_iff.1 h), fun h => h ▸ rfl⟩
 #align monoid_with_zero_hom.cancel_right MonoidWithZeroHom.cancel_right
 
 @[to_additive]
@@ -1227,7 +1227,7 @@ end
 
 theorem MonoidWithZeroHom.toZeroHom_injective [MulZeroOneClass M] [MulZeroOneClass N] :
     Function.Injective (MonoidWithZeroHom.toZeroHom : (M →*₀ N) → ZeroHom M N) :=
-  fun _ _ h => MonoidWithZeroHom.ext <| (FunLike.ext_iff (F := ZeroHom M N)).mp h
+  fun _ _ h => MonoidWithZeroHom.ext <| (DFunLike.ext_iff (F := ZeroHom M N)).mp h
 #align monoid_with_zero_hom.to_zero_hom_injective MonoidWithZeroHom.toZeroHom_injective
 
 @[to_additive (attr := simp)]
perf(FunLike.Basic): beta reduce CoeFun.coe (#7905)

This eliminates (fun a ↦ β) α in the type when applying a FunLike.

Co-authored-by: Matthew Ballard <matt@mrb.email> Co-authored-by: Eric Wieser <wieser.eric@gmail.com>

Diff
@@ -443,7 +443,7 @@ theorem map_pow [Monoid G] [Monoid H] [MonoidHomClass F G H] (f : F) (a : G) :
 theorem map_zpow' [DivInvMonoid G] [DivInvMonoid H] [MonoidHomClass F G H]
     (f : F) (hf : ∀ x : G, f x⁻¹ = (f x)⁻¹) (a : G) : ∀ n : ℤ, f (a ^ n) = f a ^ n
   | (n : ℕ) => by rw [zpow_ofNat, map_pow, zpow_ofNat]
-  | Int.negSucc n => by rw [zpow_negSucc, hf, map_pow, ← zpow_negSucc, ← zpow_negSucc]
+  | Int.negSucc n => by rw [zpow_negSucc, hf, map_pow, ← zpow_negSucc]
 #align map_zpow' map_zpow'
 #align map_zsmul' map_zsmul'
 
refactor(Algebra/Hom): transpose Hom and file name (#8095)

I believe the file defining a type of morphisms belongs alongside the file defining the structure this morphism works on. So I would like to reorganize the files in the Mathlib.Algebra.Hom folder so that e.g. Mathlib.Algebra.Hom.Ring becomes Mathlib.Algebra.Ring.Hom and Mathlib.Algebra.Hom.NonUnitalAlg becomes Mathlib.Algebra.Algebra.NonUnitalHom.

While fixing the imports I went ahead and sorted them for good luck.

The full list of changes is: renamed: Mathlib/Algebra/Hom/NonUnitalAlg.lean -> Mathlib/Algebra/Algebra/NonUnitalHom.lean renamed: Mathlib/Algebra/Hom/Aut.lean -> Mathlib/Algebra/Group/Aut.lean renamed: Mathlib/Algebra/Hom/Commute.lean -> Mathlib/Algebra/Group/Commute/Hom.lean renamed: Mathlib/Algebra/Hom/Embedding.lean -> Mathlib/Algebra/Group/Embedding.lean renamed: Mathlib/Algebra/Hom/Equiv/Basic.lean -> Mathlib/Algebra/Group/Equiv/Basic.lean renamed: Mathlib/Algebra/Hom/Equiv/TypeTags.lean -> Mathlib/Algebra/Group/Equiv/TypeTags.lean renamed: Mathlib/Algebra/Hom/Equiv/Units/Basic.lean -> Mathlib/Algebra/Group/Units/Equiv.lean renamed: Mathlib/Algebra/Hom/Equiv/Units/GroupWithZero.lean -> Mathlib/Algebra/GroupWithZero/Units/Equiv.lean renamed: Mathlib/Algebra/Hom/Freiman.lean -> Mathlib/Algebra/Group/Freiman.lean renamed: Mathlib/Algebra/Hom/Group/Basic.lean -> Mathlib/Algebra/Group/Hom/Basic.lean renamed: Mathlib/Algebra/Hom/Group/Defs.lean -> Mathlib/Algebra/Group/Hom/Defs.lean renamed: Mathlib/Algebra/Hom/GroupAction.lean -> Mathlib/GroupTheory/GroupAction/Hom.lean renamed: Mathlib/Algebra/Hom/GroupInstances.lean -> Mathlib/Algebra/Group/Hom/Instances.lean renamed: Mathlib/Algebra/Hom/Iterate.lean -> Mathlib/Algebra/GroupPower/IterateHom.lean renamed: Mathlib/Algebra/Hom/Centroid.lean -> Mathlib/Algebra/Ring/CentroidHom.lean renamed: Mathlib/Algebra/Hom/Ring/Basic.lean -> Mathlib/Algebra/Ring/Hom/Basic.lean renamed: Mathlib/Algebra/Hom/Ring/Defs.lean -> Mathlib/Algebra/Ring/Hom/Defs.lean renamed: Mathlib/Algebra/Hom/Units.lean -> Mathlib/Algebra/Group/Units/Hom.lean

Zulip thread: https://leanprover.zulipchat.com/#narrow/stream/287929-mathlib4/topic/Reorganizing.20.60Mathlib.2EAlgebra.2EHom.60

Diff
@@ -4,9 +4,9 @@ Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Patrick Massot, Kevin Buzzard, Scott Morrison, Johan Commelin, Chris Hughes,
   Johannes Hölzl, Yury Kudryashov
 -/
-import Mathlib.Algebra.Hom.Group.Defs
-import Mathlib.Algebra.NeZero
 import Mathlib.Algebra.Group.Basic
+import Mathlib.Algebra.Group.Hom.Defs
+import Mathlib.Algebra.NeZero
 
 #align_import algebra.hom.group from "leanprover-community/mathlib"@"a148d797a1094ab554ad4183a4ad6f130358ef64"
 
chore: exactly 4 spaces in theorems (#7328)

Co-authored-by: Moritz Firsching <firsching@google.com>

Diff
@@ -220,13 +220,13 @@ theorem map_eq_one_iff [OneHomClass F M N] (f : F) (hf : Function.Injective f) {
 
 @[to_additive]
 theorem map_ne_one_iff {R S F : Type*} [One R] [One S] [OneHomClass F R S] (f : F)
-  (hf : Function.Injective f) {x : R} : f x ≠ 1 ↔ x ≠ 1 := (map_eq_one_iff f hf).not
+    (hf : Function.Injective f) {x : R} : f x ≠ 1 ↔ x ≠ 1 := (map_eq_one_iff f hf).not
 #align map_ne_one_iff map_ne_one_iff
 #align map_ne_zero_iff map_ne_zero_iff
 
 @[to_additive]
 theorem ne_one_of_map {R S F : Type*} [One R] [One S] [OneHomClass F R S] {f : F} {x : R}
-  (hx : f x ≠ 1) : x ≠ 1 := ne_of_apply_ne f <| (by rwa [(map_one f)])
+    (hx : f x ≠ 1) : x ≠ 1 := ne_of_apply_ne f <| (by rwa [(map_one f)])
 #align ne_one_of_map ne_one_of_map
 #align ne_zero_of_map ne_zero_of_map
 
@@ -404,15 +404,15 @@ theorem map_mul_eq_one [MonoidHomClass F M N] (f : F) {a b : M} (h : a * b = 1)
 
 @[to_additive]
 theorem map_div' [DivInvMonoid G] [DivInvMonoid H] [MonoidHomClass F G H]
-  (f : F) (hf : ∀ a, f a⁻¹ = (f a)⁻¹) (a b : G) : f (a / b) = f a / f b :=
-  by rw [div_eq_mul_inv, div_eq_mul_inv, map_mul, hf]
+    (f : F) (hf : ∀ a, f a⁻¹ = (f a)⁻¹) (a b : G) : f (a / b) = f a / f b := by
+  rw [div_eq_mul_inv, div_eq_mul_inv, map_mul, hf]
 #align map_div' map_div'
 #align map_sub' map_sub'
 
 /-- Group homomorphisms preserve inverse. -/
 @[to_additive (attr := simp) "Additive group homomorphisms preserve negation."]
 theorem map_inv [Group G] [DivisionMonoid H] [MonoidHomClass F G H]
-  (f : F) (a : G) : f a⁻¹ = (f a)⁻¹ :=
+    (f : F) (a : G) : f a⁻¹ = (f a)⁻¹ :=
   eq_inv_of_mul_eq_one_left <| map_mul_eq_one f <| inv_mul_self _
 #align map_inv map_inv
 #align map_neg map_neg
@@ -441,7 +441,7 @@ theorem map_pow [Monoid G] [Monoid H] [MonoidHomClass F G H] (f : F) (a : G) :
 
 @[to_additive]
 theorem map_zpow' [DivInvMonoid G] [DivInvMonoid H] [MonoidHomClass F G H]
-  (f : F) (hf : ∀ x : G, f x⁻¹ = (f x)⁻¹) (a : G) : ∀ n : ℤ, f (a ^ n) = f a ^ n
+    (f : F) (hf : ∀ x : G, f x⁻¹ = (f x)⁻¹) (a : G) : ∀ n : ℤ, f (a ^ n) = f a ^ n
   | (n : ℕ) => by rw [zpow_ofNat, map_pow, zpow_ofNat]
   | Int.negSucc n => by rw [zpow_negSucc, hf, map_pow, ← zpow_negSucc, ← zpow_negSucc]
 #align map_zpow' map_zpow'
@@ -451,7 +451,7 @@ theorem map_zpow' [DivInvMonoid G] [DivInvMonoid H] [MonoidHomClass F G H]
 @[to_additive (attr := simp) (reorder := 8 9)
 "Additive group homomorphisms preserve integer scaling."]
 theorem map_zpow [Group G] [DivisionMonoid H] [MonoidHomClass F G H]
-  (f : F) (g : G) (n : ℤ) : f (g ^ n) = f g ^ n := map_zpow' f (map_inv f) g n
+    (f : F) (g : G) (n : ℤ) : f (g ^ n) = f g ^ n := map_zpow' f (map_inv f) g n
 #align map_zpow map_zpow
 #align map_zsmul map_zsmul
 
@@ -648,7 +648,7 @@ theorem MonoidHom.ext [MulOneClass M] [MulOneClass N] ⦃f g : M →* N⦄ (h :
 
 @[ext]
 theorem MonoidWithZeroHom.ext [MulZeroOneClass M] [MulZeroOneClass N] ⦃f g : M →*₀ N⦄
-  (h : ∀ x, f x = g x) : f = g := FunLike.ext _ _ h
+    (h : ∀ x, f x = g x) : f = g := FunLike.ext _ _ h
 #align monoid_with_zero_hom.ext MonoidWithZeroHom.ext
 
 
@@ -697,7 +697,7 @@ theorem MonoidHom.congr_fun [MulOneClass M] [MulOneClass N] {f g : M →* N} (h
 /-- Deprecated: use `FunLike.congr_fun` instead. -/
 @[deprecated]
 theorem MonoidWithZeroHom.congr_fun [MulZeroOneClass M] [MulZeroOneClass N] {f g : M →*₀ N}
-  (h : f = g) (x : M) : f x = g x := FunLike.congr_fun h x
+    (h : f = g) (x : M) : f x = g x := FunLike.congr_fun h x
 #align monoid_with_zero_hom.congr_fun MonoidWithZeroHom.congr_fun
 
 /-- Deprecated: use `FunLike.congr_arg` instead. -/
@@ -724,7 +724,7 @@ theorem MonoidHom.congr_arg [MulOneClass M] [MulOneClass N] (f : M →* N) {x y
 /-- Deprecated: use `FunLike.congr_arg` instead. -/
 @[deprecated]
 theorem MonoidWithZeroHom.congr_arg [MulZeroOneClass M] [MulZeroOneClass N] (f : M →*₀ N) {x y : M}
-  (h : x = y) : f x = f y := FunLike.congr_arg f h
+    (h : x = y) : f x = f y := FunLike.congr_arg f h
 #align monoid_with_zero_hom.congr_arg MonoidWithZeroHom.congr_arg
 
 /-- Deprecated: use `FunLike.coe_injective` instead. -/
@@ -751,7 +751,7 @@ theorem MonoidHom.coe_inj [MulOneClass M] [MulOneClass N] ⦃f g : M →* N⦄ (
 /-- Deprecated: use `FunLike.coe_injective` instead. -/
 @[deprecated]
 theorem MonoidWithZeroHom.coe_inj [MulZeroOneClass M] [MulZeroOneClass N] ⦃f g : M →*₀ N⦄
-  (h : (f : M → N) = g) : f = g := FunLike.coe_injective h
+    (h : (f : M → N) = g) : f = g := FunLike.coe_injective h
 #align monoid_with_zero_hom.coe_inj MonoidWithZeroHom.coe_inj
 
 /-- Deprecated: use `FunLike.ext_iff` instead. -/
@@ -866,7 +866,7 @@ definitional equalities. -/
   "Copy of an `AddMonoidHom` with a new `toFun` equal to the old one. Useful to fix
   definitional equalities."]
 protected def MonoidHom.copy [MulOneClass M] [MulOneClass N] (f : M →* N) (f' : M → N)
-  (h : f' = f) : M →* N :=
+    (h : f' = f) : M →* N :=
   { f.toOneHom.copy f' h, f.toMulHom.copy f' h with }
 #align monoid_hom.copy MonoidHom.copy
 #align add_monoid_hom.copy AddMonoidHom.copy
@@ -888,7 +888,7 @@ theorem MonoidHom.copy_eq {_ : MulOneClass M} {_ : MulOneClass N} (f : M →* N)
 /-- Copy of a `MonoidHom` with a new `toFun` equal to the old one. Useful to fix
 definitional equalities. -/
 protected def MonoidWithZeroHom.copy [MulZeroOneClass M] [MulZeroOneClass N] (f : M →*₀ N)
-  (f' : M → N) (h : f' = f) : M →* N :=
+    (f' : M → N) (h : f' = f) : M →* N :=
   { f.toZeroHom.copy f' h, f.toMonoidHom.copy f' h with }
 #align monoid_with_zero_hom.copy MonoidWithZeroHom.copy
 
@@ -941,7 +941,7 @@ protected theorem MonoidHom.map_mul [MulOneClass M] [MulOneClass N] (f : M →*
 #align add_monoid_hom.map_add AddMonoidHom.map_add
 
 protected theorem MonoidWithZeroHom.map_mul [MulZeroOneClass M] [MulZeroOneClass N] (f : M →*₀ N)
-  (a b : M) : f (a * b) = f a * f b := f.map_mul' a b
+    (a b : M) : f (a * b) = f a * f b := f.map_mul' a b
 #align monoid_with_zero_hom.map_mul MonoidWithZeroHom.map_mul
 
 /-- If `f` is an additive monoid homomorphism then `f (a + b) = f a + f b`. -/
@@ -1054,7 +1054,7 @@ def MonoidHom.comp [MulOneClass M] [MulOneClass N] [MulOneClass P] (hnp : N →*
 
 /-- Composition of `MonoidWithZeroHom`s as a `MonoidWithZeroHom`. -/
 def MonoidWithZeroHom.comp [MulZeroOneClass M] [MulZeroOneClass N] [MulZeroOneClass P]
-  (hnp : N →*₀ P) (hmn : M →*₀ N) : M →*₀ P where
+    (hnp : N →*₀ P) (hmn : M →*₀ N) : M →*₀ P where
   toFun := hnp ∘ hmn
   map_zero' := by rw [Function.comp_apply, map_zero, map_zero]
   map_one' := by simp
@@ -1084,13 +1084,13 @@ theorem MulHom.coe_comp [Mul M] [Mul N] [Mul P] (g : N →ₙ* P) (f : M →ₙ*
 
 @[to_additive (attr := simp)]
 theorem MonoidHom.coe_comp [MulOneClass M] [MulOneClass N] [MulOneClass P]
-  (g : N →* P) (f : M →* N) : ↑(g.comp f) = g ∘ f := rfl
+    (g : N →* P) (f : M →* N) : ↑(g.comp f) = g ∘ f := rfl
 #align monoid_hom.coe_comp MonoidHom.coe_comp
 #align add_monoid_hom.coe_comp AddMonoidHom.coe_comp
 
 @[simp]
 theorem MonoidWithZeroHom.coe_comp [MulZeroOneClass M] [MulZeroOneClass N] [MulZeroOneClass P]
-  (g : N →*₀ P) (f : M →*₀ N) : ↑(g.comp f) = g ∘ f := rfl
+    (g : N →*₀ P) (f : M →*₀ N) : ↑(g.comp f) = g ∘ f := rfl
 #align monoid_with_zero_hom.coe_comp MonoidWithZeroHom.coe_comp
 
 @[to_additive]
@@ -1107,71 +1107,71 @@ theorem MulHom.comp_apply [Mul M] [Mul N] [Mul P] (g : N →ₙ* P) (f : M →
 
 @[to_additive]
 theorem MonoidHom.comp_apply [MulOneClass M] [MulOneClass N] [MulOneClass P]
-  (g : N →* P) (f : M →* N) (x : M) : g.comp f x = g (f x) := rfl
+    (g : N →* P) (f : M →* N) (x : M) : g.comp f x = g (f x) := rfl
 #align monoid_hom.comp_apply MonoidHom.comp_apply
 #align add_monoid_hom.comp_apply AddMonoidHom.comp_apply
 
 theorem MonoidWithZeroHom.comp_apply [MulZeroOneClass M] [MulZeroOneClass N] [MulZeroOneClass P]
-  (g : N →*₀ P) (f : M →*₀ N) (x : M) : g.comp f x = g (f x) := rfl
+    (g : N →*₀ P) (f : M →*₀ N) (x : M) : g.comp f x = g (f x) := rfl
 #align monoid_with_zero_hom.comp_apply MonoidWithZeroHom.comp_apply
 
 /-- Composition of monoid homomorphisms is associative. -/
 @[to_additive "Composition of additive monoid homomorphisms is associative."]
 theorem OneHom.comp_assoc {Q : Type*} [One M] [One N] [One P] [One Q]
-  (f : OneHom M N) (g : OneHom N P) (h : OneHom P Q) :
-  (h.comp g).comp f = h.comp (g.comp f) := rfl
+    (f : OneHom M N) (g : OneHom N P) (h : OneHom P Q) :
+    (h.comp g).comp f = h.comp (g.comp f) := rfl
 #align one_hom.comp_assoc OneHom.comp_assoc
 #align zero_hom.comp_assoc ZeroHom.comp_assoc
 
 @[to_additive]
 theorem MulHom.comp_assoc {Q : Type*} [Mul M] [Mul N] [Mul P] [Mul Q]
-  (f : M →ₙ* N) (g : N →ₙ* P) (h : P →ₙ* Q) : (h.comp g).comp f = h.comp (g.comp f) := rfl
+    (f : M →ₙ* N) (g : N →ₙ* P) (h : P →ₙ* Q) : (h.comp g).comp f = h.comp (g.comp f) := rfl
 #align mul_hom.comp_assoc MulHom.comp_assoc
 #align add_hom.comp_assoc AddHom.comp_assoc
 
 @[to_additive]
 theorem MonoidHom.comp_assoc {Q : Type*} [MulOneClass M] [MulOneClass N] [MulOneClass P]
-  [MulOneClass Q] (f : M →* N) (g : N →* P) (h : P →* Q) :
-  (h.comp g).comp f = h.comp (g.comp f) := rfl
+    [MulOneClass Q] (f : M →* N) (g : N →* P) (h : P →* Q) :
+    (h.comp g).comp f = h.comp (g.comp f) := rfl
 #align monoid_hom.comp_assoc MonoidHom.comp_assoc
 #align add_monoid_hom.comp_assoc AddMonoidHom.comp_assoc
 
 theorem MonoidWithZeroHom.comp_assoc {Q : Type*} [MulZeroOneClass M] [MulZeroOneClass N]
-  [MulZeroOneClass P] [MulZeroOneClass Q] (f : M →*₀ N) (g : N →*₀ P) (h : P →*₀ Q) :
-  (h.comp g).comp f = h.comp (g.comp f) := rfl
+    [MulZeroOneClass P] [MulZeroOneClass Q] (f : M →*₀ N) (g : N →*₀ P) (h : P →*₀ Q) :
+    (h.comp g).comp f = h.comp (g.comp f) := rfl
 #align monoid_with_zero_hom.comp_assoc MonoidWithZeroHom.comp_assoc
 
 @[to_additive]
 theorem OneHom.cancel_right [One M] [One N] [One P] {g₁ g₂ : OneHom N P} {f : OneHom M N}
-  (hf : Function.Surjective f) : g₁.comp f = g₂.comp f ↔ g₁ = g₂ :=
+    (hf : Function.Surjective f) : g₁.comp f = g₂.comp f ↔ g₁ = g₂ :=
   ⟨fun h => OneHom.ext <| hf.forall.2 (FunLike.ext_iff.1 h), fun h => h ▸ rfl⟩
 #align one_hom.cancel_right OneHom.cancel_right
 #align zero_hom.cancel_right ZeroHom.cancel_right
 
 @[to_additive]
 theorem MulHom.cancel_right [Mul M] [Mul N] [Mul P] {g₁ g₂ : N →ₙ* P} {f : M →ₙ* N}
-  (hf : Function.Surjective f) : g₁.comp f = g₂.comp f ↔ g₁ = g₂ :=
+    (hf : Function.Surjective f) : g₁.comp f = g₂.comp f ↔ g₁ = g₂ :=
   ⟨fun h => MulHom.ext <| hf.forall.2 (FunLike.ext_iff.1 h), fun h => h ▸ rfl⟩
 #align mul_hom.cancel_right MulHom.cancel_right
 #align add_hom.cancel_right AddHom.cancel_right
 
 @[to_additive]
 theorem MonoidHom.cancel_right [MulOneClass M] [MulOneClass N] [MulOneClass P]
-  {g₁ g₂ : N →* P} {f : M →* N} (hf : Function.Surjective f) :
-  g₁.comp f = g₂.comp f ↔ g₁ = g₂ :=
+    {g₁ g₂ : N →* P} {f : M →* N} (hf : Function.Surjective f) :
+    g₁.comp f = g₂.comp f ↔ g₁ = g₂ :=
   ⟨fun h => MonoidHom.ext <| hf.forall.2 (FunLike.ext_iff.1 h), fun h => h ▸ rfl⟩
 #align monoid_hom.cancel_right MonoidHom.cancel_right
 #align add_monoid_hom.cancel_right AddMonoidHom.cancel_right
 
 theorem MonoidWithZeroHom.cancel_right [MulZeroOneClass M] [MulZeroOneClass N] [MulZeroOneClass P]
-  {g₁ g₂ : N →*₀ P} {f : M →*₀ N} (hf : Function.Surjective f) :
-  g₁.comp f = g₂.comp f ↔ g₁ = g₂ :=
+    {g₁ g₂ : N →*₀ P} {f : M →*₀ N} (hf : Function.Surjective f) :
+    g₁.comp f = g₂.comp f ↔ g₁ = g₂ :=
   ⟨fun h => MonoidWithZeroHom.ext <| hf.forall.2 (FunLike.ext_iff.1 h), fun h => h ▸ rfl⟩
 #align monoid_with_zero_hom.cancel_right MonoidWithZeroHom.cancel_right
 
 @[to_additive]
 theorem OneHom.cancel_left [One M] [One N] [One P] {g : OneHom N P} {f₁ f₂ : OneHom M N}
-  (hg : Function.Injective g) : g.comp f₁ = g.comp f₂ ↔ f₁ = f₂ :=
+    (hg : Function.Injective g) : g.comp f₁ = g.comp f₂ ↔ f₁ = f₂ :=
   ⟨fun h => OneHom.ext fun x => hg <| by rw [← OneHom.comp_apply, h, OneHom.comp_apply],
     fun h => h ▸ rfl⟩
 #align one_hom.cancel_left OneHom.cancel_left
@@ -1179,7 +1179,7 @@ theorem OneHom.cancel_left [One M] [One N] [One P] {g : OneHom N P} {f₁ f₂ :
 
 @[to_additive]
 theorem MulHom.cancel_left [Mul M] [Mul N] [Mul P] {g : N →ₙ* P} {f₁ f₂ : M →ₙ* N}
-  (hg : Function.Injective g) : g.comp f₁ = g.comp f₂ ↔ f₁ = f₂ :=
+    (hg : Function.Injective g) : g.comp f₁ = g.comp f₂ ↔ f₁ = f₂ :=
   ⟨fun h => MulHom.ext fun x => hg <| by rw [← MulHom.comp_apply, h, MulHom.comp_apply],
     fun h => h ▸ rfl⟩
 #align mul_hom.cancel_left MulHom.cancel_left
@@ -1187,15 +1187,15 @@ theorem MulHom.cancel_left [Mul M] [Mul N] [Mul P] {g : N →ₙ* P} {f₁ f₂
 
 @[to_additive]
 theorem MonoidHom.cancel_left [MulOneClass M] [MulOneClass N] [MulOneClass P]
-  {g : N →* P} {f₁ f₂ : M →* N} (hg : Function.Injective g) : g.comp f₁ = g.comp f₂ ↔ f₁ = f₂ :=
+    {g : N →* P} {f₁ f₂ : M →* N} (hg : Function.Injective g) : g.comp f₁ = g.comp f₂ ↔ f₁ = f₂ :=
   ⟨fun h => MonoidHom.ext fun x => hg <| by rw [← MonoidHom.comp_apply, h, MonoidHom.comp_apply],
     fun h => h ▸ rfl⟩
 #align monoid_hom.cancel_left MonoidHom.cancel_left
 #align add_monoid_hom.cancel_left AddMonoidHom.cancel_left
 
 theorem MonoidWithZeroHom.cancel_left [MulZeroOneClass M] [MulZeroOneClass N] [MulZeroOneClass P]
-  {g : N →*₀ P} {f₁ f₂ : M →*₀ N} (hg : Function.Injective g) :
-  g.comp f₁ = g.comp f₂ ↔ f₁ = f₂ :=
+    {g : N →*₀ P} {f₁ f₂ : M →*₀ N} (hg : Function.Injective g) :
+    g.comp f₁ = g.comp f₂ ↔ f₁ = f₂ :=
   ⟨fun h =>
     MonoidWithZeroHom.ext fun x => hg <| by rw [← MonoidWithZeroHom.comp_apply, h,
     MonoidWithZeroHom.comp_apply], fun h => h ▸ rfl⟩
@@ -1284,8 +1284,8 @@ protected theorem MonoidHom.map_pow [Monoid M] [Monoid N] (f : M →* N) (a : M)
 
 @[to_additive]
 protected theorem MonoidHom.map_zpow' [DivInvMonoid M] [DivInvMonoid N] (f : M →* N)
-  (hf : ∀ x, f x⁻¹ = (f x)⁻¹) (a : M) (n : ℤ) :
-  f (a ^ n) = f a ^ n := map_zpow' f hf a n
+    (hf : ∀ x, f x⁻¹ = (f x)⁻¹) (a : M) (n : ℤ) :
+    f (a ^ n) = f a ^ n := map_zpow' f hf a n
 #align monoid_hom.map_zpow' MonoidHom.map_zpow'
 #align add_monoid_hom.map_zsmul' AddMonoidHom.map_zsmul'
 
chore: exactly 4 spaces in theorems (#7328)

Co-authored-by: Moritz Firsching <firsching@google.com>

Diff
@@ -27,12 +27,12 @@ variable {F : Type*}
 namespace NeZero
 
 theorem of_map {R M} [Zero R] [Zero M] [ZeroHomClass F R M]
-  (f : F) {r : R} [neZero : NeZero (f r)] : NeZero r :=
+    (f : F) {r : R} [neZero : NeZero (f r)] : NeZero r :=
   ⟨fun h => ne (f r) <| by rw [h]; exact ZeroHomClass.map_zero f⟩
 #align ne_zero.of_map NeZero.of_map
 
 theorem of_injective {R M} [Zero R] {r : R} [NeZero r] [Zero M] [ZeroHomClass F R M] {f : F}
-  (hf : Function.Injective f) : NeZero (f r) :=
+    (hf : Function.Injective f) : NeZero (f r) :=
   ⟨by
     rw [← ZeroHomClass.map_zero f]
     exact hf.ne NeZero.out⟩
@@ -147,7 +147,7 @@ For the iff statement on the triviality of the kernel, see `injective_iff_map_eq
   its kernel is trivial. For the iff statement on the triviality of the kernel,
   see `injective_iff_map_eq_zero'`."]
 theorem _root_.injective_iff_map_eq_one {G H} [Group G] [MulOneClass H] [MonoidHomClass F G H]
-  (f : F) : Function.Injective f ↔ ∀ a, f a = 1 → a = 1 :=
+    (f : F) : Function.Injective f ↔ ∀ a, f a = 1 → a = 1 :=
   ⟨fun h x => (map_eq_one_iff f h).mp, fun h x y hxy =>
     mul_inv_eq_one.1 <| h _ <| by rw [map_mul, hxy, ← map_mul, mul_inv_self, map_one]⟩
 #align injective_iff_map_eq_one injective_iff_map_eq_one
@@ -161,7 +161,7 @@ For the implication, see `injective_iff_map_eq_one`. -/
   kernel is trivial, stated as an iff on the triviality of the kernel. For the implication, see
   `injective_iff_map_eq_zero`."]
 theorem _root_.injective_iff_map_eq_one' {G H} [Group G] [MulOneClass H] [MonoidHomClass F G H]
-  (f : F) : Function.Injective f ↔ ∀ a, f a = 1 ↔ a = 1 :=
+    (f : F) : Function.Injective f ↔ ∀ a, f a = 1 ↔ a = 1 :=
   (injective_iff_map_eq_one f).trans <|
     forall_congr' fun _ => ⟨fun h => ⟨h, fun H => H.symm ▸ map_one f⟩, Iff.mp⟩
 #align injective_iff_map_eq_one' injective_iff_map_eq_one'
@@ -177,7 +177,7 @@ variable [MulOneClass M]
   the operation `fun a b => a + -b`. See also `AddMonoidHom.ofMapSub` for a version using
   `fun a b => a - b`."]
 def ofMapMulInv {H : Type*} [Group H] (f : G → H)
-  (map_div : ∀ a b : G, f (a * b⁻¹) = f a * (f b)⁻¹) : G →* H :=
+    (map_div : ∀ a b : G, f (a * b⁻¹) = f a * (f b)⁻¹) : G →* H :=
   (mk' f) fun x y =>
     calc
       f (x * y) = f x * (f <| 1 * 1⁻¹ * y⁻¹)⁻¹ := by
@@ -190,7 +190,7 @@ def ofMapMulInv {H : Type*} [Group H] (f : G → H)
 
 @[to_additive (attr := simp)]
 theorem coe_of_map_mul_inv {H : Type*} [Group H] (f : G → H)
-  (map_div : ∀ a b : G, f (a * b⁻¹) = f a * (f b)⁻¹) :
+    (map_div : ∀ a b : G, f (a * b⁻¹) = f a * (f b)⁻¹) :
   ↑(ofMapMulInv f map_div) = f := rfl
 #align monoid_hom.coe_of_map_mul_inv MonoidHom.coe_of_map_mul_inv
 #align add_monoid_hom.coe_of_map_add_neg AddMonoidHom.coe_of_map_add_neg
@@ -223,7 +223,7 @@ theorem inv_apply {M G} [MulOneClass M] [CommGroup G] (f : M →* G) (x : M) :
 
 @[to_additive (attr := simp)]
 theorem inv_comp {M N A} [MulOneClass M] [MulOneClass N] [CommGroup A]
-  (φ : N →* A) (ψ : M →* N) : φ⁻¹.comp ψ = (φ.comp ψ)⁻¹ := by
+    (φ : N →* A) (ψ : M →* N) : φ⁻¹.comp ψ = (φ.comp ψ)⁻¹ := by
   ext
   simp only [Function.comp_apply, inv_apply, coe_comp]
 #align monoid_hom.inv_comp MonoidHom.inv_comp
@@ -231,7 +231,7 @@ theorem inv_comp {M N A} [MulOneClass M] [MulOneClass N] [CommGroup A]
 
 @[to_additive (attr := simp)]
 theorem comp_inv {M A B} [MulOneClass M] [CommGroup A] [CommGroup B]
-  (φ : A →* B) (ψ : M →* A) : φ.comp ψ⁻¹ = (φ.comp ψ)⁻¹ := by
+    (φ : A →* B) (ψ : M →* A) : φ.comp ψ⁻¹ = (φ.comp ψ)⁻¹ := by
   ext
   simp only [Function.comp_apply, inv_apply, map_inv, coe_comp]
 #align monoid_hom.comp_inv MonoidHom.comp_inv
chore: exactly 4 spaces in subsequent lines for def (#7321)

Co-authored-by: Moritz Firsching <firsching@google.com>

Diff
@@ -814,7 +814,7 @@ equalities. -/
   "Copy of a `ZeroHom` with a new `toFun` equal to the old one. Useful to fix
   definitional equalities."]
 protected def OneHom.copy [One M] [One N] (f : OneHom M N) (f' : M → N) (h : f' = f) :
-  OneHom M N where
+    OneHom M N where
   toFun := f'
   map_one' := h.symm ▸ f.map_one'
 #align one_hom.copy OneHom.copy
@@ -840,7 +840,7 @@ equalities. -/
   "Copy of an `AddHom` with a new `toFun` equal to the old one. Useful to fix
   definitional equalities."]
 protected def MulHom.copy [Mul M] [Mul N] (f : M →ₙ* N) (f' : M → N) (h : f' = f) :
-  M →ₙ* N where
+    M →ₙ* N where
   toFun := f'
   map_mul' := h.symm ▸ f.map_mul'
 #align mul_hom.copy MulHom.copy
@@ -1045,7 +1045,7 @@ def MulHom.comp [Mul M] [Mul N] [Mul P] (hnp : N →ₙ* P) (hmn : M →ₙ* N)
 /-- Composition of monoid morphisms as a monoid morphism. -/
 @[to_additive]
 def MonoidHom.comp [MulOneClass M] [MulOneClass N] [MulOneClass P] (hnp : N →* P) (hmn : M →* N) :
-  M →* P where
+    M →* P where
   toFun := hnp ∘ hmn
   map_one' := by simp
   map_mul' := by simp
chore: exactly 4 spaces in subsequent lines (#7296)

Co-authored-by: Moritz Firsching <firsching@google.com>

Diff
@@ -917,14 +917,14 @@ protected theorem MonoidHom.map_one [MulOneClass M] [MulOneClass N] (f : M →*
 #align add_monoid_hom.map_zero AddMonoidHom.map_zero
 
 protected theorem MonoidWithZeroHom.map_one [MulZeroOneClass M] [MulZeroOneClass N] (f : M →*₀ N) :
-  f 1 = 1 := f.map_one'
+    f 1 = 1 := f.map_one'
 #align monoid_with_zero_hom.map_one MonoidWithZeroHom.map_one
 
 /-- If `f` is an additive monoid homomorphism then `f 0 = 0`. -/
 add_decl_doc AddMonoidHom.map_zero
 
 protected theorem MonoidWithZeroHom.map_zero [MulZeroOneClass M] [MulZeroOneClass N] (f : M →*₀ N) :
-  f 0 = 0 := f.map_zero'
+    f 0 = 0 := f.map_zero'
 #align monoid_with_zero_hom.map_zero MonoidWithZeroHom.map_zero
 
 @[to_additive]
@@ -936,7 +936,7 @@ protected theorem MulHom.map_mul [Mul M] [Mul N] (f : M →ₙ* N) (a b : M) : f
 /-- If `f` is a monoid homomorphism then `f (a * b) = f a * f b`. -/
 @[to_additive]
 protected theorem MonoidHom.map_mul [MulOneClass M] [MulOneClass N] (f : M →* N) (a b : M) :
-  f (a * b) = f a * f b := f.map_mul' a b
+    f (a * b) = f a * f b := f.map_mul' a b
 #align monoid_hom.map_mul MonoidHom.map_mul
 #align add_monoid_hom.map_add AddMonoidHom.map_add
 
@@ -1278,7 +1278,7 @@ theorem MonoidWithZeroHom.id_comp [MulZeroOneClass M] [MulZeroOneClass N] (f : M
 
 @[to_additive]
 protected theorem MonoidHom.map_pow [Monoid M] [Monoid N] (f : M →* N) (a : M) (n : ℕ) :
-  f (a ^ n) = f a ^ n := map_pow f a n
+    f (a ^ n) = f a ^ n := map_pow f a n
 #align monoid_hom.map_pow MonoidHom.map_pow
 #align add_monoid_hom.map_nsmul AddMonoidHom.map_nsmul
 
@@ -1428,29 +1428,29 @@ theorem comp_one [MulOneClass M] [MulOneClass N] [MulOneClass P] (f : N →* P)
 
 /-- Group homomorphisms preserve inverse. -/
 @[to_additive "Additive group homomorphisms preserve negation."]
-protected theorem map_inv [Group α] [DivisionMonoid β] (f : α →* β) (a : α) :
-  f a⁻¹ = (f a)⁻¹ := map_inv f _
+protected theorem map_inv [Group α] [DivisionMonoid β] (f : α →* β) (a : α) : f a⁻¹ = (f a)⁻¹ :=
+  map_inv f _
 #align monoid_hom.map_inv MonoidHom.map_inv
 #align add_monoid_hom.map_neg AddMonoidHom.map_neg
 
 /-- Group homomorphisms preserve integer power. -/
 @[to_additive "Additive group homomorphisms preserve integer scaling."]
 protected theorem map_zpow [Group α] [DivisionMonoid β] (f : α →* β) (g : α) (n : ℤ) :
-  f (g ^ n) = f g ^ n := map_zpow f g n
+    f (g ^ n) = f g ^ n := map_zpow f g n
 #align monoid_hom.map_zpow MonoidHom.map_zpow
 #align add_monoid_hom.map_zsmul AddMonoidHom.map_zsmul
 
 /-- Group homomorphisms preserve division. -/
 @[to_additive "Additive group homomorphisms preserve subtraction."]
 protected theorem map_div [Group α] [DivisionMonoid β] (f : α →* β) (g h : α) :
-  f (g / h) = f g / f h := map_div f g h
+    f (g / h) = f g / f h := map_div f g h
 #align monoid_hom.map_div MonoidHom.map_div
 #align add_monoid_hom.map_sub AddMonoidHom.map_sub
 
 /-- Group homomorphisms preserve division. -/
 @[to_additive "Additive group homomorphisms preserve subtraction."]
 protected theorem map_mul_inv [Group α] [DivisionMonoid β] (f : α →* β) (g h : α) :
-  f (g * h⁻¹) = f g * (f h)⁻¹ := by simp
+    f (g * h⁻¹) = f g * (f h)⁻¹ := by simp
 #align monoid_hom.map_mul_inv MonoidHom.map_mul_inv
 #align add_monoid_hom.map_add_neg AddMonoidHom.map_add_neg
 
chore: only four spaces for subsequent lines (#7286)

Co-authored-by: Moritz Firsching <firsching@google.com>

Diff
@@ -214,7 +214,7 @@ theorem Subsingleton.of_oneHomClass [Subsingleton M] [OneHomClass F M N] :
 
 @[to_additive]
 theorem map_eq_one_iff [OneHomClass F M N] (f : F) (hf : Function.Injective f) {x : M} :
-  f x = 1 ↔ x = 1 := hf.eq_iff' (map_one f)
+    f x = 1 ↔ x = 1 := hf.eq_iff' (map_one f)
 #align map_eq_one_iff map_eq_one_iff
 #align map_eq_zero_iff map_eq_zero_iff
 
@@ -427,13 +427,13 @@ theorem map_mul_inv [Group G] [DivisionMonoid H] [MonoidHomClass F G H] (f : F)
 /-- Group homomorphisms preserve division. -/
 @[to_additive (attr := simp) "Additive group homomorphisms preserve subtraction."]
 theorem map_div [Group G] [DivisionMonoid H] [MonoidHomClass F G H] (f : F) :
-  ∀ a b, f (a / b) = f a / f b := map_div' _ <| map_inv f
+    ∀ a b, f (a / b) = f a / f b := map_div' _ <| map_inv f
 #align map_div map_div
 #align map_sub map_sub
 
 @[to_additive (attr := simp) (reorder := 8 9)]
 theorem map_pow [Monoid G] [Monoid H] [MonoidHomClass F G H] (f : F) (a : G) :
-  ∀ n : ℕ, f (a ^ n) = f a ^ n
+    ∀ n : ℕ, f (a ^ n) = f a ^ n
   | 0 => by rw [pow_zero, pow_zero, map_one]
   | n + 1 => by rw [pow_succ, pow_succ, map_mul, map_pow f a n]
 #align map_pow map_pow
@@ -518,7 +518,7 @@ instance [MonoidWithZeroHomClass F M N] : CoeTC F (M →*₀ N) :=
 
 @[simp]
 theorem MonoidWithZeroHom.coe_coe [MonoidWithZeroHomClass F M N] (f : F) :
-  ((f : M →*₀ N) : M → N) = f := rfl
+    ((f : M →*₀ N) : M → N) = f := rfl
 #align monoid_with_zero_hom.coe_coe MonoidWithZeroHom.coe_coe
 
 end MulZeroOne
@@ -593,19 +593,19 @@ theorem MulHom.toFun_eq_coe [Mul M] [Mul N] (f : M →ₙ* N) : f.toFun = f := r
 
 @[to_additive (attr := simp)]
 theorem MonoidHom.coe_mk [MulOneClass M] [MulOneClass N] (f hmul) :
-  (MonoidHom.mk f hmul : M → N) = f := rfl
+    (MonoidHom.mk f hmul : M → N) = f := rfl
 #align monoid_hom.coe_mk MonoidHom.coe_mk
 #align add_monoid_hom.coe_mk AddMonoidHom.coe_mk
 
 @[to_additive (attr := simp)]
 theorem MonoidHom.toOneHom_coe [MulOneClass M] [MulOneClass N] (f : M →* N) :
-  (f.toOneHom : M → N) = f := rfl
+    (f.toOneHom : M → N) = f := rfl
 #align monoid_hom.to_one_hom_coe MonoidHom.toOneHom_coe
 #align add_monoid_hom.to_zero_hom_coe AddMonoidHom.toZeroHom_coe
 
 @[to_additive (attr := simp)]
 theorem MonoidHom.toMulHom_coe [MulOneClass M] [MulOneClass N] (f : M →* N) :
-  f.toMulHom.toFun = f := rfl
+    f.toMulHom.toFun = f := rfl
 #align monoid_hom.to_mul_hom_coe MonoidHom.toMulHom_coe
 #align add_monoid_hom.to_add_hom_coe AddMonoidHom.toAddHom_coe
 
@@ -616,16 +616,16 @@ theorem MonoidHom.toFun_eq_coe [MulOneClass M] [MulOneClass N] (f : M →* N) :
 
 @[simp]
 theorem MonoidWithZeroHom.coe_mk [MulZeroOneClass M] [MulZeroOneClass N] (f h1 hmul) :
-  (MonoidWithZeroHom.mk f h1 hmul : M → N) = (f : M → N) := rfl
+    (MonoidWithZeroHom.mk f h1 hmul : M → N) = (f : M → N) := rfl
 #align monoid_with_zero_hom.coe_mk MonoidWithZeroHom.coe_mk
 
 @[simp]
 theorem MonoidWithZeroHom.toZeroHom_coe [MulZeroOneClass M] [MulZeroOneClass N] (f : M →*₀ N) :
-  (f.toZeroHom : M → N) = f := rfl
+    (f.toZeroHom : M → N) = f := rfl
 #align monoid_with_zero_hom.to_zero_hom_coe MonoidWithZeroHom.toZeroHom_coe
 
 theorem MonoidWithZeroHom.toMonoidHom_coe [MulZeroOneClass M] [MulZeroOneClass N] (f : M →*₀ N) :
-  f.toMonoidHom.toFun = f := rfl
+    f.toMonoidHom.toFun = f := rfl
 #align monoid_with_zero_hom.to_monoid_hom_coe MonoidWithZeroHom.toMonoidHom_coe
 
 @[to_additive (attr := ext)]
@@ -690,7 +690,7 @@ theorem MulHom.congr_fun [Mul M] [Mul N] {f g : M →ₙ* N} (h : f = g) (x : M)
 /-- Deprecated: use `FunLike.congr_fun` instead. -/
 @[to_additive (attr := deprecated) "Deprecated: use `FunLike.congr_fun` instead."]
 theorem MonoidHom.congr_fun [MulOneClass M] [MulOneClass N] {f g : M →* N} (h : f = g) (x : M) :
-  f x = g x := FunLike.congr_fun h x
+    f x = g x := FunLike.congr_fun h x
 #align monoid_hom.congr_fun MonoidHom.congr_fun
 #align add_monoid_hom.congr_fun AddMonoidHom.congr_fun
 
@@ -717,7 +717,7 @@ theorem MulHom.congr_arg [Mul M] [Mul N] (f : M →ₙ* N) {x y : M} (h : x = y)
 /-- Deprecated: use `FunLike.congr_arg` instead. -/
 @[to_additive (attr := deprecated) "Deprecated: use `FunLike.congr_arg` instead."]
 theorem MonoidHom.congr_arg [MulOneClass M] [MulOneClass N] (f : M →* N) {x y : M} (h : x = y) :
-  f x = f y := FunLike.congr_arg f h
+    f x = f y := FunLike.congr_arg f h
 #align monoid_hom.congr_arg MonoidHom.congr_arg
 #align add_monoid_hom.congr_arg AddMonoidHom.congr_arg
 
@@ -744,7 +744,7 @@ theorem MulHom.coe_inj [Mul M] [Mul N] ⦃f g : M →ₙ* N⦄ (h : (f : M → N
 /-- Deprecated: use `FunLike.coe_injective` instead. -/
 @[to_additive (attr := deprecated) "Deprecated: use `FunLike.coe_injective` instead."]
 theorem MonoidHom.coe_inj [MulOneClass M] [MulOneClass N] ⦃f g : M →* N⦄ (h : (f : M → N) = g) :
-  f = g := FunLike.coe_injective h
+    f = g := FunLike.coe_injective h
 #align monoid_hom.coe_inj MonoidHom.coe_inj
 #align add_monoid_hom.coe_inj AddMonoidHom.coe_inj
 
@@ -778,7 +778,7 @@ theorem MonoidHom.ext_iff [MulOneClass M] [MulOneClass N] {f g : M →* N} : f =
 /-- Deprecated: use `FunLike.ext_iff` instead. -/
 @[deprecated]
 theorem MonoidWithZeroHom.ext_iff [MulZeroOneClass M] [MulZeroOneClass N] {f g : M →*₀ N} :
-  f = g ↔ ∀ x, f x = g x := FunLike.ext_iff
+    f = g ↔ ∀ x, f x = g x := FunLike.ext_iff
 #align monoid_with_zero_hom.ext_iff MonoidWithZeroHom.ext_iff
 
 end Deprecated
@@ -797,13 +797,13 @@ theorem MulHom.mk_coe [Mul M] [Mul N] (f : M →ₙ* N) (hmul) : MulHom.mk f hmu
 
 @[to_additive (attr := simp)]
 theorem MonoidHom.mk_coe [MulOneClass M] [MulOneClass N] (f : M →* N) (hmul) :
-  MonoidHom.mk f hmul = f := MonoidHom.ext fun _ => rfl
+    MonoidHom.mk f hmul = f := MonoidHom.ext fun _ => rfl
 #align monoid_hom.mk_coe MonoidHom.mk_coe
 #align add_monoid_hom.mk_coe AddMonoidHom.mk_coe
 
 @[simp]
 theorem MonoidWithZeroHom.mk_coe [MulZeroOneClass M] [MulZeroOneClass N] (f : M →*₀ N) (h1 hmul) :
-  MonoidWithZeroHom.mk f h1 hmul = f := MonoidWithZeroHom.ext fun _ => rfl
+    MonoidWithZeroHom.mk f h1 hmul = f := MonoidWithZeroHom.ext fun _ => rfl
 #align monoid_with_zero_hom.mk_coe MonoidWithZeroHom.mk_coe
 
 end Coes
@@ -1072,13 +1072,13 @@ add_decl_doc AddMonoidHom.comp
 
 @[to_additive (attr := simp)]
 theorem OneHom.coe_comp [One M] [One N] [One P] (g : OneHom N P) (f : OneHom M N) :
-  ↑(g.comp f) = g ∘ f := rfl
+    ↑(g.comp f) = g ∘ f := rfl
 #align one_hom.coe_comp OneHom.coe_comp
 #align zero_hom.coe_comp ZeroHom.coe_comp
 
 @[to_additive (attr := simp)]
 theorem MulHom.coe_comp [Mul M] [Mul N] [Mul P] (g : N →ₙ* P) (f : M →ₙ* N) :
-  ↑(g.comp f) = g ∘ f := rfl
+    ↑(g.comp f) = g ∘ f := rfl
 #align mul_hom.coe_comp MulHom.coe_comp
 #align add_hom.coe_comp AddHom.coe_comp
 
@@ -1095,13 +1095,13 @@ theorem MonoidWithZeroHom.coe_comp [MulZeroOneClass M] [MulZeroOneClass N] [MulZ
 
 @[to_additive]
 theorem OneHom.comp_apply [One M] [One N] [One P] (g : OneHom N P) (f : OneHom M N) (x : M) :
-  g.comp f x = g (f x) := rfl
+    g.comp f x = g (f x) := rfl
 #align one_hom.comp_apply OneHom.comp_apply
 #align zero_hom.comp_apply ZeroHom.comp_apply
 
 @[to_additive]
 theorem MulHom.comp_apply [Mul M] [Mul N] [Mul P] (g : N →ₙ* P) (f : M →ₙ* N) (x : M) :
-  g.comp f x = g (f x) := rfl
+    g.comp f x = g (f x) := rfl
 #align mul_hom.comp_apply MulHom.comp_apply
 #align add_hom.comp_apply AddHom.comp_apply
 
@@ -1206,27 +1206,27 @@ section
 
 @[to_additive]
 theorem MonoidHom.toOneHom_injective [MulOneClass M] [MulOneClass N] :
-  Function.Injective (MonoidHom.toOneHom : (M →* N) → OneHom M N) :=
+    Function.Injective (MonoidHom.toOneHom : (M →* N) → OneHom M N) :=
   fun _ _ h => MonoidHom.ext <| OneHom.ext_iff.mp h
 #align monoid_hom.to_one_hom_injective MonoidHom.toOneHom_injective
 #align add_monoid_hom.to_zero_hom_injective AddMonoidHom.toZeroHom_injective
 
 @[to_additive]
 theorem MonoidHom.toMulHom_injective [MulOneClass M] [MulOneClass N] :
-  Function.Injective (MonoidHom.toMulHom : (M →* N) → M →ₙ* N) :=
+    Function.Injective (MonoidHom.toMulHom : (M →* N) → M →ₙ* N) :=
   fun _ _ h => MonoidHom.ext <| MulHom.ext_iff.mp h
 #align monoid_hom.to_mul_hom_injective MonoidHom.toMulHom_injective
 #align add_monoid_hom.to_add_hom_injective AddMonoidHom.toAddHom_injective
 
 theorem MonoidWithZeroHom.toMonoidHom_injective [MulZeroOneClass M] [MulZeroOneClass N] :
-  Function.Injective (MonoidWithZeroHom.toMonoidHom : (M →*₀ N) → M →* N) :=
+    Function.Injective (MonoidWithZeroHom.toMonoidHom : (M →*₀ N) → M →* N) :=
   fun _ _ h => MonoidWithZeroHom.ext <| MonoidHom.ext_iff.mp h
 #align monoid_with_zero_hom.to_monoid_hom_injective MonoidWithZeroHom.toMonoidHom_injective
 
 end
 
 theorem MonoidWithZeroHom.toZeroHom_injective [MulZeroOneClass M] [MulZeroOneClass N] :
-  Function.Injective (MonoidWithZeroHom.toZeroHom : (M →*₀ N) → ZeroHom M N) :=
+    Function.Injective (MonoidWithZeroHom.toZeroHom : (M →*₀ N) → ZeroHom M N) :=
   fun _ _ h => MonoidWithZeroHom.ext <| (FunLike.ext_iff (F := ZeroHom M N)).mp h
 #align monoid_with_zero_hom.to_zero_hom_injective MonoidWithZeroHom.toZeroHom_injective
 
@@ -1244,13 +1244,13 @@ theorem MulHom.comp_id [Mul M] [Mul N] (f : M →ₙ* N) : f.comp (MulHom.id M)
 
 @[to_additive (attr := simp)]
 theorem MonoidHom.comp_id [MulOneClass M] [MulOneClass N] (f : M →* N) :
-  f.comp (MonoidHom.id M) = f := MonoidHom.ext fun _ => rfl
+    f.comp (MonoidHom.id M) = f := MonoidHom.ext fun _ => rfl
 #align monoid_hom.comp_id MonoidHom.comp_id
 #align add_monoid_hom.comp_id AddMonoidHom.comp_id
 
 @[simp]
 theorem MonoidWithZeroHom.comp_id [MulZeroOneClass M] [MulZeroOneClass N] (f : M →*₀ N) :
-  f.comp (MonoidWithZeroHom.id M) = f := MonoidWithZeroHom.ext fun _ => rfl
+    f.comp (MonoidWithZeroHom.id M) = f := MonoidWithZeroHom.ext fun _ => rfl
 #align monoid_with_zero_hom.comp_id MonoidWithZeroHom.comp_id
 
 @[to_additive (attr := simp)]
@@ -1267,13 +1267,13 @@ theorem MulHom.id_comp [Mul M] [Mul N] (f : M →ₙ* N) : (MulHom.id N).comp f
 
 @[to_additive (attr := simp)]
 theorem MonoidHom.id_comp [MulOneClass M] [MulOneClass N] (f : M →* N) :
-  (MonoidHom.id N).comp f = f := MonoidHom.ext fun _ => rfl
+    (MonoidHom.id N).comp f = f := MonoidHom.ext fun _ => rfl
 #align monoid_hom.id_comp MonoidHom.id_comp
 #align add_monoid_hom.id_comp AddMonoidHom.id_comp
 
 @[simp]
 theorem MonoidWithZeroHom.id_comp [MulZeroOneClass M] [MulZeroOneClass N] (f : M →*₀ N) :
-  (MonoidWithZeroHom.id N).comp f = f := MonoidWithZeroHom.ext fun _ => rfl
+    (MonoidWithZeroHom.id N).comp f = f := MonoidWithZeroHom.ext fun _ => rfl
 #align monoid_with_zero_hom.id_comp MonoidWithZeroHom.id_comp
 
 @[to_additive]
@@ -1385,7 +1385,7 @@ theorem MonoidHom.one_apply [MulOneClass M] [MulOneClass N] (x : M) : (1 : M →
 
 @[to_additive (attr := simp)]
 theorem OneHom.one_comp [One M] [One N] [One P] (f : OneHom M N) :
-  (1 : OneHom N P).comp f = 1 := rfl
+    (1 : OneHom N P).comp f = 1 := rfl
 #align one_hom.one_comp OneHom.one_comp
 #align zero_hom.zero_comp ZeroHom.zero_comp
 
@@ -1414,13 +1414,13 @@ variable [Group G] [CommGroup H]
 
 @[to_additive (attr := simp)]
 theorem one_comp [MulOneClass M] [MulOneClass N] [MulOneClass P] (f : M →* N) :
-  (1 : N →* P).comp f = 1 := rfl
+    (1 : N →* P).comp f = 1 := rfl
 #align monoid_hom.one_comp MonoidHom.one_comp
 #align add_monoid_hom.zero_comp AddMonoidHom.zero_comp
 
 @[to_additive (attr := simp)]
 theorem comp_one [MulOneClass M] [MulOneClass N] [MulOneClass P] (f : N →* P) :
-  f.comp (1 : M →* N) = 1 := by
+    f.comp (1 : M →* N) = 1 := by
   ext
   simp only [map_one, coe_comp, Function.comp_apply, one_apply]
 #align monoid_hom.comp_one MonoidHom.comp_one
chore: only four spaces for subsequent lines (#7286)

Co-authored-by: Moritz Firsching <firsching@google.com>

Diff
@@ -80,19 +80,19 @@ instance [Mul M] [CommSemigroup N] : Mul (M →ₙ* N) :=
 
 @[to_additive (attr := simp)]
 theorem mul_apply {M N} [Mul M] [CommSemigroup N] (f g : M →ₙ* N) (x : M) :
-  (f * g) x = f x * g x := rfl
+    (f * g) x = f x * g x := rfl
 #align mul_hom.mul_apply MulHom.mul_apply
 #align add_hom.add_apply AddHom.add_apply
 
 @[to_additive]
 theorem mul_comp [Mul M] [Mul N] [CommSemigroup P] (g₁ g₂ : N →ₙ* P) (f : M →ₙ* N) :
-  (g₁ * g₂).comp f = g₁.comp f * g₂.comp f := rfl
+    (g₁ * g₂).comp f = g₁.comp f * g₂.comp f := rfl
 #align mul_hom.mul_comp MulHom.mul_comp
 #align add_hom.add_comp AddHom.add_comp
 
 @[to_additive]
 theorem comp_mul [Mul M] [CommSemigroup N] [CommSemigroup P] (g : N →ₙ* P) (f₁ f₂ : M →ₙ* N) :
-  g.comp (f₁ * f₂) = g.comp f₁ * g.comp f₂ := by
+    g.comp (f₁ * f₂) = g.comp f₁ * g.comp f₂ := by
   ext
   simp only [mul_apply, Function.comp_apply, map_mul, coe_comp]
 #align mul_hom.comp_mul MulHom.comp_mul
@@ -122,19 +122,19 @@ add_decl_doc AddMonoidHom.add
 
 @[to_additive (attr := simp)]
 theorem mul_apply {M N} [MulOneClass M] [CommMonoid N] (f g : M →* N) (x : M) :
-  (f * g) x = f x * g x := rfl
+    (f * g) x = f x * g x := rfl
 #align monoid_hom.mul_apply MonoidHom.mul_apply
 #align add_monoid_hom.add_apply AddMonoidHom.add_apply
 
 @[to_additive]
 theorem mul_comp [MulOneClass M] [MulOneClass N] [CommMonoid P] (g₁ g₂ : N →* P) (f : M →* N) :
-  (g₁ * g₂).comp f = g₁.comp f * g₂.comp f := rfl
+    (g₁ * g₂).comp f = g₁.comp f * g₂.comp f := rfl
 #align monoid_hom.mul_comp MonoidHom.mul_comp
 #align add_monoid_hom.add_comp AddMonoidHom.add_comp
 
 @[to_additive]
 theorem comp_mul [MulOneClass M] [CommMonoid N] [CommMonoid P] (g : N →* P) (f₁ f₂ : M →* N) :
-  g.comp (f₁ * f₂) = g.comp f₁ * g.comp f₂ := by
+    g.comp (f₁ * f₂) = g.comp f₁ * g.comp f₂ := by
   ext
   simp only [mul_apply, Function.comp_apply, map_mul, coe_comp]
 #align monoid_hom.comp_mul MonoidHom.comp_mul
@@ -204,7 +204,7 @@ def ofMapDiv {H : Type*} [Group H] (f : G → H) (hf : ∀ x y, f (x / y) = f x
 
 @[to_additive (attr := simp)]
 theorem coe_of_map_div {H : Type*} [Group H] (f : G → H) (hf : ∀ x y, f (x / y) = f x / f y) :
-  ↑(ofMapDiv f hf) = f := rfl
+    ↑(ofMapDiv f hf) = f := rfl
 #align monoid_hom.coe_of_map_div MonoidHom.coe_of_map_div
 #align add_monoid_hom.coe_of_map_sub AddMonoidHom.coe_of_map_sub
 
@@ -217,7 +217,7 @@ instance {M G} [MulOneClass M] [CommGroup G] : Inv (M →* G) :=
 
 @[to_additive (attr := simp)]
 theorem inv_apply {M G} [MulOneClass M] [CommGroup G] (f : M →* G) (x : M) :
-  f⁻¹ x = (f x)⁻¹ := rfl
+    f⁻¹ x = (f x)⁻¹ := rfl
 #align monoid_hom.inv_apply MonoidHom.inv_apply
 #align add_monoid_hom.neg_apply AddMonoidHom.neg_apply
 
@@ -247,7 +247,7 @@ instance {M G} [MulOneClass M] [CommGroup G] : Div (M →* G) :=
 
 @[to_additive (attr := simp)]
 theorem div_apply {M G} [MulOneClass M] [CommGroup G] (f g : M →* G) (x : M) :
-  (f / g) x = f x / g x := rfl
+    (f / g) x = f x / g x := rfl
 #align monoid_hom.div_apply MonoidHom.div_apply
 #align add_monoid_hom.sub_apply AddMonoidHom.sub_apply
 
chore: make fields of algebraic (iso)morphisms protected (#7150)

Pretty much all these fields are implementation details, and not intended as API. There is no point in open MonoidHom bringing toFun or map_mul' into the environment, as neither are the preferred way to spell those things.

Diff
@@ -80,9 +80,9 @@ When you extend this structure, make sure to also extend `ZeroHomClass`.
 -/
 structure ZeroHom (M : Type*) (N : Type*) [Zero M] [Zero N] where
   /-- The underlying function -/
-  toFun : M → N
+  protected toFun : M → N
   /-- The proposition that the function preserves 0 -/
-  map_zero' : toFun 0 = 0
+  protected map_zero' : toFun 0 = 0
 #align zero_hom ZeroHom
 #align zero_hom.map_zero' ZeroHom.map_zero'
 
@@ -111,9 +111,9 @@ When you extend this structure, make sure to extend `AddHomClass`.
 -/
 structure AddHom (M : Type*) (N : Type*) [Add M] [Add N] where
   /-- The underlying function -/
-  toFun : M → N
+  protected toFun : M → N
   /-- The proposition that the function preserves addition -/
-  map_add' : ∀ x y, toFun (x + y) = toFun x + toFun y
+  protected map_add' : ∀ x y, toFun (x + y) = toFun x + toFun y
 #align add_hom AddHom
 
 /-- `AddHomClass F M N` states that `F` is a type of addition-preserving homomorphisms.
@@ -175,9 +175,9 @@ When you extend this structure, make sure to also extend `OneHomClass`.
 @[to_additive]
 structure OneHom (M : Type*) (N : Type*) [One M] [One N] where
   /-- The underlying function -/
-  toFun : M → N
+  protected toFun : M → N
   /-- The proposition that the function preserves 1 -/
-  map_one' : toFun 1 = 1
+  protected map_one' : toFun 1 = 1
 #align one_hom OneHom
 
 /-- `OneHomClass F M N` states that `F` is a type of one-preserving homomorphisms.
@@ -267,9 +267,9 @@ When you extend this structure, make sure to extend `MulHomClass`.
 @[to_additive]
 structure MulHom (M : Type*) (N : Type*) [Mul M] [Mul N] where
   /-- The underlying function -/
-  toFun : M → N
+  protected toFun : M → N
   /-- The proposition that the function preserves multiplication -/
-  map_mul' : ∀ x y, toFun (x * y) = toFun x * toFun y
+  protected map_mul' : ∀ x y, toFun (x * y) = toFun x * toFun y
 #align mul_hom MulHom
 
 /-- `M →ₙ* N` denotes the type of multiplication-preserving maps from `M` to `N`. -/
refactor: split Algebra.Hom.Group and Algebra.Hom.Ring (#7094)

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

Diff
@@ -4,9 +4,6 @@ Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Patrick Massot, Kevin Buzzard, Scott Morrison, Johan Commelin, Chris Hughes,
   Johannes Hölzl, Yury Kudryashov
 -/
-import Mathlib.Init.CCLemmas
-import Mathlib.Algebra.NeZero
-import Mathlib.Algebra.Group.Basic
 import Mathlib.Algebra.GroupWithZero.Defs
 import Mathlib.Data.FunLike.Basic
 
@@ -103,22 +100,6 @@ class ZeroHomClass (F : Type*) (M N : outParam (Type*)) [Zero M] [Zero N]
 -- Instances and lemmas are defined below through `@[to_additive]`.
 end Zero
 
-namespace NeZero
-
-theorem of_map {R M} [Zero R] [Zero M] [ZeroHomClass F R M]
-  (f : F) {r : R} [neZero : NeZero (f r)] : NeZero r :=
-  ⟨fun h => ne (f r) <| by rw [h]; exact ZeroHomClass.map_zero f⟩
-#align ne_zero.of_map NeZero.of_map
-
-theorem of_injective {R M} [Zero R] {r : R} [NeZero r] [Zero M] [ZeroHomClass F R M] {f : F}
-  (hf : Function.Injective f) : NeZero (f r) :=
-  ⟨by
-    rw [← ZeroHomClass.map_zero f]
-    exact hf.ne NeZero.out⟩
-#align ne_zero.of_injective NeZero.of_injective
-
-end NeZero
-
 section Add
 
 /-- `AddHom M N` is the type of functions `M → N` that preserve addition.
@@ -245,7 +226,7 @@ theorem map_ne_one_iff {R S F : Type*} [One R] [One S] [OneHomClass F R S] (f :
 
 @[to_additive]
 theorem ne_one_of_map {R S F : Type*} [One R] [One S] [OneHomClass F R S] {f : F} {x : R}
-  (hx : f x ≠ 1) : x ≠ 1 := ne_of_apply_ne f <| ne_of_ne_of_eq hx (map_one f).symm
+  (hx : f x ≠ 1) : x ≠ 1 := ne_of_apply_ne f <| (by rwa [(map_one f)])
 #align ne_one_of_map ne_one_of_map
 #align ne_zero_of_map ne_zero_of_map
 
@@ -670,6 +651,26 @@ theorem MonoidWithZeroHom.ext [MulZeroOneClass M] [MulZeroOneClass N] ⦃f g : M
   (h : ∀ x, f x = g x) : f = g := FunLike.ext _ _ h
 #align monoid_with_zero_hom.ext MonoidWithZeroHom.ext
 
+
+namespace MonoidHom
+
+variable [Group G]
+variable [MulOneClass M]
+
+/-- Makes a group homomorphism from a proof that the map preserves multiplication. -/
+@[to_additive (attr := simps (config := .asFn))
+  "Makes an additive group homomorphism from a proof that the map preserves addition."]
+def mk' (f : M → G) (map_mul : ∀ a b : M, f (a * b) = f a * f b) : M →* G where
+  toFun := f
+  map_mul' := map_mul
+  map_one' := by rw [← mul_right_cancel_iff, ← map_mul _ 1, one_mul, one_mul]
+#align monoid_hom.mk' MonoidHom.mk'
+#align add_monoid_hom.mk' AddMonoidHom.mk'
+#align add_monoid_hom.mk'_apply AddMonoidHom.mk'_apply
+#align monoid_hom.mk'_apply MonoidHom.mk'_apply
+
+end MonoidHom
+
 section Deprecated
 
 /-- Deprecated: use `FunLike.congr_fun` instead. -/
@@ -975,30 +976,6 @@ theorem map_exists_left_inv (f : F) {x : M} (hx : ∃ y, y * x = 1) : ∃ y, y *
 
 end MonoidHom
 
-section DivisionCommMonoid
-
-variable [DivisionCommMonoid α]
-
-/-- Inversion on a commutative group, considered as a monoid homomorphism. -/
-@[to_additive "Negation on a commutative additive group, considered as an additive monoid
-homomorphism."]
-def invMonoidHom : α →* α where
-  toFun := Inv.inv
-  map_one' := inv_one
-  map_mul' := mul_inv
-#align inv_monoid_hom invMonoidHom
-#align neg_add_monoid_hom negAddMonoidHom
-
-@[simp]
-theorem coe_invMonoidHom : (invMonoidHom : α → α) = Inv.inv := rfl
-#align coe_inv_monoid_hom coe_invMonoidHom
-
-@[simp]
-theorem invMonoidHom_apply (a : α) : invMonoidHom a = a⁻¹ := rfl
-#align inv_monoid_hom_apply invMonoidHom_apply
-
-end DivisionCommMonoid
-
 /-- The identity map from a type with 1 to itself. -/
 @[to_additive (attr := simps)]
 def OneHom.id (M : Type*) [One M] : OneHom M M where
@@ -1431,68 +1408,10 @@ instance [MulOneClass M] [MulOneClass N] : Inhabited (M →* N) := ⟨1⟩
 -- unlike the other homs, `MonoidWithZeroHom` does not have a `1` or `0`
 instance [MulZeroOneClass M] : Inhabited (M →*₀ M) := ⟨MonoidWithZeroHom.id M⟩
 
-namespace MulHom
-
-/-- Given two mul morphisms `f`, `g` to a commutative semigroup, `f * g` is the mul morphism
-sending `x` to `f x * g x`. -/
-@[to_additive "Given two additive morphisms `f`, `g` to an additive commutative semigroup,
-`f + g` is the additive morphism sending `x` to `f x + g x`."]
-instance [Mul M] [CommSemigroup N] : Mul (M →ₙ* N) :=
-  ⟨fun f g =>
-    { toFun := fun m => f m * g m,
-      map_mul' := fun x y => by
-        intros
-        show f (x * y) * g (x * y) = f x * g x * (f y * g y)
-        rw [f.map_mul, g.map_mul, ← mul_assoc, ← mul_assoc, mul_right_comm (f x)] }⟩
-
-@[to_additive (attr := simp)]
-theorem mul_apply {M N} [Mul M] [CommSemigroup N] (f g : M →ₙ* N) (x : M) :
-  (f * g) x = f x * g x := rfl
-#align mul_hom.mul_apply MulHom.mul_apply
-#align add_hom.add_apply AddHom.add_apply
-
-@[to_additive]
-theorem mul_comp [Mul M] [Mul N] [CommSemigroup P] (g₁ g₂ : N →ₙ* P) (f : M →ₙ* N) :
-  (g₁ * g₂).comp f = g₁.comp f * g₂.comp f := rfl
-#align mul_hom.mul_comp MulHom.mul_comp
-#align add_hom.add_comp AddHom.add_comp
-
-@[to_additive]
-theorem comp_mul [Mul M] [CommSemigroup N] [CommSemigroup P] (g : N →ₙ* P) (f₁ f₂ : M →ₙ* N) :
-  g.comp (f₁ * f₂) = g.comp f₁ * g.comp f₂ := by
-  ext
-  simp only [mul_apply, Function.comp_apply, map_mul, coe_comp]
-#align mul_hom.comp_mul MulHom.comp_mul
-#align add_hom.comp_add AddHom.comp_add
-
-end MulHom
-
 namespace MonoidHom
 
 variable [Group G] [CommGroup H]
 
-/-- Given two monoid morphisms `f`, `g` to a commutative monoid, `f * g` is the monoid morphism
-sending `x` to `f x * g x`. -/
-@[to_additive]
-instance mul {M N} [MulOneClass M] [CommMonoid N] : Mul (M →* N) :=
-  ⟨fun f g =>
-    { toFun := fun m => f m * g m,
-      map_one' := show f 1 * g 1 = 1 by simp,
-      map_mul' := fun x y => by
-        intros
-        show f (x * y) * g (x * y) = f x * g x * (f y * g y)
-        rw [f.map_mul, g.map_mul, ← mul_assoc, ← mul_assoc, mul_right_comm (f x)] }⟩
-
-/-- Given two additive monoid morphisms `f`, `g` to an additive commutative monoid,
-`f + g` is the additive monoid morphism sending `x` to `f x + g x`. -/
-add_decl_doc AddMonoidHom.add
-
-@[to_additive (attr := simp)]
-theorem mul_apply {M N} [MulOneClass M] [CommMonoid N] (f g : M →* N) (x : M) :
-  (f * g) x = f x * g x := rfl
-#align monoid_hom.mul_apply MonoidHom.mul_apply
-#align add_monoid_hom.add_apply AddMonoidHom.add_apply
-
 @[to_additive (attr := simp)]
 theorem one_comp [MulOneClass M] [MulOneClass N] [MulOneClass P] (f : M →* N) :
   (1 : N →* P).comp f = 1 := rfl
@@ -1507,20 +1426,6 @@ theorem comp_one [MulOneClass M] [MulOneClass N] [MulOneClass P] (f : N →* P)
 #align monoid_hom.comp_one MonoidHom.comp_one
 #align add_monoid_hom.comp_zero AddMonoidHom.comp_zero
 
-@[to_additive]
-theorem mul_comp [MulOneClass M] [MulOneClass N] [CommMonoid P] (g₁ g₂ : N →* P) (f : M →* N) :
-  (g₁ * g₂).comp f = g₁.comp f * g₂.comp f := rfl
-#align monoid_hom.mul_comp MonoidHom.mul_comp
-#align add_monoid_hom.add_comp AddMonoidHom.add_comp
-
-@[to_additive]
-theorem comp_mul [MulOneClass M] [CommMonoid N] [CommMonoid P] (g : N →* P) (f₁ f₂ : M →* N) :
-  g.comp (f₁ * f₂) = g.comp f₁ * g.comp f₂ := by
-  ext
-  simp only [mul_apply, Function.comp_apply, map_mul, coe_comp]
-#align monoid_hom.comp_mul MonoidHom.comp_mul
-#align add_monoid_hom.comp_add AddMonoidHom.comp_add
-
 /-- Group homomorphisms preserve inverse. -/
 @[to_additive "Additive group homomorphisms preserve negation."]
 protected theorem map_inv [Group α] [DivisionMonoid β] (f : α →* β) (a : α) :
@@ -1549,135 +1454,4 @@ protected theorem map_mul_inv [Group α] [DivisionMonoid β] (f : α →* β) (g
 #align monoid_hom.map_mul_inv MonoidHom.map_mul_inv
 #align add_monoid_hom.map_add_neg AddMonoidHom.map_add_neg
 
-/-- A homomorphism from a group to a monoid is injective iff its kernel is trivial.
-For the iff statement on the triviality of the kernel, see `injective_iff_map_eq_one'`.  -/
-@[to_additive
-  "A homomorphism from an additive group to an additive monoid is injective iff
-  its kernel is trivial. For the iff statement on the triviality of the kernel,
-  see `injective_iff_map_eq_zero'`."]
-theorem _root_.injective_iff_map_eq_one {G H} [Group G] [MulOneClass H] [MonoidHomClass F G H]
-  (f : F) : Function.Injective f ↔ ∀ a, f a = 1 → a = 1 :=
-  ⟨fun h x => (map_eq_one_iff f h).mp, fun h x y hxy =>
-    mul_inv_eq_one.1 <| h _ <| by rw [map_mul, hxy, ← map_mul, mul_inv_self, map_one]⟩
-#align injective_iff_map_eq_one injective_iff_map_eq_one
-#align injective_iff_map_eq_zero injective_iff_map_eq_zero
-
-/-- A homomorphism from a group to a monoid is injective iff its kernel is trivial,
-stated as an iff on the triviality of the kernel.
-For the implication, see `injective_iff_map_eq_one`. -/
-@[to_additive
-  "A homomorphism from an additive group to an additive monoid is injective iff its
-  kernel is trivial, stated as an iff on the triviality of the kernel. For the implication, see
-  `injective_iff_map_eq_zero`."]
-theorem _root_.injective_iff_map_eq_one' {G H} [Group G] [MulOneClass H] [MonoidHomClass F G H]
-  (f : F) : Function.Injective f ↔ ∀ a, f a = 1 ↔ a = 1 :=
-  (injective_iff_map_eq_one f).trans <|
-    forall_congr' fun _ => ⟨fun h => ⟨h, fun H => H.symm ▸ map_one f⟩, Iff.mp⟩
-#align injective_iff_map_eq_one' injective_iff_map_eq_one'
-#align injective_iff_map_eq_zero' injective_iff_map_eq_zero'
-
-variable [MulOneClass M]
-
-/-- Makes a group homomorphism from a proof that the map preserves multiplication. -/
-@[to_additive (attr := simps (config := .asFn))
-  "Makes an additive group homomorphism from a proof that the map preserves addition."]
-def mk' (f : M → G) (map_mul : ∀ a b : M, f (a * b) = f a * f b) : M →* G where
-  toFun := f
-  map_mul' := map_mul
-  map_one' := mul_left_eq_self.1 <| by rw [← map_mul, mul_one]
-#align monoid_hom.mk' MonoidHom.mk'
-#align add_monoid_hom.mk' AddMonoidHom.mk'
-#align add_monoid_hom.mk'_apply AddMonoidHom.mk'_apply
-#align monoid_hom.mk'_apply MonoidHom.mk'_apply
-
-/-- Makes a group homomorphism from a proof that the map preserves right division
-`fun x y => x * y⁻¹`. See also `MonoidHom.of_map_div` for a version using `fun x y => x / y`.
--/
-@[to_additive
-  "Makes an additive group homomorphism from a proof that the map preserves
-  the operation `fun a b => a + -b`. See also `AddMonoidHom.ofMapSub` for a version using
-  `fun a b => a - b`."]
-def ofMapMulInv {H : Type*} [Group H] (f : G → H)
-  (map_div : ∀ a b : G, f (a * b⁻¹) = f a * (f b)⁻¹) : G →* H :=
-  (mk' f) fun x y =>
-    calc
-      f (x * y) = f x * (f <| 1 * 1⁻¹ * y⁻¹)⁻¹ := by
-        { simp only [one_mul, inv_one, ← map_div, inv_inv] }
-      _ = f x * f y := by
-        { simp only [map_div]
-          simp only [mul_right_inv, one_mul, inv_inv] }
-#align monoid_hom.of_map_mul_inv MonoidHom.ofMapMulInv
-#align add_monoid_hom.of_map_add_neg AddMonoidHom.ofMapAddNeg
-
-@[to_additive (attr := simp)]
-theorem coe_of_map_mul_inv {H : Type*} [Group H] (f : G → H)
-  (map_div : ∀ a b : G, f (a * b⁻¹) = f a * (f b)⁻¹) :
-  ↑(ofMapMulInv f map_div) = f := rfl
-#align monoid_hom.coe_of_map_mul_inv MonoidHom.coe_of_map_mul_inv
-#align add_monoid_hom.coe_of_map_add_neg AddMonoidHom.coe_of_map_add_neg
-
-/-- Define a morphism of additive groups given a map which respects ratios. -/
-@[to_additive "Define a morphism of additive groups given a map which respects difference."]
-def ofMapDiv {H : Type*} [Group H] (f : G → H) (hf : ∀ x y, f (x / y) = f x / f y) : G →* H :=
-  ofMapMulInv f (by simpa only [div_eq_mul_inv] using hf)
-#align monoid_hom.of_map_div MonoidHom.ofMapDiv
-#align add_monoid_hom.of_map_sub AddMonoidHom.ofMapSub
-
-@[to_additive (attr := simp)]
-theorem coe_of_map_div {H : Type*} [Group H] (f : G → H) (hf : ∀ x y, f (x / y) = f x / f y) :
-  ↑(ofMapDiv f hf) = f := rfl
-#align monoid_hom.coe_of_map_div MonoidHom.coe_of_map_div
-#align add_monoid_hom.coe_of_map_sub AddMonoidHom.coe_of_map_sub
-
-/-- If `f` is a monoid homomorphism to a commutative group, then `f⁻¹` is the homomorphism sending
-`x` to `(f x)⁻¹`. -/
-@[to_additive "If `f` is an additive monoid homomorphism to an additive commutative group,
-then `-f` is the homomorphism sending `x` to `-(f x)`."]
-instance {M G} [MulOneClass M] [CommGroup G] : Inv (M →* G) :=
-  ⟨fun f => (mk' fun g => (f g)⁻¹) fun a b => by rw [← mul_inv, f.map_mul]⟩
-
-@[to_additive (attr := simp)]
-theorem inv_apply {M G} [MulOneClass M] [CommGroup G] (f : M →* G) (x : M) :
-  f⁻¹ x = (f x)⁻¹ := rfl
-#align monoid_hom.inv_apply MonoidHom.inv_apply
-#align add_monoid_hom.neg_apply AddMonoidHom.neg_apply
-
-@[to_additive (attr := simp)]
-theorem inv_comp {M N A} [MulOneClass M] [MulOneClass N] [CommGroup A]
-  (φ : N →* A) (ψ : M →* N) : φ⁻¹.comp ψ = (φ.comp ψ)⁻¹ := by
-  ext
-  simp only [Function.comp_apply, inv_apply, coe_comp]
-#align monoid_hom.inv_comp MonoidHom.inv_comp
-#align add_monoid_hom.neg_comp AddMonoidHom.neg_comp
-
-@[to_additive (attr := simp)]
-theorem comp_inv {M A B} [MulOneClass M] [CommGroup A] [CommGroup B]
-  (φ : A →* B) (ψ : M →* A) : φ.comp ψ⁻¹ = (φ.comp ψ)⁻¹ := by
-  ext
-  simp only [Function.comp_apply, inv_apply, map_inv, coe_comp]
-#align monoid_hom.comp_inv MonoidHom.comp_inv
-#align add_monoid_hom.comp_neg AddMonoidHom.comp_neg
-
-/-- If `f` and `g` are monoid homomorphisms to a commutative group, then `f / g` is the homomorphism
-sending `x` to `(f x) / (g x)`. -/
-@[to_additive "If `f` and `g` are monoid homomorphisms to an additive commutative group,
-then `f - g` is the homomorphism sending `x` to `(f x) - (g x)`."]
-instance {M G} [MulOneClass M] [CommGroup G] : Div (M →* G) :=
-  ⟨fun f g => (mk' fun x => f x / g x) fun a b => by
-    simp [div_eq_mul_inv, mul_assoc, mul_left_comm, mul_comm]⟩
-
-@[to_additive (attr := simp)]
-theorem div_apply {M G} [MulOneClass M] [CommGroup G] (f g : M →* G) (x : M) :
-  (f / g) x = f x / g x := rfl
-#align monoid_hom.div_apply MonoidHom.div_apply
-#align add_monoid_hom.sub_apply AddMonoidHom.sub_apply
-
 end MonoidHom
-
-/-- Given two monoid with zero morphisms `f`, `g` to a commutative monoid, `f * g` is the monoid
-with zero morphism sending `x` to `f x * g x`. -/
-instance [MulZeroOneClass M] [CommMonoidWithZero N] : Mul (M →*₀ N) :=
-  ⟨fun f g => { (f * g : M →* N) with
-    toFun := fun a => f a * g a,
-    map_zero' := by dsimp only []; rw [map_zero, zero_mul] }⟩
-    -- Porting note: why do we need `dsimp` here?
refactor: split Algebra.Hom.Group and Algebra.Hom.Ring (#7094)

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

feat: Subsingleton instances for *Hom (#6913)

Add Subsingleton instances for OneHom, MonoidHom, and MonoidWithZeroHom from a Subsingleton.

Diff
@@ -223,6 +223,14 @@ theorem map_one [OneHomClass F M N] (f : F) : f 1 = 1 :=
 #align map_one map_one
 #align map_zero map_zero
 
+/-- In principle this could be an instance, but in practice it causes performance issues. -/
+@[to_additive]
+theorem Subsingleton.of_oneHomClass [Subsingleton M] [OneHomClass F M N] :
+    Subsingleton F where
+  allEq f g := FunLike.ext _ _ fun x ↦ by simp [Subsingleton.elim x 1]
+
+@[to_additive] instance [Subsingleton M] : Subsingleton (OneHom M N) := .of_oneHomClass
+
 @[to_additive]
 theorem map_eq_one_iff [OneHomClass F M N] (f : F) (hf : Function.Injective f) {x : M} :
   f x = 1 ↔ x = 1 := hf.eq_iff' (map_one f)
@@ -385,6 +393,8 @@ instance MonoidHom.monoidHomClass : MonoidHomClass (M →* N) M N where
 -- This is waiting on https://github.com/leanprover-community/mathlib4/issues/660
 attribute [to_additive existing] MonoidHomClass.toOneHomClass
 
+@[to_additive] instance [Subsingleton M] : Subsingleton (M →* N) := .of_oneHomClass
+
 /-- Turn an element of a type `F` satisfying `MonoidHomClass F M N` into an actual
 `MonoidHom`. This is declared as the default coercion from `F` to `M →* N`. -/
 @[to_additive (attr := coe)
@@ -512,6 +522,8 @@ instance MonoidWithZeroHom.monoidWithZeroHomClass : MonoidWithZeroHomClass (M 
   map_zero f := f.map_zero'
 #align monoid_with_zero_hom.monoid_with_zero_hom_class MonoidWithZeroHom.monoidWithZeroHomClass
 
+instance [Subsingleton M] : Subsingleton (M →*₀ N) := .of_oneHomClass
+
 /-- Turn an element of a type `F` satisfying `MonoidWithZeroHomClass F M N` into an actual
 `MonoidWithZeroHom`. This is declared as the default coercion from `F` to `M →*₀ N`. -/
 @[coe]
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
@@ -63,13 +63,13 @@ MonoidHom, AddMonoidHom
 -/
 
 
-variable {α β M N P : Type _}
+variable {α β M N P : Type*}
 
 -- monoids
-variable {G : Type _} {H : Type _}
+variable {G : Type*} {H : Type*}
 
 -- groups
-variable {F : Type _}
+variable {F : Type*}
 
 -- homs
 section Zero
@@ -77,11 +77,11 @@ section Zero
 /-- `ZeroHom M N` is the type of functions `M → N` that preserve zero.
 
 When possible, instead of parametrizing results over `(f : ZeroHom M N)`,
-you should parametrize over `(F : Type _) [ZeroHomClass F M N] (f : F)`.
+you should parametrize over `(F : Type*) [ZeroHomClass F M N] (f : F)`.
 
 When you extend this structure, make sure to also extend `ZeroHomClass`.
 -/
-structure ZeroHom (M : Type _) (N : Type _) [Zero M] [Zero N] where
+structure ZeroHom (M : Type*) (N : Type*) [Zero M] [Zero N] where
   /-- The underlying function -/
   toFun : M → N
   /-- The proposition that the function preserves 0 -/
@@ -93,7 +93,7 @@ structure ZeroHom (M : Type _) (N : Type _) [Zero M] [Zero N] where
 
 You should extend this typeclass when you extend `ZeroHom`.
 -/
-class ZeroHomClass (F : Type _) (M N : outParam (Type _)) [Zero M] [Zero N]
+class ZeroHomClass (F : Type*) (M N : outParam (Type*)) [Zero M] [Zero N]
   extends FunLike F M fun _ => N where
   /-- The proposition that the function preserves 0 -/
   map_zero : ∀ f : F, f 0 = 0
@@ -124,11 +124,11 @@ section Add
 /-- `AddHom M N` is the type of functions `M → N` that preserve addition.
 
 When possible, instead of parametrizing results over `(f : AddHom M N)`,
-you should parametrize over `(F : Type _) [AddHomClass F M N] (f : F)`.
+you should parametrize over `(F : Type*) [AddHomClass F M N] (f : F)`.
 
 When you extend this structure, make sure to extend `AddHomClass`.
 -/
-structure AddHom (M : Type _) (N : Type _) [Add M] [Add N] where
+structure AddHom (M : Type*) (N : Type*) [Add M] [Add N] where
   /-- The underlying function -/
   toFun : M → N
   /-- The proposition that the function preserves addition -/
@@ -138,7 +138,7 @@ structure AddHom (M : Type _) (N : Type _) [Add M] [Add N] where
 /-- `AddHomClass F M N` states that `F` is a type of addition-preserving homomorphisms.
 You should declare an instance of this typeclass when you extend `AddHom`.
 -/
-class AddHomClass (F : Type _) (M N : outParam (Type _)) [Add M] [Add N]
+class AddHomClass (F : Type*) (M N : outParam (Type*)) [Add M] [Add N]
   extends FunLike F M fun _ => N where
   /-- The proposition that the function preserves addition -/
   map_add : ∀ (f : F) (x y : M), f (x + y) = f x + f y
@@ -154,11 +154,11 @@ section add_zero
 `AddMonoidHom` is also used for group homomorphisms.
 
 When possible, instead of parametrizing results over `(f : M →+ N)`,
-you should parametrize over `(F : Type _) [AddMonoidHomClass F M N] (f : F)`.
+you should parametrize over `(F : Type*) [AddMonoidHomClass F M N] (f : F)`.
 
 When you extend this structure, make sure to extend `AddMonoidHomClass`.
 -/
-structure AddMonoidHom (M : Type _) (N : Type _) [AddZeroClass M] [AddZeroClass N] extends
+structure AddMonoidHom (M : Type*) (N : Type*) [AddZeroClass M] [AddZeroClass N] extends
   ZeroHom M N, AddHom M N
 #align add_monoid_hom AddMonoidHom
 
@@ -173,7 +173,7 @@ homomorphisms.
 
 You should also extend this typeclass when you extend `AddMonoidHom`.
 -/
-class AddMonoidHomClass (F : Type _) (M N : outParam (Type _)) [AddZeroClass M] [AddZeroClass N]
+class AddMonoidHomClass (F : Type*) (M N : outParam (Type*)) [AddZeroClass M] [AddZeroClass N]
   extends AddHomClass F M N, ZeroHomClass F M N
 #align add_monoid_hom_class AddMonoidHomClass
 
@@ -187,12 +187,12 @@ variable [One M] [One N]
 /-- `OneHom M N` is the type of functions `M → N` that preserve one.
 
 When possible, instead of parametrizing results over `(f : OneHom M N)`,
-you should parametrize over `(F : Type _) [OneHomClass F M N] (f : F)`.
+you should parametrize over `(F : Type*) [OneHomClass F M N] (f : F)`.
 
 When you extend this structure, make sure to also extend `OneHomClass`.
 -/
 @[to_additive]
-structure OneHom (M : Type _) (N : Type _) [One M] [One N] where
+structure OneHom (M : Type*) (N : Type*) [One M] [One N] where
   /-- The underlying function -/
   toFun : M → N
   /-- The proposition that the function preserves 1 -/
@@ -203,7 +203,7 @@ structure OneHom (M : Type _) (N : Type _) [One M] [One N] where
 You should extend this typeclass when you extend `OneHom`.
 -/
 @[to_additive]
-class OneHomClass (F : Type _) (M N : outParam (Type _)) [One M] [One N]
+class OneHomClass (F : Type*) (M N : outParam (Type*)) [One M] [One N]
   extends FunLike F M fun _ => N where
   /-- The proposition that the function preserves 1 -/
   map_one : ∀ f : F, f 1 = 1
@@ -230,13 +230,13 @@ theorem map_eq_one_iff [OneHomClass F M N] (f : F) (hf : Function.Injective f) {
 #align map_eq_zero_iff map_eq_zero_iff
 
 @[to_additive]
-theorem map_ne_one_iff {R S F : Type _} [One R] [One S] [OneHomClass F R S] (f : F)
+theorem map_ne_one_iff {R S F : Type*} [One R] [One S] [OneHomClass F R S] (f : F)
   (hf : Function.Injective f) {x : R} : f x ≠ 1 ↔ x ≠ 1 := (map_eq_one_iff f hf).not
 #align map_ne_one_iff map_ne_one_iff
 #align map_ne_zero_iff map_ne_zero_iff
 
 @[to_additive]
-theorem ne_one_of_map {R S F : Type _} [One R] [One S] [OneHomClass F R S] {f : F} {x : R}
+theorem ne_one_of_map {R S F : Type*} [One R] [One S] [OneHomClass F R S] {f : F} {x : R}
   (hx : f x ≠ 1) : x ≠ 1 := ne_of_apply_ne f <| ne_of_ne_of_eq hx (map_one f).symm
 #align ne_one_of_map ne_one_of_map
 #align ne_zero_of_map ne_zero_of_map
@@ -272,11 +272,11 @@ stands for "non-unital" because it is intended to match the notation for `NonUni
 `NonUnitalRingHom`, so a `MulHom` is a non-unital monoid hom.
 
 When possible, instead of parametrizing results over `(f : M →ₙ* N)`,
-you should parametrize over `(F : Type _) [MulHomClass F M N] (f : F)`.
+you should parametrize over `(F : Type*) [MulHomClass F M N] (f : F)`.
 When you extend this structure, make sure to extend `MulHomClass`.
 -/
 @[to_additive]
-structure MulHom (M : Type _) (N : Type _) [Mul M] [Mul N] where
+structure MulHom (M : Type*) (N : Type*) [Mul M] [Mul N] where
   /-- The underlying function -/
   toFun : M → N
   /-- The proposition that the function preserves multiplication -/
@@ -291,7 +291,7 @@ infixr:25 " →ₙ* " => MulHom
 You should declare an instance of this typeclass when you extend `MulHom`.
 -/
 @[to_additive]
-class MulHomClass (F : Type _) (M N : outParam (Type _)) [Mul M] [Mul N]
+class MulHomClass (F : Type*) (M N : outParam (Type*)) [Mul M] [Mul N]
   extends FunLike F M fun _ => N where
   /-- The proposition that the function preserves multiplication -/
   map_mul : ∀ (f : F) (x y : M), f (x * y) = f x * f y
@@ -342,12 +342,12 @@ variable [MulOneClass M] [MulOneClass N]
 `MonoidHom` is also used for group homomorphisms.
 
 When possible, instead of parametrizing results over `(f : M →+ N)`,
-you should parametrize over `(F : Type _) [MonoidHomClass F M N] (f : F)`.
+you should parametrize over `(F : Type*) [MonoidHomClass F M N] (f : F)`.
 
 When you extend this structure, make sure to extend `MonoidHomClass`.
 -/
 @[to_additive]
-structure MonoidHom (M : Type _) (N : Type _) [MulOneClass M] [MulOneClass N] extends
+structure MonoidHom (M : Type*) (N : Type*) [MulOneClass M] [MulOneClass N] extends
   OneHom M N, M →ₙ* N
 #align monoid_hom MonoidHom
 -- Porting note: remove once `to_additive` is updated
@@ -363,7 +363,7 @@ infixr:25 " →* " => MonoidHom
 /-- `MonoidHomClass F M N` states that `F` is a type of `Monoid`-preserving homomorphisms.
 You should also extend this typeclass when you extend `MonoidHom`. -/
 @[to_additive]
-class MonoidHomClass (F : Type _) (M N : outParam (Type _)) [MulOneClass M] [MulOneClass N]
+class MonoidHomClass (F : Type*) (M N : outParam (Type*)) [MulOneClass M] [MulOneClass N]
   extends MulHomClass F M N, OneHomClass F M N
 #align monoid_hom_class MonoidHomClass
 
@@ -476,11 +476,11 @@ the `MonoidWithZero` structure.
 `MonoidWithZeroHom` is also used for group homomorphisms.
 
 When possible, instead of parametrizing results over `(f : M →*₀ N)`,
-you should parametrize over `(F : Type _) [MonoidWithZeroHomClass F M N] (f : F)`.
+you should parametrize over `(F : Type*) [MonoidWithZeroHomClass F M N] (f : F)`.
 
 When you extend this structure, make sure to extend `MonoidWithZeroHomClass`.
 -/
-structure MonoidWithZeroHom (M : Type _) (N : Type _)
+structure MonoidWithZeroHom (M : Type*) (N : Type*)
   [MulZeroOneClass M] [MulZeroOneClass N] extends ZeroHom M N, MonoidHom M N
 #align monoid_with_zero_hom MonoidWithZeroHom
 
@@ -495,7 +495,7 @@ infixr:25 " →*₀ " => MonoidWithZeroHom
 
 You should also extend this typeclass when you extend `MonoidWithZeroHom`.
 -/
-class MonoidWithZeroHomClass (F : Type _) (M N : outParam (Type _)) [MulZeroOneClass M]
+class MonoidWithZeroHomClass (F : Type*) (M N : outParam (Type*)) [MulZeroOneClass M]
   [MulZeroOneClass N] extends MonoidHomClass F M N, ZeroHomClass F M N
 #align monoid_with_zero_hom_class MonoidWithZeroHomClass
 
@@ -989,7 +989,7 @@ end DivisionCommMonoid
 
 /-- The identity map from a type with 1 to itself. -/
 @[to_additive (attr := simps)]
-def OneHom.id (M : Type _) [One M] : OneHom M M where
+def OneHom.id (M : Type*) [One M] : OneHom M M where
   toFun x := x
   map_one' := rfl
 #align one_hom.id OneHom.id
@@ -999,7 +999,7 @@ def OneHom.id (M : Type _) [One M] : OneHom M M where
 
 /-- The identity map from a type with multiplication to itself. -/
 @[to_additive (attr := simps)]
-def MulHom.id (M : Type _) [Mul M] : M →ₙ* M where
+def MulHom.id (M : Type*) [Mul M] : M →ₙ* M where
   toFun x := x
   map_mul' _ _ := rfl
 #align mul_hom.id MulHom.id
@@ -1009,7 +1009,7 @@ def MulHom.id (M : Type _) [Mul M] : M →ₙ* M where
 
 /-- The identity map from a monoid to itself. -/
 @[to_additive (attr := simps)]
-def MonoidHom.id (M : Type _) [MulOneClass M] : M →* M where
+def MonoidHom.id (M : Type*) [MulOneClass M] : M →* M where
   toFun x := x
   map_one' := rfl
   map_mul' _ _ := rfl
@@ -1020,7 +1020,7 @@ def MonoidHom.id (M : Type _) [MulOneClass M] : M →* M where
 
 /-- The identity map from a `MonoidWithZero` to itself. -/
 @[simps]
-def MonoidWithZeroHom.id (M : Type _) [MulZeroOneClass M] : M →*₀ M where
+def MonoidWithZeroHom.id (M : Type*) [MulZeroOneClass M] : M →*₀ M where
   toFun x := x
   map_zero' := rfl
   map_one' := rfl
@@ -1128,26 +1128,26 @@ theorem MonoidWithZeroHom.comp_apply [MulZeroOneClass M] [MulZeroOneClass N] [Mu
 
 /-- Composition of monoid homomorphisms is associative. -/
 @[to_additive "Composition of additive monoid homomorphisms is associative."]
-theorem OneHom.comp_assoc {Q : Type _} [One M] [One N] [One P] [One Q]
+theorem OneHom.comp_assoc {Q : Type*} [One M] [One N] [One P] [One Q]
   (f : OneHom M N) (g : OneHom N P) (h : OneHom P Q) :
   (h.comp g).comp f = h.comp (g.comp f) := rfl
 #align one_hom.comp_assoc OneHom.comp_assoc
 #align zero_hom.comp_assoc ZeroHom.comp_assoc
 
 @[to_additive]
-theorem MulHom.comp_assoc {Q : Type _} [Mul M] [Mul N] [Mul P] [Mul Q]
+theorem MulHom.comp_assoc {Q : Type*} [Mul M] [Mul N] [Mul P] [Mul Q]
   (f : M →ₙ* N) (g : N →ₙ* P) (h : P →ₙ* Q) : (h.comp g).comp f = h.comp (g.comp f) := rfl
 #align mul_hom.comp_assoc MulHom.comp_assoc
 #align add_hom.comp_assoc AddHom.comp_assoc
 
 @[to_additive]
-theorem MonoidHom.comp_assoc {Q : Type _} [MulOneClass M] [MulOneClass N] [MulOneClass P]
+theorem MonoidHom.comp_assoc {Q : Type*} [MulOneClass M] [MulOneClass N] [MulOneClass P]
   [MulOneClass Q] (f : M →* N) (g : N →* P) (h : P →* Q) :
   (h.comp g).comp f = h.comp (g.comp f) := rfl
 #align monoid_hom.comp_assoc MonoidHom.comp_assoc
 #align add_monoid_hom.comp_assoc AddMonoidHom.comp_assoc
 
-theorem MonoidWithZeroHom.comp_assoc {Q : Type _} [MulZeroOneClass M] [MulZeroOneClass N]
+theorem MonoidWithZeroHom.comp_assoc {Q : Type*} [MulZeroOneClass M] [MulZeroOneClass N]
   [MulZeroOneClass P] [MulZeroOneClass Q] (f : M →*₀ N) (g : N →*₀ P) (h : P →*₀ Q) :
   (h.comp g).comp f = h.comp (g.comp f) := rfl
 #align monoid_with_zero_hom.comp_assoc MonoidWithZeroHom.comp_assoc
@@ -1337,7 +1337,7 @@ end Monoid
 
 namespace AddMonoid
 
-variable (A : Type _) [AddZeroClass A]
+variable (A : Type*) [AddZeroClass A]
 
 /-- The monoid of endomorphisms. -/
 protected def End := A →+ A
@@ -1585,7 +1585,7 @@ def mk' (f : M → G) (map_mul : ∀ a b : M, f (a * b) = f a * f b) : M →* G
   "Makes an additive group homomorphism from a proof that the map preserves
   the operation `fun a b => a + -b`. See also `AddMonoidHom.ofMapSub` for a version using
   `fun a b => a - b`."]
-def ofMapMulInv {H : Type _} [Group H] (f : G → H)
+def ofMapMulInv {H : Type*} [Group H] (f : G → H)
   (map_div : ∀ a b : G, f (a * b⁻¹) = f a * (f b)⁻¹) : G →* H :=
   (mk' f) fun x y =>
     calc
@@ -1598,7 +1598,7 @@ def ofMapMulInv {H : Type _} [Group H] (f : G → H)
 #align add_monoid_hom.of_map_add_neg AddMonoidHom.ofMapAddNeg
 
 @[to_additive (attr := simp)]
-theorem coe_of_map_mul_inv {H : Type _} [Group H] (f : G → H)
+theorem coe_of_map_mul_inv {H : Type*} [Group H] (f : G → H)
   (map_div : ∀ a b : G, f (a * b⁻¹) = f a * (f b)⁻¹) :
   ↑(ofMapMulInv f map_div) = f := rfl
 #align monoid_hom.coe_of_map_mul_inv MonoidHom.coe_of_map_mul_inv
@@ -1606,13 +1606,13 @@ theorem coe_of_map_mul_inv {H : Type _} [Group H] (f : G → H)
 
 /-- Define a morphism of additive groups given a map which respects ratios. -/
 @[to_additive "Define a morphism of additive groups given a map which respects difference."]
-def ofMapDiv {H : Type _} [Group H] (f : G → H) (hf : ∀ x y, f (x / y) = f x / f y) : G →* H :=
+def ofMapDiv {H : Type*} [Group H] (f : G → H) (hf : ∀ x y, f (x / y) = f x / f y) : G →* H :=
   ofMapMulInv f (by simpa only [div_eq_mul_inv] using hf)
 #align monoid_hom.of_map_div MonoidHom.ofMapDiv
 #align add_monoid_hom.of_map_sub AddMonoidHom.ofMapSub
 
 @[to_additive (attr := simp)]
-theorem coe_of_map_div {H : Type _} [Group H] (f : G → H) (hf : ∀ x y, f (x / y) = f x / f y) :
+theorem coe_of_map_div {H : Type*} [Group H] (f : G → H) (hf : ∀ x y, f (x / y) = f x / f y) :
   ↑(ofMapDiv f hf) = f := rfl
 #align monoid_hom.coe_of_map_div MonoidHom.coe_of_map_div
 #align add_monoid_hom.coe_of_map_sub AddMonoidHom.coe_of_map_sub
chore: ensure all instances referred to directly have explicit names (#6423)

Per https://github.com/leanprover/lean4/issues/2343, we are going to need to change the automatic generation of instance names, as they become too long.

This PR ensures that everywhere in Mathlib that refers to an instance by name, that name is given explicitly, rather than being automatically generated.

There are four exceptions, which are now commented, with links to https://github.com/leanprover/lean4/issues/2343.

This was implemented by running Mathlib against a modified Lean that appended _ᾰ to all automatically generated names, and fixing everything.

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

Diff
@@ -1371,28 +1371,19 @@ end AddMonoid
 end End
 
 /-- `1` is the homomorphism sending all elements to `1`. -/
-@[to_additive]
+@[to_additive "`0` is the homomorphism sending all elements to `0`."]
 instance [One M] [One N] : One (OneHom M N) := ⟨⟨fun _ => 1, rfl⟩⟩
 
 /-- `1` is the multiplicative homomorphism sending all elements to `1`. -/
-@[to_additive]
+@[to_additive "`0` is the additive homomorphism sending all elements to `0`"]
 instance [Mul M] [MulOneClass N] : One (M →ₙ* N) :=
   ⟨⟨fun _ => 1, fun _ _ => (one_mul 1).symm⟩⟩
 
 /-- `1` is the monoid homomorphism sending all elements to `1`. -/
-@[to_additive]
+@[to_additive "`0` is the additive monoid homomorphism sending all elements to `0`."]
 instance [MulOneClass M] [MulOneClass N] : One (M →* N) :=
   ⟨⟨⟨fun _ => 1, rfl⟩, fun _ _ => (one_mul 1).symm⟩⟩
 
-/-- `0` is the homomorphism sending all elements to `0`. -/
-add_decl_doc instZeroZeroHom
-
-/-- `0` is the additive homomorphism sending all elements to `0`. -/
-add_decl_doc instZeroAddHomToAdd
-
-/-- `0` is the additive monoid homomorphism sending all elements to `0`. -/
-add_decl_doc instZeroAddMonoidHom
-
 @[to_additive (attr := simp)]
 theorem OneHom.one_apply [One M] [One N] (x : M) : (1 : OneHom M N) x = 1 := rfl
 #align one_hom.one_apply OneHom.one_apply
@@ -1419,19 +1410,12 @@ theorem OneHom.comp_one [One M] [One N] [One P] (f : OneHom N P) : f.comp (1 : O
 @[to_additive]
 instance [One M] [One N] : Inhabited (OneHom M N) := ⟨1⟩
 
-attribute [nolint docBlame] instInhabitedOneHom
-attribute [nolint docBlame] instInhabitedZeroHom
-
 @[to_additive]
 instance [Mul M] [MulOneClass N] : Inhabited (M →ₙ* N) := ⟨1⟩
 
 @[to_additive]
 instance [MulOneClass M] [MulOneClass N] : Inhabited (M →* N) := ⟨1⟩
 
-attribute [nolint docBlame] instInhabitedAddHomToAdd
-attribute [nolint docBlame] instInhabitedMonoidHom
-attribute [nolint docBlame] instInhabitedAddMonoidHom
-
 -- unlike the other homs, `MonoidWithZeroHom` does not have a `1` or `0`
 instance [MulZeroOneClass M] : Inhabited (M →*₀ M) := ⟨MonoidWithZeroHom.id M⟩
 
@@ -1439,7 +1423,8 @@ namespace MulHom
 
 /-- Given two mul morphisms `f`, `g` to a commutative semigroup, `f * g` is the mul morphism
 sending `x` to `f x * g x`. -/
-@[to_additive]
+@[to_additive "Given two additive morphisms `f`, `g` to an additive commutative semigroup,
+`f + g` is the additive morphism sending `x` to `f x + g x`."]
 instance [Mul M] [CommSemigroup N] : Mul (M →ₙ* N) :=
   ⟨fun f g =>
     { toFun := fun m => f m * g m,
@@ -1448,10 +1433,6 @@ instance [Mul M] [CommSemigroup N] : Mul (M →ₙ* N) :=
         show f (x * y) * g (x * y) = f x * g x * (f y * g y)
         rw [f.map_mul, g.map_mul, ← mul_assoc, ← mul_assoc, mul_right_comm (f x)] }⟩
 
-/-- Given two additive morphisms `f`, `g` to an additive commutative semigroup, `f + g` is the
-additive morphism sending `x` to `f x + g x`. -/
-add_decl_doc AddHom.instAddAddHomToAddToAddSemigroup
-
 @[to_additive (attr := simp)]
 theorem mul_apply {M N} [Mul M] [CommSemigroup N] (f g : M →ₙ* N) (x : M) :
   (f * g) x = f x * g x := rfl
@@ -1638,14 +1619,11 @@ theorem coe_of_map_div {H : Type _} [Group H] (f : G → H) (hf : ∀ x y, f (x
 
 /-- If `f` is a monoid homomorphism to a commutative group, then `f⁻¹` is the homomorphism sending
 `x` to `(f x)⁻¹`. -/
-@[to_additive]
+@[to_additive "If `f` is an additive monoid homomorphism to an additive commutative group,
+then `-f` is the homomorphism sending `x` to `-(f x)`."]
 instance {M G} [MulOneClass M] [CommGroup G] : Inv (M →* G) :=
   ⟨fun f => (mk' fun g => (f g)⁻¹) fun a b => by rw [← mul_inv, f.map_mul]⟩
 
-/-- If `f` is an additive monoid homomorphism to an additive commutative group, then `-f` is the
-homomorphism sending `x` to `-(f x)`. -/
-add_decl_doc AddMonoidHom.instNegAddMonoidHomToAddZeroClassToAddMonoidToSubNegAddMonoidToAddGroup
-
 @[to_additive (attr := simp)]
 theorem inv_apply {M G} [MulOneClass M] [CommGroup G] (f : M →* G) (x : M) :
   f⁻¹ x = (f x)⁻¹ := rfl
@@ -1670,15 +1648,12 @@ theorem comp_inv {M A B} [MulOneClass M] [CommGroup A] [CommGroup B]
 
 /-- If `f` and `g` are monoid homomorphisms to a commutative group, then `f / g` is the homomorphism
 sending `x` to `(f x) / (g x)`. -/
-@[to_additive]
+@[to_additive "If `f` and `g` are monoid homomorphisms to an additive commutative group,
+then `f - g` is the homomorphism sending `x` to `(f x) - (g x)`."]
 instance {M G} [MulOneClass M] [CommGroup G] : Div (M →* G) :=
   ⟨fun f g => (mk' fun x => f x / g x) fun a b => by
     simp [div_eq_mul_inv, mul_assoc, mul_left_comm, mul_comm]⟩
 
-/-- If `f` and `g` are monoid homomorphisms to an additive commutative group, then `f - g`
-is the homomorphism sending `x` to `(f x) - (g x)`. -/
-add_decl_doc AddMonoidHom.instSubAddMonoidHomToAddZeroClassToAddMonoidToSubNegAddMonoidToAddGroup
-
 @[to_additive (attr := simp)]
 theorem div_apply {M G} [MulOneClass M] [CommGroup G] (f g : M →* G) (x : M) :
   (f / g) x = f x / g x := rfl
chore: remove 'Ported by' headers (#6018)

Briefly during the port we were adding "Ported by" headers, but only ~60 / 3000 files ended up with such a header.

I propose deleting them.

We could consider adding these uniformly via a script, as part of the great history rewrite...?

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

Diff
@@ -3,7 +3,6 @@ Copyright (c) 2018 Patrick Massot. All rights reserved.
 Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Patrick Massot, Kevin Buzzard, Scott Morrison, Johan Commelin, Chris Hughes,
   Johannes Hölzl, Yury Kudryashov
-Ported by: Winston Yin
 -/
 import Mathlib.Init.CCLemmas
 import Mathlib.Algebra.NeZero
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
@@ -4,11 +4,6 @@ Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Patrick Massot, Kevin Buzzard, Scott Morrison, Johan Commelin, Chris Hughes,
   Johannes Hölzl, Yury Kudryashov
 Ported by: Winston Yin
-
-! This file was ported from Lean 3 source module algebra.hom.group
-! 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.Init.CCLemmas
 import Mathlib.Algebra.NeZero
@@ -16,6 +11,8 @@ import Mathlib.Algebra.Group.Basic
 import Mathlib.Algebra.GroupWithZero.Defs
 import Mathlib.Data.FunLike.Basic
 
+#align_import algebra.hom.group from "leanprover-community/mathlib"@"a148d797a1094ab554ad4183a4ad6f130358ef64"
+
 /-!
 # Monoid and group homomorphisms
 
chore: cleanup whitespace (#5988)

Grepping for [^ .:{-] [^ :] and reviewing the results. Once I started I couldn't stop. :-)

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

Diff
@@ -23,7 +23,7 @@ This file defines the bundled structures for monoid and group homomorphisms. Nam
 `MonoidHom` (resp., `AddMonoidHom`) to be bundled homomorphisms between multiplicative (resp.,
 additive) monoids or groups.
 
-We also define coercion to a function, and  usual operations: composition, identity homomorphism,
+We also define coercion to a function, and usual operations: composition, identity homomorphism,
 pointwise multiplication and pointwise inversion.
 
 This file also defines the lesser-used (and notation-less) homomorphism types which are used as
style: Init.CcLemmas -> Init.CCLemmas (#5886)
Diff
@@ -10,7 +10,7 @@ Ported by: Winston Yin
 ! Please do not edit these lines, except to modify the commit id
 ! if you have ported upstream changes.
 -/
-import Mathlib.Init.CcLemmas
+import Mathlib.Init.CCLemmas
 import Mathlib.Algebra.NeZero
 import Mathlib.Algebra.Group.Basic
 import Mathlib.Algebra.GroupWithZero.Defs
chore: fix grammar 1/3 (#5001)

All of these are doc fixes

Diff
@@ -1032,10 +1032,10 @@ def MonoidWithZeroHom.id (M : Type _) [MulZeroOneClass M] : M →*₀ M where
 #align monoid_with_zero_hom.id MonoidWithZeroHom.id
 #align monoid_with_zero_hom.id_apply MonoidWithZeroHom.id_apply
 
-/-- The identity map from an type with zero to itself. -/
+/-- The identity map from a type with zero to itself. -/
 add_decl_doc ZeroHom.id
 
-/-- The identity map from an type with addition to itself. -/
+/-- The identity map from a type with addition to itself. -/
 add_decl_doc AddHom.id
 
 /-- The identity map from an additive monoid to itself. -/
@@ -1079,7 +1079,7 @@ def MonoidWithZeroHom.comp [MulZeroOneClass M] [MulZeroOneClass N] [MulZeroOneCl
 /-- Composition of `ZeroHom`s as a `ZeroHom`. -/
 add_decl_doc ZeroHom.comp
 
-/-- Composition of `AddHom`s as a `AddHom`. -/
+/-- Composition of `AddHom`s as an `AddHom`. -/
 add_decl_doc AddHom.comp
 
 /-- Composition of additive monoid morphisms as an additive monoid morphism. -/
chore: formatting issues (#4947)

Co-authored-by: Scott Morrison <scott.morrison@anu.edu.au> Co-authored-by: Parcly Taxel <reddeloostw@gmail.com>

Diff
@@ -395,7 +395,7 @@ attribute [to_additive existing] MonoidHomClass.toOneHomClass
 "Turn an element of a type `F` satisfying `AddMonoidHomClass F M N` into an
 actual `MonoidHom`. This is declared as the default coercion from `F` to `M →+ N`."]
 def MonoidHomClass.toMonoidHom [MonoidHomClass F M N] (f : F) : M →* N :=
-{ (f : M →ₙ* N), (f : OneHom M N) with }
+  { (f : M →ₙ* N), (f : OneHom M N) with }
 
 /-- Any type satisfying `MonoidHomClass` can be cast into `MonoidHom` via
 `MonoidHomClass.toMonoidHom`. -/
@@ -520,7 +520,7 @@ instance MonoidWithZeroHom.monoidWithZeroHomClass : MonoidWithZeroHomClass (M 
 `MonoidWithZeroHom`. This is declared as the default coercion from `F` to `M →*₀ N`. -/
 @[coe]
 def MonoidWithZeroHomClass.toMonoidWithZeroHom [MonoidWithZeroHomClass F M N] (f : F) : M →*₀ N :=
-{ (f : M →* N), (f : ZeroHom M N) with }
+  { (f : M →* N), (f : ZeroHom M N) with }
 
 /-- Any type satisfying `MonoidWithZeroHomClass` can be cast into `MonoidWithZeroHom` via
 `MonoidWithZeroHomClass.toMonoidWithZeroHom`. -/
chore: fix many typos (#4967)

These are all doc fixes

Diff
@@ -301,7 +301,7 @@ class MulHomClass (F : Type _) (M N : outParam (Type _)) [Mul M] [Mul N]
   map_mul : ∀ (f : F) (x y : M), f (x * y) = f x * f y
 #align mul_hom_class MulHomClass
 
-/-- `MulHom` is a type of multiplication-preseving homomorphisms -/
+/-- `MulHom` is a type of multiplication-preserving homomorphisms -/
 @[to_additive "`AddHom` is a type of addition-preserving homomorphisms"]
 instance MulHom.mulHomClass : MulHomClass (M →ₙ* N) M N where
   coe := MulHom.toFun
@@ -325,7 +325,7 @@ def MulHomClass.toMulHom [MulHomClass F M N] (f : F) : M →ₙ* N where
   toFun := f
   map_mul' := map_mul f
 
-/-- Any type satisfying `MulHomCLass` can be cast into `MulHom` via `MulHomClass.toMulHom`. -/
+/-- Any type satisfying `MulHomClass` can be cast into `MulHom` via `MulHomClass.toMulHom`. -/
 @[to_additive "Any type satisfying `AddHomClass` can be cast into `AddHom` via
 `AddHomClass.toAddHom`."]
 instance [MulHomClass F M N] : CoeTC F (M →ₙ* N) :=
perf: improve performance of to_additive (#3632)
  • applyReplacementFun now treats applications f x_1 ... x_n as atomic, and recurses directly into f and x_i (before it recursed on the partial appliations f x_1 ... x_j)
  • I had to reimplement the way to_additive reorders arguments, so at the same time I also made it more flexible. We can now reorder with an arbitrary permutation, and you have to specify this by providing a permutation using cycle notation (e.g. (reorder := 1 2 3, 8 9) means we're permuting the first three arguments and swapping arguments 8 and 9). This implements the first item of #1074.
  • additiveTest now memorizes the test on previously-visited subexpressions. Thanks to @kmill for this suggestion!

The performance on (one of) the slowest declaration(s) to additivize (MonoidLocalization.lift) is summarized below (note: dsimp only refers to adding a single dsimp only tactic in the declaration, which was done in #3580)

original: 27400ms
better applyReplacementFun: 1550ms
better applyReplacementFun + better additiveTest: 176ms

dsimp only: 6710ms
better applyReplacementFun + dsimp only: 425ms
better applyReplacementFun + better additiveTest + dsimp only: 128ms
Diff
@@ -444,7 +444,7 @@ theorem map_div [Group G] [DivisionMonoid H] [MonoidHomClass F G H] (f : F) :
 #align map_div map_div
 #align map_sub map_sub
 
-@[to_additive (attr := simp) (reorder := 8)]
+@[to_additive (attr := simp) (reorder := 8 9)]
 theorem map_pow [Monoid G] [Monoid H] [MonoidHomClass F G H] (f : F) (a : G) :
   ∀ n : ℕ, f (a ^ n) = f a ^ n
   | 0 => by rw [pow_zero, pow_zero, map_one]
@@ -461,7 +461,7 @@ theorem map_zpow' [DivInvMonoid G] [DivInvMonoid H] [MonoidHomClass F G H]
 #align map_zsmul' map_zsmul'
 
 /-- Group homomorphisms preserve integer power. -/
-@[to_additive (attr := simp) (reorder := 8)
+@[to_additive (attr := simp) (reorder := 8 9)
 "Additive group homomorphisms preserve integer scaling."]
 theorem map_zpow [Group G] [DivisionMonoid H] [MonoidHomClass F G H]
   (f : F) (g : G) (n : ℤ) : f (g ^ n) = f g ^ n := map_zpow' f (map_inv f) g n
chore: fix #align lines (#3640)

This PR fixes two things:

  • Most align statements for definitions and theorems and instances that are separated by two newlines from the relevant declaration (s/\n\n#align/\n#align). This is often seen in the mathport output after ending calc blocks.
  • All remaining more-than-one-line #align statements. (This was needed for a script I wrote for #3630.)
Diff
@@ -1617,7 +1617,6 @@ def ofMapMulInv {H : Type _} [Group H] (f : G → H)
       _ = f x * f y := by
         { simp only [map_div]
           simp only [mul_right_inv, one_mul, inv_inv] }
-
 #align monoid_hom.of_map_mul_inv MonoidHom.ofMapMulInv
 #align add_monoid_hom.of_map_add_neg AddMonoidHom.ofMapAddNeg
 
chore: bump to nightly-2023-04-11 (#3139)
Diff
@@ -544,7 +544,7 @@ attribute [coe] AddMonoidHom.toZeroHom
 
 /-- `MonoidHom` down-cast to a `OneHom`, forgetting the multiplicative property. -/
 @[to_additive "`AddMonoidHom` down-cast to a `ZeroHom`, forgetting the additive property"]
-instance MonoidHom.coeToOneHom {_ : MulOneClass M} {_ : MulOneClass N} :
+instance MonoidHom.coeToOneHom [MulOneClass M] [MulOneClass N] :
   Coe (M →* N) (OneHom M N) := ⟨MonoidHom.toOneHom⟩
 #align monoid_hom.has_coe_to_one_hom MonoidHom.coeToOneHom
 #align add_monoid_hom.has_coe_to_zero_hom AddMonoidHom.coeToZeroHom
@@ -554,7 +554,7 @@ attribute [coe] AddMonoidHom.toAddHom
 
 /-- `MonoidHom` down-cast to a `MulHom`, forgetting the 1-preserving property. -/
 @[to_additive "`AddMonoidHom` down-cast to an `AddHom`, forgetting the 0-preserving property."]
-instance MonoidHom.coeToMulHom {_ : MulOneClass M} {_ : MulOneClass N} :
+instance MonoidHom.coeToMulHom [MulOneClass M] [MulOneClass N] :
   Coe (M →* N) (M →ₙ* N) := ⟨MonoidHom.toMulHom⟩
 #align monoid_hom.has_coe_to_mul_hom MonoidHom.coeToMulHom
 #align add_monoid_hom.has_coe_to_add_hom AddMonoidHom.coeToAddHom
@@ -562,14 +562,14 @@ instance MonoidHom.coeToMulHom {_ : MulOneClass M} {_ : MulOneClass N} :
 attribute [coe] MonoidWithZeroHom.toMonoidHom
 
 /-- `MonoidWithZeroHom` down-cast to a `MonoidHom`, forgetting the 0-preserving property. -/
-instance MonoidWithZeroHom.coeToMonoidHom {_ : MulZeroOneClass M} {_ : MulZeroOneClass N} :
+instance MonoidWithZeroHom.coeToMonoidHom [MulZeroOneClass M] [MulZeroOneClass N] :
   Coe (M →*₀ N) (M →* N) := ⟨MonoidWithZeroHom.toMonoidHom⟩
 #align monoid_with_zero_hom.has_coe_to_monoid_hom MonoidWithZeroHom.coeToMonoidHom
 
 attribute [coe] MonoidWithZeroHom.toZeroHom
 
 /-- `MonoidWithZeroHom` down-cast to a `ZeroHom`, forgetting the monoidal property. -/
-instance MonoidWithZeroHom.coeToZeroHom {_ : MulZeroOneClass M} {_ : MulZeroOneClass N} :
+instance MonoidWithZeroHom.coeToZeroHom [MulZeroOneClass M] [MulZeroOneClass N] :
   Coe (M →*₀ N) (ZeroHom M N) := ⟨MonoidWithZeroHom.toZeroHom⟩
 #align monoid_with_zero_hom.has_coe_to_zero_hom MonoidWithZeroHom.coeToZeroHom
 
@@ -804,7 +804,7 @@ equalities. -/
 @[to_additive
   "Copy of a `ZeroHom` with a new `toFun` equal to the old one. Useful to fix
   definitional equalities."]
-protected def OneHom.copy {_ : One M} {_ : One N} (f : OneHom M N) (f' : M → N) (h : f' = f) :
+protected def OneHom.copy [One M] [One N] (f : OneHom M N) (f' : M → N) (h : f' = f) :
   OneHom M N where
   toFun := f'
   map_one' := h.symm ▸ f.map_one'
@@ -830,7 +830,7 @@ equalities. -/
 @[to_additive
   "Copy of an `AddHom` with a new `toFun` equal to the old one. Useful to fix
   definitional equalities."]
-protected def MulHom.copy {_ : Mul M} {_ : Mul N} (f : M →ₙ* N) (f' : M → N) (h : f' = f) :
+protected def MulHom.copy [Mul M] [Mul N] (f : M →ₙ* N) (f' : M → N) (h : f' = f) :
   M →ₙ* N where
   toFun := f'
   map_mul' := h.symm ▸ f.map_mul'
@@ -856,7 +856,7 @@ definitional equalities. -/
 @[to_additive
   "Copy of an `AddMonoidHom` with a new `toFun` equal to the old one. Useful to fix
   definitional equalities."]
-protected def MonoidHom.copy {_ : MulOneClass M} {_ : MulOneClass N} (f : M →* N) (f' : M → N)
+protected def MonoidHom.copy [MulOneClass M] [MulOneClass N] (f : M →* N) (f' : M → N)
   (h : f' = f) : M →* N :=
   { f.toOneHom.copy f' h, f.toMulHom.copy f' h with }
 #align monoid_hom.copy MonoidHom.copy
@@ -878,7 +878,7 @@ theorem MonoidHom.copy_eq {_ : MulOneClass M} {_ : MulOneClass N} (f : M →* N)
 
 /-- Copy of a `MonoidHom` with a new `toFun` equal to the old one. Useful to fix
 definitional equalities. -/
-protected def MonoidWithZeroHom.copy {_ : MulZeroOneClass M} {_ : MulZeroOneClass N} (f : M →*₀ N)
+protected def MonoidWithZeroHom.copy [MulZeroOneClass M] [MulZeroOneClass N] (f : M →*₀ N)
   (f' : M → N) (h : f' = f) : M →* N :=
   { f.toZeroHom.copy f' h, f.toMonoidHom.copy f' h with }
 #align monoid_with_zero_hom.copy MonoidWithZeroHom.copy
@@ -940,7 +940,7 @@ add_decl_doc AddMonoidHom.map_add
 
 namespace MonoidHom
 
-variable {_ : MulOneClass M} {_ : MulOneClass N} [MonoidHomClass F M N]
+variable [MulOneClass M] [MulOneClass N] [MonoidHomClass F M N]
 
 /-- Given a monoid homomorphism `f : M →* N` and an element `x : M`, if `x` has a right inverse,
 then `f x` has a right inverse too. For elements invertible on both sides see `IsUnit.map`. -/
@@ -1457,7 +1457,7 @@ additive morphism sending `x` to `f x + g x`. -/
 add_decl_doc AddHom.instAddAddHomToAddToAddSemigroup
 
 @[to_additive (attr := simp)]
-theorem mul_apply {M N} {_ : Mul M} {_ : CommSemigroup N} (f g : M →ₙ* N) (x : M) :
+theorem mul_apply {M N} [Mul M] [CommSemigroup N] (f g : M →ₙ* N) (x : M) :
   (f * g) x = f x * g x := rfl
 #align mul_hom.mul_apply MulHom.mul_apply
 #align add_hom.add_apply AddHom.add_apply
@@ -1485,7 +1485,7 @@ variable [Group G] [CommGroup H]
 /-- Given two monoid morphisms `f`, `g` to a commutative monoid, `f * g` is the monoid morphism
 sending `x` to `f x * g x`. -/
 @[to_additive]
-instance mul {M N} {_ : MulOneClass M} [CommMonoid N] : Mul (M →* N) :=
+instance mul {M N} [MulOneClass M] [CommMonoid N] : Mul (M →* N) :=
   ⟨fun f g =>
     { toFun := fun m => f m * g m,
       map_one' := show f 1 * g 1 = 1 by simp,
@@ -1499,7 +1499,7 @@ instance mul {M N} {_ : MulOneClass M} [CommMonoid N] : Mul (M →* N) :=
 add_decl_doc AddMonoidHom.add
 
 @[to_additive (attr := simp)]
-theorem mul_apply {M N} {_ : MulOneClass M} {_ : CommMonoid N} (f g : M →* N) (x : M) :
+theorem mul_apply {M N} [MulOneClass M] [CommMonoid N] (f g : M →* N) (x : M) :
   (f * g) x = f x * g x := rfl
 #align monoid_hom.mul_apply MonoidHom.mul_apply
 #align add_monoid_hom.add_apply AddMonoidHom.add_apply
@@ -1652,13 +1652,13 @@ homomorphism sending `x` to `-(f x)`. -/
 add_decl_doc AddMonoidHom.instNegAddMonoidHomToAddZeroClassToAddMonoidToSubNegAddMonoidToAddGroup
 
 @[to_additive (attr := simp)]
-theorem inv_apply {M G} {_ : MulOneClass M} {_ : CommGroup G} (f : M →* G) (x : M) :
+theorem inv_apply {M G} [MulOneClass M] [CommGroup G] (f : M →* G) (x : M) :
   f⁻¹ x = (f x)⁻¹ := rfl
 #align monoid_hom.inv_apply MonoidHom.inv_apply
 #align add_monoid_hom.neg_apply AddMonoidHom.neg_apply
 
 @[to_additive (attr := simp)]
-theorem inv_comp {M N A} {_ : MulOneClass M} {_ : MulOneClass N} {_ : CommGroup A}
+theorem inv_comp {M N A} [MulOneClass M] [MulOneClass N] [CommGroup A]
   (φ : N →* A) (ψ : M →* N) : φ⁻¹.comp ψ = (φ.comp ψ)⁻¹ := by
   ext
   simp only [Function.comp_apply, inv_apply, coe_comp]
@@ -1666,7 +1666,7 @@ theorem inv_comp {M N A} {_ : MulOneClass M} {_ : MulOneClass N} {_ : CommGroup
 #align add_monoid_hom.neg_comp AddMonoidHom.neg_comp
 
 @[to_additive (attr := simp)]
-theorem comp_inv {M A B} {_ : MulOneClass M} {_ : CommGroup A} {_ : CommGroup B}
+theorem comp_inv {M A B} [MulOneClass M] [CommGroup A] [CommGroup B]
   (φ : A →* B) (ψ : M →* A) : φ.comp ψ⁻¹ = (φ.comp ψ)⁻¹ := by
   ext
   simp only [Function.comp_apply, inv_apply, map_inv, coe_comp]
@@ -1685,7 +1685,7 @@ is the homomorphism sending `x` to `(f x) - (g x)`. -/
 add_decl_doc AddMonoidHom.instSubAddMonoidHomToAddZeroClassToAddMonoidToSubNegAddMonoidToAddGroup
 
 @[to_additive (attr := simp)]
-theorem div_apply {M G} {_ : MulOneClass M} {_ : CommGroup G} (f g : M →* G) (x : M) :
+theorem div_apply {M G} [MulOneClass M] [CommGroup G] (f g : M →* G) (x : M) :
   (f / g) x = f x / g x := rfl
 #align monoid_hom.div_apply MonoidHom.div_apply
 #align add_monoid_hom.sub_apply AddMonoidHom.sub_apply
@@ -1694,7 +1694,7 @@ end MonoidHom
 
 /-- Given two monoid with zero morphisms `f`, `g` to a commutative monoid, `f * g` is the monoid
 with zero morphism sending `x` to `f x * g x`. -/
-instance {M N} {_ : MulZeroOneClass M} [CommMonoidWithZero N] : Mul (M →*₀ N) :=
+instance [MulZeroOneClass M] [CommMonoidWithZero N] : Mul (M →*₀ N) :=
   ⟨fun f g => { (f * g : M →* N) with
     toFun := fun a => f a * g a,
     map_zero' := by dsimp only []; rw [map_zero, zero_mul] }⟩
feat: sync Algebra.Hom.Group (#3074)
Diff
@@ -6,7 +6,7 @@ Authors: Patrick Massot, Kevin Buzzard, Scott Morrison, Johan Commelin, Chris Hu
 Ported by: Winston Yin
 
 ! This file was ported from Lean 3 source module algebra.hom.group
-! leanprover-community/mathlib commit 8c53048add6ffacdda0b36c4917bfe37e209b0ba
+! leanprover-community/mathlib commit a148d797a1094ab554ad4183a4ad6f130358ef64
 ! Please do not edit these lines, except to modify the commit id
 ! if you have ported upstream changes.
 -/
@@ -811,6 +811,20 @@ protected def OneHom.copy {_ : One M} {_ : One N} (f : OneHom M N) (f' : M → N
 #align one_hom.copy OneHom.copy
 #align zero_hom.copy ZeroHom.copy
 
+@[to_additive (attr := simp)]
+theorem OneHom.coe_copy {_ : One M} {_ : One N} (f : OneHom M N) (f' : M → N) (h : f' = f) :
+    (f.copy f' h) = f' :=
+  rfl
+#align one_hom.coe_copy OneHom.coe_copy
+#align zero_hom.coe_copy ZeroHom.coe_copy
+
+@[to_additive]
+theorem OneHom.coe_copy_eq {_ : One M} {_ : One N} (f : OneHom M N) (f' : M → N) (h : f' = f) :
+    f.copy f' h = f :=
+  FunLike.ext' h
+#align one_hom.coe_copy_eq OneHom.coe_copy_eq
+#align zero_hom.coe_copy_eq ZeroHom.coe_copy_eq
+
 /-- Copy of a `MulHom` with a new `toFun` equal to the old one. Useful to fix definitional
 equalities. -/
 @[to_additive
@@ -823,6 +837,20 @@ protected def MulHom.copy {_ : Mul M} {_ : Mul N} (f : M →ₙ* N) (f' : M →
 #align mul_hom.copy MulHom.copy
 #align add_hom.copy AddHom.copy
 
+@[to_additive (attr := simp)]
+theorem MulHom.coe_copy {_ : Mul M} {_ : Mul N} (f : M →ₙ* N) (f' : M → N) (h : f' = f) :
+    (f.copy f' h) = f' :=
+  rfl
+#align mul_hom.coe_copy MulHom.coe_copy
+#align add_hom.coe_copy AddHom.coe_copy
+
+@[to_additive]
+theorem MulHom.coe_copy_eq {_ : Mul M} {_ : Mul N} (f : M →ₙ* N) (f' : M → N) (h : f' = f) :
+    f.copy f' h = f :=
+  FunLike.ext' h
+#align mul_hom.coe_copy_eq MulHom.coe_copy_eq
+#align add_hom.coe_copy_eq AddHom.coe_copy_eq
+
 /-- Copy of a `MonoidHom` with a new `toFun` equal to the old one. Useful to fix
 definitional equalities. -/
 @[to_additive
@@ -834,6 +862,20 @@ protected def MonoidHom.copy {_ : MulOneClass M} {_ : MulOneClass N} (f : M →*
 #align monoid_hom.copy MonoidHom.copy
 #align add_monoid_hom.copy AddMonoidHom.copy
 
+@[to_additive (attr := simp)]
+theorem MonoidHom.coe_copy {_ : MulOneClass M} {_ : MulOneClass N} (f : M →* N) (f' : M → N)
+    (h : f' = f) : (f.copy f' h) = f' :=
+  rfl
+#align monoid_hom.coe_copy MonoidHom.coe_copy
+#align add_monoid_hom.coe_copy AddMonoidHom.coe_copy
+
+@[to_additive]
+theorem MonoidHom.copy_eq {_ : MulOneClass M} {_ : MulOneClass N} (f : M →* N) (f' : M → N)
+    (h : f' = f) : f.copy f' h = f :=
+  FunLike.ext' h
+#align monoid_hom.copy_eq MonoidHom.copy_eq
+#align add_monoid_hom.copy_eq AddMonoidHom.copy_eq
+
 /-- Copy of a `MonoidHom` with a new `toFun` equal to the old one. Useful to fix
 definitional equalities. -/
 protected def MonoidWithZeroHom.copy {_ : MulZeroOneClass M} {_ : MulZeroOneClass N} (f : M →*₀ N)
@@ -841,6 +883,17 @@ protected def MonoidWithZeroHom.copy {_ : MulZeroOneClass M} {_ : MulZeroOneClas
   { f.toZeroHom.copy f' h, f.toMonoidHom.copy f' h with }
 #align monoid_with_zero_hom.copy MonoidWithZeroHom.copy
 
+@[simp]
+theorem MonoidWithZeroHom.coe_copy {_ : MulZeroOneClass M} {_ : MulZeroOneClass N} (f : M →*₀ N)
+    (f' : M → N) (h : f' = f) : (f.copy f' h) = f' :=
+  rfl
+#align monoid_with_zero_hom.coe_copy MonoidWithZeroHom.coe_copy
+
+theorem MonoidWithZeroHom.copy_eq {_ : MulZeroOneClass M} {_ : MulZeroOneClass N} (f : M →*₀ N)
+    (f' : M → N) (h : f' = f) : f.copy f' h = f :=
+  FunLike.ext' h
+#align monoid_with_zero_hom.copy_eq MonoidWithZeroHom.copy_eq
+
 @[to_additive]
 protected theorem OneHom.map_one [One M] [One N] (f : OneHom M N) : f 1 = 1 :=
   f.map_one'
feat: initialize_simps_projections automatically finds coercions (#2045)
  • initialize_simps_projections automatically find coercions if there is a Funlike or SetLike instance defined by one of the projections.
  • Some improvements compared to Lean 3:
    • Find coercions even if it is defined by a field of a parent structure
    • Find SetLike coercions

Not yet implemented (and rarely - if ever - used in mathlib3):

  • Automatic custom projections for algebraic notation (like +,*,...)

Co-authored-by: Johan Commelin <johan@commelin.net>

Diff
@@ -221,10 +221,6 @@ instance OneHom.oneHomClass : OneHomClass (OneHom M N) M N where
 #align one_hom.one_hom_class OneHom.oneHomClass
 #align zero_hom.zero_hom_class ZeroHom.zeroHomClass
 
-/-- See Note [custom simps projection] -/
-@[to_additive "See Note custom simps projection"]
-def OneHom.Simps.apply (f : OneHom M N) : M → N := f
-
 @[to_additive (attr := simp)]
 theorem map_one [OneHomClass F M N] (f : F) : f 1 = 1 :=
   OneHomClass.map_one f
@@ -314,10 +310,6 @@ instance MulHom.mulHomClass : MulHomClass (M →ₙ* N) M N where
 #align mul_hom.mul_hom_class MulHom.mulHomClass
 #align add_hom.add_hom_class AddHom.addHomClass
 
-/-- See Note [custom simps projection] -/
-@[to_additive "See Note custom simps projection"]
-def MulHom.Simps.apply (f : M →ₙ* N) : M → N := f
-
 @[to_additive (attr := simp)]
 theorem map_mul [MulHomClass F M N] (f : F) (x y : M) : f (x * y) = f x * f y :=
   MulHomClass.map_mul f x y
@@ -393,10 +385,6 @@ instance MonoidHom.monoidHomClass : MonoidHomClass (M →* N) M N where
 #align monoid_hom.monoid_hom_class MonoidHom.monoidHomClass
 #align add_monoid_hom.add_monoid_hom_class AddMonoidHom.addMonoidHomClass
 
-/-- See Note [custom simps projection] -/
-@[to_additive "See Note custom simps projection"]
-def MonoidHom.Simps.apply (f : M →* N) : M → N := f
-
 -- Porting note: we need to add an extra `to_additive`.
 -- This is waiting on https://github.com/leanprover-community/mathlib4/issues/660
 attribute [to_additive existing] MonoidHomClass.toOneHomClass
@@ -528,9 +516,6 @@ instance MonoidWithZeroHom.monoidWithZeroHomClass : MonoidWithZeroHomClass (M 
   map_zero f := f.map_zero'
 #align monoid_with_zero_hom.monoid_with_zero_hom_class MonoidWithZeroHom.monoidWithZeroHomClass
 
-/-- See Note [custom simps projection] -/
-def MonoidWithZeroHom.Simps.apply (f : M →*₀ N) : M → N := f
-
 /-- Turn an element of a type `F` satisfying `MonoidWithZeroHomClass F M N` into an actual
 `MonoidWithZeroHom`. This is declared as the default coercion from `F` to `M →*₀ N`. -/
 @[coe]
feat: simps uses fields of parent structures (#2042)
  • initialize_simps_projections now by default generates all projections of all parent structures, and doesn't generate the projections to those parent structures.
  • You can also rename a nested projection directly, without having to specify intermediate parent structures
  • Added the option to turn the default behavior off (done in e.g. TwoPointed)

Internal changes:

  • Move most declarations to the Simps namespace, and shorten their names
  • Restructure ParsedProjectionData to avoid the bug reported here (and to another bug where it seemed that the wrong data was inserted in ParsedProjectionData, but it was hard to minimize because of all the crashes). If we manage to fix the bug in that Zulip thread, I'll see if I can track down the other bug in commit 97454284

Co-authored-by: Johan Commelin <johan@commelin.net>

Diff
@@ -591,11 +591,11 @@ instance MonoidWithZeroHom.coeToZeroHom {_ : MulZeroOneClass M} {_ : MulZeroOneC
 -- these must come after the coe_toFun definitions
 initialize_simps_projections ZeroHom (toFun → apply)
 initialize_simps_projections AddHom (toFun → apply)
-initialize_simps_projections AddMonoidHom (toZeroHom_toFun → apply, -toZeroHom)
+initialize_simps_projections AddMonoidHom (toFun → apply)
 initialize_simps_projections OneHom (toFun → apply)
 initialize_simps_projections MulHom (toFun → apply)
-initialize_simps_projections MonoidHom (toOneHom_toFun → apply, -toOneHom)
-initialize_simps_projections MonoidWithZeroHom (toZeroHom_toFun → apply, -toZeroHom)
+initialize_simps_projections MonoidHom (toFun → apply)
+initialize_simps_projections MonoidWithZeroHom (toFun → apply)
 
 @[to_additive (attr := simp)]
 theorem OneHom.coe_mk [One M] [One N] (f : M → N) (h1) : (OneHom.mk f h1 : M → N) = f := rfl
feat: add to_additive linter checking whether additive decl exists (#1881)
  • Force the user to specify whether the additive declaration already exists.
  • Will raise a linter error if the user specified it wrongly
  • Requested on Zulip
Diff
@@ -364,7 +364,7 @@ structure MonoidHom (M : Type _) (N : Type _) [MulOneClass M] [MulOneClass N] ex
 #align monoid_hom MonoidHom
 -- Porting note: remove once `to_additive` is updated
 -- This is waiting on https://github.com/leanprover-community/mathlib4/issues/660
-attribute [to_additive] MonoidHom.toMulHom
+attribute [to_additive existing] MonoidHom.toMulHom
 
 attribute [nolint docBlame] MonoidHom.toMulHom
 attribute [nolint docBlame] MonoidHom.toOneHom
@@ -399,7 +399,7 @@ def MonoidHom.Simps.apply (f : M →* N) : M → N := f
 
 -- Porting note: we need to add an extra `to_additive`.
 -- This is waiting on https://github.com/leanprover-community/mathlib4/issues/660
-attribute [to_additive] MonoidHomClass.toOneHomClass
+attribute [to_additive existing] MonoidHomClass.toOneHomClass
 
 /-- Turn an element of a type `F` satisfying `MonoidHomClass F M N` into an actual
 `MonoidHom`. This is declared as the default coercion from `F` to `M →* N`. -/
feat: to_additive raises linter errors; nested to_additive (#1819)
  • Turn info messages of to_additive into linter errors
  • Allow @[to_additive (attr := to_additive)] to additivize the generated lemma. This is useful for Pow -> SMul -> VAdd lemmas. We can write e.g. @[to_additive (attr := to_additive, simp)] to add the simp attribute to all 3 generated lemmas, and we can provide other options to each to_additive call separately (specifying a name / reorder).
  • The previous point was needed to cleanly get rid of some linter warnings. It also required some additional changes (addToAdditiveAttr now returns a value, turn a few (meta) definitions into mutual partial def, reorder some definitions, generalize additivizeLemmas to lists of more than 2 elements) that should have no visible effects for the user.
Diff
@@ -456,7 +456,7 @@ theorem map_div [Group G] [DivisionMonoid H] [MonoidHomClass F G H] (f : F) :
 #align map_div map_div
 #align map_sub map_sub
 
-@[to_additive (attr := simp) (reorder := 8) map_nsmul]
+@[to_additive (attr := simp) (reorder := 8)]
 theorem map_pow [Monoid G] [Monoid H] [MonoidHomClass F G H] (f : F) (a : G) :
   ∀ n : ℕ, f (a ^ n) = f a ^ n
   | 0 => by rw [pow_zero, pow_zero, map_one]
@@ -1253,7 +1253,7 @@ theorem MonoidWithZeroHom.id_comp [MulZeroOneClass M] [MulZeroOneClass N] (f : M
   (MonoidWithZeroHom.id N).comp f = f := MonoidWithZeroHom.ext fun _ => rfl
 #align monoid_with_zero_hom.id_comp MonoidWithZeroHom.id_comp
 
-@[to_additive AddMonoidHom.map_nsmul]
+@[to_additive]
 protected theorem MonoidHom.map_pow [Monoid M] [Monoid N] (f : M →* N) (a : M) (n : ℕ) :
   f (a ^ n) = f a ^ n := map_pow f a n
 #align monoid_hom.map_pow MonoidHom.map_pow
fix: fix simp lemmas about coercion to function (#2270)
Diff
@@ -588,13 +588,6 @@ instance MonoidWithZeroHom.coeToZeroHom {_ : MulZeroOneClass M} {_ : MulZeroOneC
   Coe (M →*₀ N) (ZeroHom M N) := ⟨MonoidWithZeroHom.toZeroHom⟩
 #align monoid_with_zero_hom.has_coe_to_zero_hom MonoidWithZeroHom.coeToZeroHom
 
--- Porting note: several `coe_eq_xxx` lemmas removed due to new `coe` in Lean4
-
-attribute [coe] OneHom.toFun
-attribute [coe] ZeroHom.toFun
-attribute [coe] MulHom.toFun
-attribute [coe] AddHom.toFun
-
 -- these must come after the coe_toFun definitions
 initialize_simps_projections ZeroHom (toFun → apply)
 initialize_simps_projections AddHom (toFun → apply)
@@ -604,29 +597,32 @@ initialize_simps_projections MulHom (toFun → apply)
 initialize_simps_projections MonoidHom (toOneHom_toFun → apply, -toOneHom)
 initialize_simps_projections MonoidWithZeroHom (toZeroHom_toFun → apply, -toZeroHom)
 
--- Porting note: removed several `toFun_eq_coe` lemmas due to new Coe in Lean4
-
 @[to_additive (attr := simp)]
 theorem OneHom.coe_mk [One M] [One N] (f : M → N) (h1) : (OneHom.mk f h1 : M → N) = f := rfl
 #align one_hom.coe_mk OneHom.coe_mk
 #align zero_hom.coe_mk ZeroHom.coe_mk
 
+@[to_additive (attr := simp)]
+theorem OneHom.toFun_eq_coe [One M] [One N] (f : OneHom M N) : f.toFun = f := rfl
+#align one_hom.to_fun_eq_coe OneHom.toFun_eq_coe
+#align zero_hom.to_fun_eq_coe ZeroHom.toFun_eq_coe
+
 @[to_additive (attr := simp)]
 theorem MulHom.coe_mk [Mul M] [Mul N] (f : M → N) (hmul) : (MulHom.mk f hmul : M → N) = f := rfl
 #align mul_hom.coe_mk MulHom.coe_mk
 #align add_hom.coe_mk AddHom.coe_mk
 
+@[to_additive (attr := simp)]
+theorem MulHom.toFun_eq_coe [Mul M] [Mul N] (f : M →ₙ* N) : f.toFun = f := rfl
+#align mul_hom.to_fun_eq_coe MulHom.toFun_eq_coe
+#align add_hom.to_fun_eq_coe AddHom.toFun_eq_coe
+
 @[to_additive (attr := simp)]
 theorem MonoidHom.coe_mk [MulOneClass M] [MulOneClass N] (f hmul) :
   (MonoidHom.mk f hmul : M → N) = f := rfl
 #align monoid_hom.coe_mk MonoidHom.coe_mk
 #align add_monoid_hom.coe_mk AddMonoidHom.coe_mk
 
-@[simp]
-theorem MonoidWithZeroHom.coe_mk [MulZeroOneClass M] [MulZeroOneClass N] (f h1 hmul) :
-  (MonoidWithZeroHom.mk f h1 hmul : M → N) = (f : M → N) := rfl
-#align monoid_with_zero_hom.coe_mk MonoidWithZeroHom.coe_mk
-
 @[to_additive (attr := simp)]
 theorem MonoidHom.toOneHom_coe [MulOneClass M] [MulOneClass N] (f : M →* N) :
   (f.toOneHom : M → N) = f := rfl
@@ -639,12 +635,21 @@ theorem MonoidHom.toMulHom_coe [MulOneClass M] [MulOneClass N] (f : M →* N) :
 #align monoid_hom.to_mul_hom_coe MonoidHom.toMulHom_coe
 #align add_monoid_hom.to_add_hom_coe AddMonoidHom.toAddHom_coe
 
+@[to_additive]
+theorem MonoidHom.toFun_eq_coe [MulOneClass M] [MulOneClass N] (f : M →* N) : f.toFun = f := rfl
+#align monoid_hom.to_fun_eq_coe MonoidHom.toFun_eq_coe
+#align add_monoid_hom.to_fun_eq_coe AddMonoidHom.toFun_eq_coe
+
+@[simp]
+theorem MonoidWithZeroHom.coe_mk [MulZeroOneClass M] [MulZeroOneClass N] (f h1 hmul) :
+  (MonoidWithZeroHom.mk f h1 hmul : M → N) = (f : M → N) := rfl
+#align monoid_with_zero_hom.coe_mk MonoidWithZeroHom.coe_mk
+
 @[simp]
 theorem MonoidWithZeroHom.toZeroHom_coe [MulZeroOneClass M] [MulZeroOneClass N] (f : M →*₀ N) :
   (f.toZeroHom : M → N) = f := rfl
 #align monoid_with_zero_hom.to_zero_hom_coe MonoidWithZeroHom.toZeroHom_coe
 
-@[simp]
 theorem MonoidWithZeroHom.toMonoidHom_coe [MulZeroOneClass M] [MulZeroOneClass N] (f : M →*₀ N) :
   f.toMonoidHom.toFun = f := rfl
 #align monoid_with_zero_hom.to_monoid_hom_coe MonoidWithZeroHom.toMonoidHom_coe
chore: add missing #align statements (#1902)

This PR is the result of a slight variant on the following "algorithm"

  • take all mathlib 3 names, remove _ and make all uppercase letters into lowercase
  • take all mathlib 4 names, remove _ and make all uppercase letters into lowercase
  • look for matches, and create pairs (original_lean3_name, OriginalLean4Name)
  • for pairs that do not have an align statement:
    • use Lean 4 to lookup the file + position of the Lean 4 name
    • add an #align statement just before the next empty line
  • manually fix some tiny mistakes (e.g., empty lines in proofs might cause the #align statement to have been inserted too early)
Diff
@@ -955,6 +955,8 @@ def OneHom.id (M : Type _) [One M] : OneHom M M where
   map_one' := rfl
 #align one_hom.id OneHom.id
 #align zero_hom.id ZeroHom.id
+#align zero_hom.id_apply ZeroHom.id_apply
+#align one_hom.id_apply OneHom.id_apply
 
 /-- The identity map from a type with multiplication to itself. -/
 @[to_additive (attr := simps)]
@@ -963,6 +965,8 @@ def MulHom.id (M : Type _) [Mul M] : M →ₙ* M where
   map_mul' _ _ := rfl
 #align mul_hom.id MulHom.id
 #align add_hom.id AddHom.id
+#align add_hom.id_apply AddHom.id_apply
+#align mul_hom.id_apply MulHom.id_apply
 
 /-- The identity map from a monoid to itself. -/
 @[to_additive (attr := simps)]
@@ -972,6 +976,8 @@ def MonoidHom.id (M : Type _) [MulOneClass M] : M →* M where
   map_mul' _ _ := rfl
 #align monoid_hom.id MonoidHom.id
 #align add_monoid_hom.id AddMonoidHom.id
+#align monoid_hom.id_apply MonoidHom.id_apply
+#align add_monoid_hom.id_apply AddMonoidHom.id_apply
 
 /-- The identity map from a `MonoidWithZero` to itself. -/
 @[simps]
@@ -981,6 +987,7 @@ def MonoidWithZeroHom.id (M : Type _) [MulZeroOneClass M] : M →*₀ M where
   map_one' := rfl
   map_mul' _ _ := rfl
 #align monoid_with_zero_hom.id MonoidWithZeroHom.id
+#align monoid_with_zero_hom.id_apply MonoidWithZeroHom.id_apply
 
 /-- The identity map from an type with zero to itself. -/
 add_decl_doc ZeroHom.id
@@ -1548,6 +1555,8 @@ def mk' (f : M → G) (map_mul : ∀ a b : M, f (a * b) = f a * f b) : M →* G
   map_one' := mul_left_eq_self.1 <| by rw [← map_mul, mul_one]
 #align monoid_hom.mk' MonoidHom.mk'
 #align add_monoid_hom.mk' AddMonoidHom.mk'
+#align add_monoid_hom.mk'_apply AddMonoidHom.mk'_apply
+#align monoid_hom.mk'_apply MonoidHom.mk'_apply
 
 /-- Makes a group homomorphism from a proof that the map preserves right division
 `fun x y => x * y⁻¹`. See also `MonoidHom.of_map_div` for a version using `fun x y => x / y`.
chore: Rename Type* to Type _ (#1866)

A bunch of docstrings were still mentioning Type*. This changes them to Type _.

Diff
@@ -81,7 +81,7 @@ section Zero
 /-- `ZeroHom M N` is the type of functions `M → N` that preserve zero.
 
 When possible, instead of parametrizing results over `(f : ZeroHom M N)`,
-you should parametrize over `(F : Type*) [ZeroHomClass F M N] (f : F)`.
+you should parametrize over `(F : Type _) [ZeroHomClass F M N] (f : F)`.
 
 When you extend this structure, make sure to also extend `ZeroHomClass`.
 -/
@@ -128,7 +128,7 @@ section Add
 /-- `AddHom M N` is the type of functions `M → N` that preserve addition.
 
 When possible, instead of parametrizing results over `(f : AddHom M N)`,
-you should parametrize over `(F : Type*) [AddHomClass F M N] (f : F)`.
+you should parametrize over `(F : Type _) [AddHomClass F M N] (f : F)`.
 
 When you extend this structure, make sure to extend `AddHomClass`.
 -/
@@ -158,7 +158,7 @@ section add_zero
 `AddMonoidHom` is also used for group homomorphisms.
 
 When possible, instead of parametrizing results over `(f : M →+ N)`,
-you should parametrize over `(F : Type*) [AddMonoidHomClass F M N] (f : F)`.
+you should parametrize over `(F : Type _) [AddMonoidHomClass F M N] (f : F)`.
 
 When you extend this structure, make sure to extend `AddMonoidHomClass`.
 -/
@@ -191,7 +191,7 @@ variable [One M] [One N]
 /-- `OneHom M N` is the type of functions `M → N` that preserve one.
 
 When possible, instead of parametrizing results over `(f : OneHom M N)`,
-you should parametrize over `(F : Type*) [OneHomClass F M N] (f : F)`.
+you should parametrize over `(F : Type _) [OneHomClass F M N] (f : F)`.
 
 When you extend this structure, make sure to also extend `OneHomClass`.
 -/
@@ -280,7 +280,7 @@ stands for "non-unital" because it is intended to match the notation for `NonUni
 `NonUnitalRingHom`, so a `MulHom` is a non-unital monoid hom.
 
 When possible, instead of parametrizing results over `(f : M →ₙ* N)`,
-you should parametrize over `(F : Type*) [MulHomClass F M N] (f : F)`.
+you should parametrize over `(F : Type _) [MulHomClass F M N] (f : F)`.
 When you extend this structure, make sure to extend `MulHomClass`.
 -/
 @[to_additive]
@@ -354,7 +354,7 @@ variable [MulOneClass M] [MulOneClass N]
 `MonoidHom` is also used for group homomorphisms.
 
 When possible, instead of parametrizing results over `(f : M →+ N)`,
-you should parametrize over `(F : Type*) [MonoidHomClass F M N] (f : F)`.
+you should parametrize over `(F : Type _) [MonoidHomClass F M N] (f : F)`.
 
 When you extend this structure, make sure to extend `MonoidHomClass`.
 -/
@@ -492,7 +492,7 @@ the `MonoidWithZero` structure.
 `MonoidWithZeroHom` is also used for group homomorphisms.
 
 When possible, instead of parametrizing results over `(f : M →*₀ N)`,
-you should parametrize over `(F : Type*) [MonoidWithZeroHomClass F M N] (f : F)`.
+you should parametrize over `(F : Type _) [MonoidWithZeroHomClass F M N] (f : F)`.
 
 When you extend this structure, make sure to extend `MonoidWithZeroHomClass`.
 -/
chore: add #align statements for to_additive decls (#1816)

Co-authored-by: Floris van Doorn <fpvdoorn@gmail.com>

Diff
@@ -470,6 +470,7 @@ theorem map_zpow' [DivInvMonoid G] [DivInvMonoid H] [MonoidHomClass F G H]
   | (n : ℕ) => by rw [zpow_ofNat, map_pow, zpow_ofNat]
   | Int.negSucc n => by rw [zpow_negSucc, hf, map_pow, ← zpow_negSucc, ← zpow_negSucc]
 #align map_zpow' map_zpow'
+#align map_zsmul' map_zsmul'
 
 /-- Group homomorphisms preserve integer power. -/
 @[to_additive (attr := simp) (reorder := 8)
@@ -477,6 +478,7 @@ theorem map_zpow' [DivInvMonoid G] [DivInvMonoid H] [MonoidHomClass F G H]
 theorem map_zpow [Group G] [DivisionMonoid H] [MonoidHomClass F G H]
   (f : F) (g : G) (n : ℤ) : f (g ^ n) = f g ^ n := map_zpow' f (map_inv f) g n
 #align map_zpow map_zpow
+#align map_zsmul map_zsmul
 
 end mul_one
 
@@ -1250,6 +1252,7 @@ protected theorem MonoidHom.map_zpow' [DivInvMonoid M] [DivInvMonoid N] (f : M 
   (hf : ∀ x, f x⁻¹ = (f x)⁻¹) (a : M) (n : ℤ) :
   f (a ^ n) = f a ^ n := map_zpow' f hf a n
 #align monoid_hom.map_zpow' MonoidHom.map_zpow'
+#align add_monoid_hom.map_zsmul' AddMonoidHom.map_zsmul'
 
 section End
 
@@ -1564,6 +1567,7 @@ def ofMapMulInv {H : Type _} [Group H] (f : G → H)
           simp only [mul_right_inv, one_mul, inv_inv] }
 
 #align monoid_hom.of_map_mul_inv MonoidHom.ofMapMulInv
+#align add_monoid_hom.of_map_add_neg AddMonoidHom.ofMapAddNeg
 
 @[to_additive (attr := simp)]
 theorem coe_of_map_mul_inv {H : Type _} [Group H] (f : G → H)
chore: fix most phantom #aligns (#1794)
Diff
@@ -612,7 +612,7 @@ theorem OneHom.coe_mk [One M] [One N] (f : M → N) (h1) : (OneHom.mk f h1 : M 
 @[to_additive (attr := simp)]
 theorem MulHom.coe_mk [Mul M] [Mul N] (f : M → N) (hmul) : (MulHom.mk f hmul : M → N) = f := rfl
 #align mul_hom.coe_mk MulHom.coe_mk
-#align add_mul_hom.coe_mk AddHom.coe_mk
+#align add_hom.coe_mk AddHom.coe_mk
 
 @[to_additive (attr := simp)]
 theorem MonoidHom.coe_mk [MulOneClass M] [MulOneClass N] (f hmul) :
feat: improve the way to_additive deals with attributes (#1314)
  • The new syntax for any attributes that need to be copied by to_additive is @[to_additive (attrs := simp, ext, simps)]
  • Adds the auxiliary declarations generated by the simp and simps attributes to the to_additive-dictionary.
  • Future issue: Does not yet translate auxiliary declarations for other attributes (including custom simp-attributes). In particular it's possible that norm_cast might generate some auxiliary declarations.
  • Fixes #950
  • Fixes #953
  • Fixes #1149
  • This moves the interaction between to_additive and simps from the Simps file to the toAdditive file for uniformity.
  • Make the same changes to @[reassoc]

Co-authored-by: Johan Commelin <johan@commelin.net> Co-authored-by: Scott Morrison <scott.morrison@gmail.com>

Diff
@@ -225,7 +225,7 @@ instance OneHom.oneHomClass : OneHomClass (OneHom M N) M N where
 @[to_additive "See Note custom simps projection"]
 def OneHom.Simps.apply (f : OneHom M N) : M → N := f
 
-@[simp, to_additive]
+@[to_additive (attr := simp)]
 theorem map_one [OneHomClass F M N] (f : F) : f 1 = 1 :=
   OneHomClass.map_one f
 #align map_one map_one
@@ -251,7 +251,8 @@ theorem ne_one_of_map {R S F : Type _} [One R] [One S] [OneHomClass F R S] {f :
 
 /-- Turn an element of a type `F` satisfying `OneHomClass F M N` into an actual
 `OneHom`. This is declared as the default coercion from `F` to `OneHom M N`. -/
-@[coe, to_additive "Turn an element of a type `F` satisfying `ZeroHomClass F M N` into an actual
+@[to_additive (attr := coe)
+"Turn an element of a type `F` satisfying `ZeroHomClass F M N` into an actual
 `ZeroHom`. This is declared as the default coercion from `F` to `ZeroHom M N`."]
 def OneHomClass.toOneHom [OneHomClass F M N] (f : F) : OneHom M N where
   toFun := f
@@ -263,7 +264,7 @@ def OneHomClass.toOneHom [OneHomClass F M N] (f : F) : OneHom M N where
 instance [OneHomClass F M N] : CoeTC F (OneHom M N) :=
   ⟨OneHomClass.toOneHom⟩
 
-@[simp, to_additive]
+@[to_additive (attr := simp)]
 theorem OneHom.coe_coe [OneHomClass F M N] (f : F) : ((f : OneHom M N) : M → N) = f := rfl
 #align one_hom.coe_coe OneHom.coe_coe
 #align zero_hom.coe_coe ZeroHom.coe_coe
@@ -317,7 +318,7 @@ instance MulHom.mulHomClass : MulHomClass (M →ₙ* N) M N where
 @[to_additive "See Note custom simps projection"]
 def MulHom.Simps.apply (f : M →ₙ* N) : M → N := f
 
-@[simp, to_additive]
+@[to_additive (attr := simp)]
 theorem map_mul [MulHomClass F M N] (f : F) (x y : M) : f (x * y) = f x * f y :=
   MulHomClass.map_mul f x y
 #align map_mul map_mul
@@ -325,7 +326,8 @@ theorem map_mul [MulHomClass F M N] (f : F) (x y : M) : f (x * y) = f x * f y :=
 
 /-- Turn an element of a type `F` satisfying `MulHomClass F M N` into an actual
 `MulHom`. This is declared as the default coercion from `F` to `M →ₙ* N`. -/
-@[coe, to_additive "Turn an element of a type `F` satisfying `AddHomClass F M N` into an actual
+@[to_additive (attr := coe)
+"Turn an element of a type `F` satisfying `AddHomClass F M N` into an actual
 `AddHom`. This is declared as the default coercion from `F` to `M →ₙ+ N`."]
 def MulHomClass.toMulHom [MulHomClass F M N] (f : F) : M →ₙ* N where
   toFun := f
@@ -337,7 +339,7 @@ def MulHomClass.toMulHom [MulHomClass F M N] (f : F) : M →ₙ* N where
 instance [MulHomClass F M N] : CoeTC F (M →ₙ* N) :=
   ⟨MulHomClass.toMulHom⟩
 
-@[simp, to_additive]
+@[to_additive (attr := simp)]
 theorem MulHom.coe_coe [MulHomClass F M N] (f : F) : ((f : MulHom M N) : M → N) = f := rfl
 #align mul_hom.coe_coe MulHom.coe_coe
 #align add_hom.coe_coe AddHom.coe_coe
@@ -401,7 +403,8 @@ attribute [to_additive] MonoidHomClass.toOneHomClass
 
 /-- Turn an element of a type `F` satisfying `MonoidHomClass F M N` into an actual
 `MonoidHom`. This is declared as the default coercion from `F` to `M →* N`. -/
-@[coe, to_additive "Turn an element of a type `F` satisfying `AddMonoidHomClass F M N` into an
+@[to_additive (attr := coe)
+"Turn an element of a type `F` satisfying `AddMonoidHomClass F M N` into an
 actual `MonoidHom`. This is declared as the default coercion from `F` to `M →+ N`."]
 def MonoidHomClass.toMonoidHom [MonoidHomClass F M N] (f : F) : M →* N :=
 { (f : M →ₙ* N), (f : OneHom M N) with }
@@ -413,7 +416,7 @@ def MonoidHomClass.toMonoidHom [MonoidHomClass F M N] (f : F) : M →* N :=
 instance [MonoidHomClass F M N] : CoeTC F (M →* N) :=
   ⟨MonoidHomClass.toMonoidHom⟩
 
-@[simp, to_additive]
+@[to_additive (attr := simp)]
 theorem MonoidHom.coe_coe [MonoidHomClass F M N] (f : F) : ((f : M →* N) : M → N) = f := rfl
 #align monoid_hom.coe_coe MonoidHom.coe_coe
 #align add_monoid_hom.coe_coe AddMonoidHom.coe_coe
@@ -432,7 +435,7 @@ theorem map_div' [DivInvMonoid G] [DivInvMonoid H] [MonoidHomClass F G H]
 #align map_sub' map_sub'
 
 /-- Group homomorphisms preserve inverse. -/
-@[simp, to_additive "Additive group homomorphisms preserve negation."]
+@[to_additive (attr := simp) "Additive group homomorphisms preserve negation."]
 theorem map_inv [Group G] [DivisionMonoid H] [MonoidHomClass F G H]
   (f : F) (a : G) : f a⁻¹ = (f a)⁻¹ :=
   eq_inv_of_mul_eq_one_left <| map_mul_eq_one f <| inv_mul_self _
@@ -447,13 +450,13 @@ theorem map_mul_inv [Group G] [DivisionMonoid H] [MonoidHomClass F G H] (f : F)
 #align map_add_neg map_add_neg
 
 /-- Group homomorphisms preserve division. -/
-@[simp, to_additive "Additive group homomorphisms preserve subtraction."]
+@[to_additive (attr := simp) "Additive group homomorphisms preserve subtraction."]
 theorem map_div [Group G] [DivisionMonoid H] [MonoidHomClass F G H] (f : F) :
   ∀ a b, f (a / b) = f a / f b := map_div' _ <| map_inv f
 #align map_div map_div
 #align map_sub map_sub
 
-@[simp, to_additive (reorder := 8) map_nsmul]
+@[to_additive (attr := simp) (reorder := 8) map_nsmul]
 theorem map_pow [Monoid G] [Monoid H] [MonoidHomClass F G H] (f : F) (a : G) :
   ∀ n : ℕ, f (a ^ n) = f a ^ n
   | 0 => by rw [pow_zero, pow_zero, map_one]
@@ -469,7 +472,8 @@ theorem map_zpow' [DivInvMonoid G] [DivInvMonoid H] [MonoidHomClass F G H]
 #align map_zpow' map_zpow'
 
 /-- Group homomorphisms preserve integer power. -/
-@[simp, to_additive (reorder := 8) "Additive group homomorphisms preserve integer scaling."]
+@[to_additive (attr := simp) (reorder := 8)
+"Additive group homomorphisms preserve integer scaling."]
 theorem map_zpow [Group G] [DivisionMonoid H] [MonoidHomClass F G H]
   (f : F) (g : G) (n : ℤ) : f (g ^ n) = f g ^ n := map_zpow' f (map_inv f) g n
 #align map_zpow map_zpow
@@ -600,17 +604,17 @@ initialize_simps_projections MonoidWithZeroHom (toZeroHom_toFun → apply, -toZe
 
 -- Porting note: removed several `toFun_eq_coe` lemmas due to new Coe in Lean4
 
-@[simp, to_additive]
+@[to_additive (attr := simp)]
 theorem OneHom.coe_mk [One M] [One N] (f : M → N) (h1) : (OneHom.mk f h1 : M → N) = f := rfl
 #align one_hom.coe_mk OneHom.coe_mk
 #align zero_hom.coe_mk ZeroHom.coe_mk
 
-@[simp, to_additive]
+@[to_additive (attr := simp)]
 theorem MulHom.coe_mk [Mul M] [Mul N] (f : M → N) (hmul) : (MulHom.mk f hmul : M → N) = f := rfl
 #align mul_hom.coe_mk MulHom.coe_mk
 #align add_mul_hom.coe_mk AddHom.coe_mk
 
-@[simp, to_additive]
+@[to_additive (attr := simp)]
 theorem MonoidHom.coe_mk [MulOneClass M] [MulOneClass N] (f hmul) :
   (MonoidHom.mk f hmul : M → N) = f := rfl
 #align monoid_hom.coe_mk MonoidHom.coe_mk
@@ -621,13 +625,13 @@ theorem MonoidWithZeroHom.coe_mk [MulZeroOneClass M] [MulZeroOneClass N] (f h1 h
   (MonoidWithZeroHom.mk f h1 hmul : M → N) = (f : M → N) := rfl
 #align monoid_with_zero_hom.coe_mk MonoidWithZeroHom.coe_mk
 
-@[simp, to_additive]
+@[to_additive (attr := simp)]
 theorem MonoidHom.toOneHom_coe [MulOneClass M] [MulOneClass N] (f : M →* N) :
   (f.toOneHom : M → N) = f := rfl
 #align monoid_hom.to_one_hom_coe MonoidHom.toOneHom_coe
 #align add_monoid_hom.to_zero_hom_coe AddMonoidHom.toZeroHom_coe
 
-@[simp, to_additive]
+@[to_additive (attr := simp)]
 theorem MonoidHom.toMulHom_coe [MulOneClass M] [MulOneClass N] (f : M →* N) :
   f.toMulHom.toFun = f := rfl
 #align monoid_hom.to_mul_hom_coe MonoidHom.toMulHom_coe
@@ -643,19 +647,19 @@ theorem MonoidWithZeroHom.toMonoidHom_coe [MulZeroOneClass M] [MulZeroOneClass N
   f.toMonoidHom.toFun = f := rfl
 #align monoid_with_zero_hom.to_monoid_hom_coe MonoidWithZeroHom.toMonoidHom_coe
 
-@[ext, to_additive]
+@[to_additive (attr := ext)]
 theorem OneHom.ext [One M] [One N] ⦃f g : OneHom M N⦄ (h : ∀ x, f x = g x) : f = g :=
   FunLike.ext _ _ h
 #align one_hom.ext OneHom.ext
 #align zero_hom.ext ZeroHom.ext
 
-@[ext, to_additive]
+@[to_additive (attr := ext)]
 theorem MulHom.ext [Mul M] [Mul N] ⦃f g : M →ₙ* N⦄ (h : ∀ x, f x = g x) : f = g :=
   FunLike.ext _ _ h
 #align mul_hom.ext MulHom.ext
 #align add_hom.ext AddHom.ext
 
-@[ext, to_additive]
+@[to_additive (attr := ext)]
 theorem MonoidHom.ext [MulOneClass M] [MulOneClass N] ⦃f g : M →* N⦄ (h : ∀ x, f x = g x) : f = g :=
   FunLike.ext _ _ h
 #align monoid_hom.ext MonoidHom.ext
@@ -669,21 +673,21 @@ theorem MonoidWithZeroHom.ext [MulZeroOneClass M] [MulZeroOneClass N] ⦃f g : M
 section Deprecated
 
 /-- Deprecated: use `FunLike.congr_fun` instead. -/
-@[deprecated, to_additive "Deprecated: use `FunLike.congr_fun` instead."]
+@[to_additive (attr := deprecated) "Deprecated: use `FunLike.congr_fun` instead."]
 theorem OneHom.congr_fun [One M] [One N] {f g : OneHom M N} (h : f = g) (x : M) : f x = g x :=
   FunLike.congr_fun h x
 #align one_hom.congr_fun OneHom.congr_fun
 #align zero_hom.congr_fun ZeroHom.congr_fun
 
 /-- Deprecated: use `FunLike.congr_fun` instead. -/
-@[deprecated, to_additive "Deprecated: use `FunLike.congr_fun` instead."]
+@[to_additive (attr := deprecated) "Deprecated: use `FunLike.congr_fun` instead."]
 theorem MulHom.congr_fun [Mul M] [Mul N] {f g : M →ₙ* N} (h : f = g) (x : M) : f x = g x :=
   FunLike.congr_fun h x
 #align mul_hom.congr_fun MulHom.congr_fun
 #align add_hom.congr_fun AddHom.congr_fun
 
 /-- Deprecated: use `FunLike.congr_fun` instead. -/
-@[deprecated, to_additive "Deprecated: use `FunLike.congr_fun` instead."]
+@[to_additive (attr := deprecated) "Deprecated: use `FunLike.congr_fun` instead."]
 theorem MonoidHom.congr_fun [MulOneClass M] [MulOneClass N] {f g : M →* N} (h : f = g) (x : M) :
   f x = g x := FunLike.congr_fun h x
 #align monoid_hom.congr_fun MonoidHom.congr_fun
@@ -696,21 +700,21 @@ theorem MonoidWithZeroHom.congr_fun [MulZeroOneClass M] [MulZeroOneClass N] {f g
 #align monoid_with_zero_hom.congr_fun MonoidWithZeroHom.congr_fun
 
 /-- Deprecated: use `FunLike.congr_arg` instead. -/
-@[deprecated, to_additive "Deprecated: use `FunLike.congr_arg` instead."]
+@[to_additive (attr := deprecated) "Deprecated: use `FunLike.congr_arg` instead."]
 theorem OneHom.congr_arg [One M] [One N] (f : OneHom M N) {x y : M} (h : x = y) : f x = f y :=
   FunLike.congr_arg f h
 #align one_hom.congr_arg OneHom.congr_arg
 #align zero_hom.congr_arg ZeroHom.congr_arg
 
 /-- Deprecated: use `FunLike.congr_arg` instead. -/
-@[deprecated, to_additive "Deprecated: use `FunLike.congr_arg` instead."]
+@[to_additive (attr := deprecated) "Deprecated: use `FunLike.congr_arg` instead."]
 theorem MulHom.congr_arg [Mul M] [Mul N] (f : M →ₙ* N) {x y : M} (h : x = y) : f x = f y :=
   FunLike.congr_arg f h
 #align mul_hom.congr_arg MulHom.congr_arg
 #align add_hom.congr_arg AddHom.congr_arg
 
 /-- Deprecated: use `FunLike.congr_arg` instead. -/
-@[deprecated, to_additive "Deprecated: use `FunLike.congr_arg` instead."]
+@[to_additive (attr := deprecated) "Deprecated: use `FunLike.congr_arg` instead."]
 theorem MonoidHom.congr_arg [MulOneClass M] [MulOneClass N] (f : M →* N) {x y : M} (h : x = y) :
   f x = f y := FunLike.congr_arg f h
 #align monoid_hom.congr_arg MonoidHom.congr_arg
@@ -723,21 +727,21 @@ theorem MonoidWithZeroHom.congr_arg [MulZeroOneClass M] [MulZeroOneClass N] (f :
 #align monoid_with_zero_hom.congr_arg MonoidWithZeroHom.congr_arg
 
 /-- Deprecated: use `FunLike.coe_injective` instead. -/
-@[deprecated, to_additive "Deprecated: use `FunLike.coe_injective` instead."]
+@[to_additive (attr := deprecated) "Deprecated: use `FunLike.coe_injective` instead."]
 theorem OneHom.coe_inj [One M] [One N] ⦃f g : OneHom M N⦄ (h : (f : M → N) = g) : f = g :=
   FunLike.coe_injective h
 #align one_hom.coe_inj OneHom.coe_inj
 #align zero_hom.coe_inj ZeroHom.coe_inj
 
 /-- Deprecated: use `FunLike.coe_injective` instead. -/
-@[deprecated, to_additive "Deprecated: use `FunLike.coe_injective` instead."]
+@[to_additive (attr := deprecated) "Deprecated: use `FunLike.coe_injective` instead."]
 theorem MulHom.coe_inj [Mul M] [Mul N] ⦃f g : M →ₙ* N⦄ (h : (f : M → N) = g) : f = g :=
   FunLike.coe_injective h
 #align mul_hom.coe_inj MulHom.coe_inj
 #align add_hom.coe_inj AddHom.coe_inj
 
 /-- Deprecated: use `FunLike.coe_injective` instead. -/
-@[deprecated, to_additive "Deprecated: use `FunLike.coe_injective` instead."]
+@[to_additive (attr := deprecated) "Deprecated: use `FunLike.coe_injective` instead."]
 theorem MonoidHom.coe_inj [MulOneClass M] [MulOneClass N] ⦃f g : M →* N⦄ (h : (f : M → N) = g) :
   f = g := FunLike.coe_injective h
 #align monoid_hom.coe_inj MonoidHom.coe_inj
@@ -750,21 +754,21 @@ theorem MonoidWithZeroHom.coe_inj [MulZeroOneClass M] [MulZeroOneClass N] ⦃f g
 #align monoid_with_zero_hom.coe_inj MonoidWithZeroHom.coe_inj
 
 /-- Deprecated: use `FunLike.ext_iff` instead. -/
-@[deprecated, to_additive "Deprecated: use `FunLike.ext_iff` instead."]
+@[to_additive (attr := deprecated) "Deprecated: use `FunLike.ext_iff` instead."]
 theorem OneHom.ext_iff [One M] [One N] {f g : OneHom M N} : f = g ↔ ∀ x, f x = g x :=
   FunLike.ext_iff
 #align one_hom.ext_iff OneHom.ext_iff
 #align zero_hom.ext_iff ZeroHom.ext_iff
 
 /-- Deprecated: use `FunLike.ext_iff` instead. -/
-@[deprecated, to_additive "Deprecated: use `FunLike.ext_iff` instead."]
+@[to_additive (attr := deprecated) "Deprecated: use `FunLike.ext_iff` instead."]
 theorem MulHom.ext_iff [Mul M] [Mul N] {f g : M →ₙ* N} : f = g ↔ ∀ x, f x = g x :=
   FunLike.ext_iff
 #align mul_hom.ext_iff MulHom.ext_iff
 #align add_hom.ext_iff AddHom.ext_iff
 
 /-- Deprecated: use `FunLike.ext_iff` instead. -/
-@[deprecated, to_additive "Deprecated: use `FunLike.ext_iff` instead."]
+@[to_additive (attr := deprecated) "Deprecated: use `FunLike.ext_iff` instead."]
 theorem MonoidHom.ext_iff [MulOneClass M] [MulOneClass N] {f g : M →* N} : f = g ↔ ∀ x, f x = g x :=
   FunLike.ext_iff
 #align monoid_hom.ext_iff MonoidHom.ext_iff
@@ -778,19 +782,19 @@ theorem MonoidWithZeroHom.ext_iff [MulZeroOneClass M] [MulZeroOneClass N] {f g :
 
 end Deprecated
 
-@[simp, to_additive]
+@[to_additive (attr := simp)]
 theorem OneHom.mk_coe [One M] [One N] (f : OneHom M N) (h1) : OneHom.mk f h1 = f :=
   OneHom.ext fun _ => rfl
 #align one_hom.mk_coe OneHom.mk_coe
 #align zero_hom.mk_coe ZeroHom.mk_coe
 
-@[simp, to_additive]
+@[to_additive (attr := simp)]
 theorem MulHom.mk_coe [Mul M] [Mul N] (f : M →ₙ* N) (hmul) : MulHom.mk f hmul = f :=
   MulHom.ext fun _ => rfl
 #align mul_hom.mk_coe MulHom.mk_coe
 #align add_hom.mk_coe AddHom.mk_coe
 
-@[simp, to_additive]
+@[to_additive (attr := simp)]
 theorem MonoidHom.mk_coe [MulOneClass M] [MulOneClass N] (f : M →* N) (hmul) :
   MonoidHom.mk f hmul = f := MonoidHom.ext fun _ => rfl
 #align monoid_hom.mk_coe MonoidHom.mk_coe
@@ -943,7 +947,7 @@ theorem invMonoidHom_apply (a : α) : invMonoidHom a = a⁻¹ := rfl
 end DivisionCommMonoid
 
 /-- The identity map from a type with 1 to itself. -/
-@[to_additive, simps]
+@[to_additive (attr := simps)]
 def OneHom.id (M : Type _) [One M] : OneHom M M where
   toFun x := x
   map_one' := rfl
@@ -951,7 +955,7 @@ def OneHom.id (M : Type _) [One M] : OneHom M M where
 #align zero_hom.id ZeroHom.id
 
 /-- The identity map from a type with multiplication to itself. -/
-@[to_additive, simps]
+@[to_additive (attr := simps)]
 def MulHom.id (M : Type _) [Mul M] : M →ₙ* M where
   toFun x := x
   map_mul' _ _ := rfl
@@ -959,7 +963,7 @@ def MulHom.id (M : Type _) [Mul M] : M →ₙ* M where
 #align add_hom.id AddHom.id
 
 /-- The identity map from a monoid to itself. -/
-@[to_additive, simps]
+@[to_additive (attr := simps)]
 def MonoidHom.id (M : Type _) [MulOneClass M] : M →* M where
   toFun x := x
   map_one' := rfl
@@ -1029,19 +1033,19 @@ add_decl_doc AddHom.comp
 /-- Composition of additive monoid morphisms as an additive monoid morphism. -/
 add_decl_doc AddMonoidHom.comp
 
-@[simp, to_additive]
+@[to_additive (attr := simp)]
 theorem OneHom.coe_comp [One M] [One N] [One P] (g : OneHom N P) (f : OneHom M N) :
   ↑(g.comp f) = g ∘ f := rfl
 #align one_hom.coe_comp OneHom.coe_comp
 #align zero_hom.coe_comp ZeroHom.coe_comp
 
-@[simp, to_additive]
+@[to_additive (attr := simp)]
 theorem MulHom.coe_comp [Mul M] [Mul N] [Mul P] (g : N →ₙ* P) (f : M →ₙ* N) :
   ↑(g.comp f) = g ∘ f := rfl
 #align mul_hom.coe_comp MulHom.coe_comp
 #align add_hom.coe_comp AddHom.coe_comp
 
-@[simp, to_additive]
+@[to_additive (attr := simp)]
 theorem MonoidHom.coe_comp [MulOneClass M] [MulOneClass N] [MulOneClass P]
   (g : N →* P) (f : M →* N) : ↑(g.comp f) = g ∘ f := rfl
 #align monoid_hom.coe_comp MonoidHom.coe_comp
@@ -1186,22 +1190,22 @@ end
 
 theorem MonoidWithZeroHom.toZeroHom_injective [MulZeroOneClass M] [MulZeroOneClass N] :
   Function.Injective (MonoidWithZeroHom.toZeroHom : (M →*₀ N) → ZeroHom M N) :=
-  fun _ _ h => MonoidWithZeroHom.ext <| ZeroHom.ext_iff.mp h
+  fun _ _ h => MonoidWithZeroHom.ext <| (FunLike.ext_iff (F := ZeroHom M N)).mp h
 #align monoid_with_zero_hom.to_zero_hom_injective MonoidWithZeroHom.toZeroHom_injective
 
-@[simp, to_additive]
+@[to_additive (attr := simp)]
 theorem OneHom.comp_id [One M] [One N] (f : OneHom M N) : f.comp (OneHom.id M) = f :=
   OneHom.ext fun _ => rfl
 #align one_hom.comp_id OneHom.comp_id
 #align zero_hom.comp_id ZeroHom.comp_id
 
-@[simp, to_additive]
+@[to_additive (attr := simp)]
 theorem MulHom.comp_id [Mul M] [Mul N] (f : M →ₙ* N) : f.comp (MulHom.id M) = f :=
   MulHom.ext fun _ => rfl
 #align mul_hom.comp_id MulHom.comp_id
 #align add_hom.comp_id AddHom.comp_id
 
-@[simp, to_additive]
+@[to_additive (attr := simp)]
 theorem MonoidHom.comp_id [MulOneClass M] [MulOneClass N] (f : M →* N) :
   f.comp (MonoidHom.id M) = f := MonoidHom.ext fun _ => rfl
 #align monoid_hom.comp_id MonoidHom.comp_id
@@ -1212,19 +1216,19 @@ theorem MonoidWithZeroHom.comp_id [MulZeroOneClass M] [MulZeroOneClass N] (f : M
   f.comp (MonoidWithZeroHom.id M) = f := MonoidWithZeroHom.ext fun _ => rfl
 #align monoid_with_zero_hom.comp_id MonoidWithZeroHom.comp_id
 
-@[simp, to_additive]
+@[to_additive (attr := simp)]
 theorem OneHom.id_comp [One M] [One N] (f : OneHom M N) : (OneHom.id N).comp f = f :=
   OneHom.ext fun _ => rfl
 #align one_hom.id_comp OneHom.id_comp
 #align zero_hom.id_comp ZeroHom.id_comp
 
-@[simp, to_additive]
+@[to_additive (attr := simp)]
 theorem MulHom.id_comp [Mul M] [Mul N] (f : M →ₙ* N) : (MulHom.id N).comp f = f :=
   MulHom.ext fun _ => rfl
 #align mul_hom.id_comp MulHom.id_comp
 #align add_hom.id_comp AddHom.id_comp
 
-@[simp, to_additive]
+@[to_additive (attr := simp)]
 theorem MonoidHom.id_comp [MulOneClass M] [MulOneClass N] (f : M →* N) :
   (MonoidHom.id N).comp f = f := MonoidHom.ext fun _ => rfl
 #align monoid_hom.id_comp MonoidHom.id_comp
@@ -1340,23 +1344,23 @@ add_decl_doc instZeroAddHomToAdd
 /-- `0` is the additive monoid homomorphism sending all elements to `0`. -/
 add_decl_doc instZeroAddMonoidHom
 
-@[simp, to_additive]
+@[to_additive (attr := simp)]
 theorem OneHom.one_apply [One M] [One N] (x : M) : (1 : OneHom M N) x = 1 := rfl
 #align one_hom.one_apply OneHom.one_apply
 #align zero_hom.zero_apply ZeroHom.zero_apply
 
-@[simp, to_additive]
+@[to_additive (attr := simp)]
 theorem MonoidHom.one_apply [MulOneClass M] [MulOneClass N] (x : M) : (1 : M →* N) x = 1 := rfl
 #align monoid_hom.one_apply MonoidHom.one_apply
 #align add_monoid_hom.zero_apply AddMonoidHom.zero_apply
 
-@[simp, to_additive]
+@[to_additive (attr := simp)]
 theorem OneHom.one_comp [One M] [One N] [One P] (f : OneHom M N) :
   (1 : OneHom N P).comp f = 1 := rfl
 #align one_hom.one_comp OneHom.one_comp
 #align zero_hom.zero_comp ZeroHom.zero_comp
 
-@[simp, to_additive]
+@[to_additive (attr := simp)]
 theorem OneHom.comp_one [One M] [One N] [One P] (f : OneHom N P) : f.comp (1 : OneHom M N) = 1 := by
   ext
   simp only [OneHom.map_one, OneHom.coe_comp, Function.comp_apply, OneHom.one_apply]
@@ -1399,7 +1403,7 @@ instance [Mul M] [CommSemigroup N] : Mul (M →ₙ* N) :=
 additive morphism sending `x` to `f x + g x`. -/
 add_decl_doc AddHom.instAddAddHomToAddToAddSemigroup
 
-@[simp, to_additive]
+@[to_additive (attr := simp)]
 theorem mul_apply {M N} {_ : Mul M} {_ : CommSemigroup N} (f g : M →ₙ* N) (x : M) :
   (f * g) x = f x * g x := rfl
 #align mul_hom.mul_apply MulHom.mul_apply
@@ -1441,19 +1445,19 @@ instance mul {M N} {_ : MulOneClass M} [CommMonoid N] : Mul (M →* N) :=
 `f + g` is the additive monoid morphism sending `x` to `f x + g x`. -/
 add_decl_doc AddMonoidHom.add
 
-@[simp, to_additive]
+@[to_additive (attr := simp)]
 theorem mul_apply {M N} {_ : MulOneClass M} {_ : CommMonoid N} (f g : M →* N) (x : M) :
   (f * g) x = f x * g x := rfl
 #align monoid_hom.mul_apply MonoidHom.mul_apply
 #align add_monoid_hom.add_apply AddMonoidHom.add_apply
 
-@[simp, to_additive]
+@[to_additive (attr := simp)]
 theorem one_comp [MulOneClass M] [MulOneClass N] [MulOneClass P] (f : M →* N) :
   (1 : N →* P).comp f = 1 := rfl
 #align monoid_hom.one_comp MonoidHom.one_comp
 #align add_monoid_hom.zero_comp AddMonoidHom.zero_comp
 
-@[simp, to_additive]
+@[to_additive (attr := simp)]
 theorem comp_one [MulOneClass M] [MulOneClass N] [MulOneClass P] (f : N →* P) :
   f.comp (1 : M →* N) = 1 := by
   ext
@@ -1533,8 +1537,8 @@ theorem _root_.injective_iff_map_eq_one' {G H} [Group G] [MulOneClass H] [Monoid
 variable [MulOneClass M]
 
 /-- Makes a group homomorphism from a proof that the map preserves multiplication. -/
-@[to_additive "Makes an additive group homomorphism from a proof that the map preserves addition.",
-  simps (config := { fullyApplied := false })]
+@[to_additive (attr := simps (config := .asFn))
+  "Makes an additive group homomorphism from a proof that the map preserves addition."]
 def mk' (f : M → G) (map_mul : ∀ a b : M, f (a * b) = f a * f b) : M →* G where
   toFun := f
   map_mul' := map_mul
@@ -1561,7 +1565,7 @@ def ofMapMulInv {H : Type _} [Group H] (f : G → H)
 
 #align monoid_hom.of_map_mul_inv MonoidHom.ofMapMulInv
 
-@[simp, to_additive]
+@[to_additive (attr := simp)]
 theorem coe_of_map_mul_inv {H : Type _} [Group H] (f : G → H)
   (map_div : ∀ a b : G, f (a * b⁻¹) = f a * (f b)⁻¹) :
   ↑(ofMapMulInv f map_div) = f := rfl
@@ -1575,7 +1579,7 @@ def ofMapDiv {H : Type _} [Group H] (f : G → H) (hf : ∀ x y, f (x / y) = f x
 #align monoid_hom.of_map_div MonoidHom.ofMapDiv
 #align add_monoid_hom.of_map_sub AddMonoidHom.ofMapSub
 
-@[simp, to_additive]
+@[to_additive (attr := simp)]
 theorem coe_of_map_div {H : Type _} [Group H] (f : G → H) (hf : ∀ x y, f (x / y) = f x / f y) :
   ↑(ofMapDiv f hf) = f := rfl
 #align monoid_hom.coe_of_map_div MonoidHom.coe_of_map_div
@@ -1591,13 +1595,13 @@ instance {M G} [MulOneClass M] [CommGroup G] : Inv (M →* G) :=
 homomorphism sending `x` to `-(f x)`. -/
 add_decl_doc AddMonoidHom.instNegAddMonoidHomToAddZeroClassToAddMonoidToSubNegAddMonoidToAddGroup
 
-@[simp, to_additive]
+@[to_additive (attr := simp)]
 theorem inv_apply {M G} {_ : MulOneClass M} {_ : CommGroup G} (f : M →* G) (x : M) :
   f⁻¹ x = (f x)⁻¹ := rfl
 #align monoid_hom.inv_apply MonoidHom.inv_apply
 #align add_monoid_hom.neg_apply AddMonoidHom.neg_apply
 
-@[simp, to_additive]
+@[to_additive (attr := simp)]
 theorem inv_comp {M N A} {_ : MulOneClass M} {_ : MulOneClass N} {_ : CommGroup A}
   (φ : N →* A) (ψ : M →* N) : φ⁻¹.comp ψ = (φ.comp ψ)⁻¹ := by
   ext
@@ -1605,7 +1609,7 @@ theorem inv_comp {M N A} {_ : MulOneClass M} {_ : MulOneClass N} {_ : CommGroup
 #align monoid_hom.inv_comp MonoidHom.inv_comp
 #align add_monoid_hom.neg_comp AddMonoidHom.neg_comp
 
-@[simp, to_additive]
+@[to_additive (attr := simp)]
 theorem comp_inv {M A B} {_ : MulOneClass M} {_ : CommGroup A} {_ : CommGroup B}
   (φ : A →* B) (ψ : M →* A) : φ.comp ψ⁻¹ = (φ.comp ψ)⁻¹ := by
   ext
@@ -1624,7 +1628,7 @@ instance {M G} [MulOneClass M] [CommGroup G] : Div (M →* G) :=
 is the homomorphism sending `x` to `(f x) - (g x)`. -/
 add_decl_doc AddMonoidHom.instSubAddMonoidHomToAddZeroClassToAddMonoidToSubNegAddMonoidToAddGroup
 
-@[simp, to_additive]
+@[to_additive (attr := simp)]
 theorem div_apply {M G} {_ : MulOneClass M} {_ : CommGroup G} (f g : M →* G) (x : M) :
   (f / g) x = f x / g x := rfl
 #align monoid_hom.div_apply MonoidHom.div_apply
fix: correct the name of map_nsmul (#1192)
Diff
@@ -453,13 +453,13 @@ theorem map_div [Group G] [DivisionMonoid H] [MonoidHomClass F G H] (f : F) :
 #align map_div map_div
 #align map_sub map_sub
 
-@[simp, to_additive (reorder := 8)]
+@[simp, to_additive (reorder := 8) map_nsmul]
 theorem map_pow [Monoid G] [Monoid H] [MonoidHomClass F G H] (f : F) (a : G) :
   ∀ n : ℕ, f (a ^ n) = f a ^ n
   | 0 => by rw [pow_zero, pow_zero, map_one]
   | n + 1 => by rw [pow_succ, pow_succ, map_mul, map_pow f a n]
 #align map_pow map_pow
-#align map_smul map_smul
+#align map_nsmul map_nsmul
 
 @[to_additive]
 theorem map_zpow' [DivInvMonoid G] [DivInvMonoid H] [MonoidHomClass F G H]
chore: fix casing per naming scheme (#1183)

Fix a lot of wrong casing mostly in the docstrings but also sometimes in def/theorem names. E.g. fin 2 --> Fin 2, add_monoid_hom --> AddMonoidHom

Remove \n from to_additive docstrings that were inserted by mathport.

Move files and directories with Gcd and Smul to GCD and SMul

Diff
@@ -967,7 +967,7 @@ def MonoidHom.id (M : Type _) [MulOneClass M] : M →* M where
 #align monoid_hom.id MonoidHom.id
 #align add_monoid_hom.id AddMonoidHom.id
 
-/-- The identity map from a monoid_with_zero to itself. -/
+/-- The identity map from a `MonoidWithZero` to itself. -/
 @[simps]
 def MonoidWithZeroHom.id (M : Type _) [MulZeroOneClass M] : M →*₀ M where
   toFun x := x
feat: better coercions from hom classes to hom types (#1150)

Discussed here

Diff
@@ -249,10 +249,19 @@ theorem ne_one_of_map {R S F : Type _} [One R] [One S] [OneHomClass F R S] {f :
 #align ne_one_of_map ne_one_of_map
 #align ne_zero_of_map ne_zero_of_map
 
-/-- Any type that is a `OneHomClass` can be cast into a `OneHom`. -/
-@[to_additive "Any type that is a `ZeroHomClass` can be cast into a `ZeroHom`."]
+/-- Turn an element of a type `F` satisfying `OneHomClass F M N` into an actual
+`OneHom`. This is declared as the default coercion from `F` to `OneHom M N`. -/
+@[coe, to_additive "Turn an element of a type `F` satisfying `ZeroHomClass F M N` into an actual
+`ZeroHom`. This is declared as the default coercion from `F` to `ZeroHom M N`."]
+def OneHomClass.toOneHom [OneHomClass F M N] (f : F) : OneHom M N where
+  toFun := f
+  map_one' := map_one f
+
+/-- Any type satisfying `OneHomClass` can be cast into `OneHom` via `OneHomClass.toOneHom`. -/
+@[to_additive "Any type satisfying `ZeroHomClass` can be cast into `ZeroHom` via
+`ZeroHomClass.toZeroHom`. "]
 instance [OneHomClass F M N] : CoeTC F (OneHom M N) :=
-  ⟨fun f => { toFun := f, map_one' := map_one f }⟩
+  ⟨OneHomClass.toOneHom⟩
 
 @[simp, to_additive]
 theorem OneHom.coe_coe [OneHomClass F M N] (f : F) : ((f : OneHom M N) : M → N) = f := rfl
@@ -314,10 +323,19 @@ theorem map_mul [MulHomClass F M N] (f : F) (x y : M) : f (x * y) = f x * f y :=
 #align map_mul map_mul
 #align map_add map_add
 
-/-- Any type that is a `MulHomClass` can be cast into a `MulHom`. -/
-@[to_additive "Any type that is an `AddHomClass` can be cast into an `AddHom`."]
+/-- Turn an element of a type `F` satisfying `MulHomClass F M N` into an actual
+`MulHom`. This is declared as the default coercion from `F` to `M →ₙ* N`. -/
+@[coe, to_additive "Turn an element of a type `F` satisfying `AddHomClass F M N` into an actual
+`AddHom`. This is declared as the default coercion from `F` to `M →ₙ+ N`."]
+def MulHomClass.toMulHom [MulHomClass F M N] (f : F) : M →ₙ* N where
+  toFun := f
+  map_mul' := map_mul f
+
+/-- Any type satisfying `MulHomCLass` can be cast into `MulHom` via `MulHomClass.toMulHom`. -/
+@[to_additive "Any type satisfying `AddHomClass` can be cast into `AddHom` via
+`AddHomClass.toAddHom`."]
 instance [MulHomClass F M N] : CoeTC F (M →ₙ* N) :=
-  ⟨fun f => { toFun := f, map_mul' := map_mul f }⟩
+  ⟨MulHomClass.toMulHom⟩
 
 @[simp, to_additive]
 theorem MulHom.coe_coe [MulHomClass F M N] (f : F) : ((f : MulHom M N) : M → N) = f := rfl
@@ -381,13 +399,19 @@ def MonoidHom.Simps.apply (f : M →* N) : M → N := f
 -- This is waiting on https://github.com/leanprover-community/mathlib4/issues/660
 attribute [to_additive] MonoidHomClass.toOneHomClass
 
-/-- Any type that is a `MonoidHomClass` can be cast into a `MonoidHom`. -/
-@[to_additive "Any type that is a `AddMonoidHomClass` can be cast into a `AddMonoidHom`."]
+/-- Turn an element of a type `F` satisfying `MonoidHomClass F M N` into an actual
+`MonoidHom`. This is declared as the default coercion from `F` to `M →* N`. -/
+@[coe, to_additive "Turn an element of a type `F` satisfying `AddMonoidHomClass F M N` into an
+actual `MonoidHom`. This is declared as the default coercion from `F` to `M →+ N`."]
+def MonoidHomClass.toMonoidHom [MonoidHomClass F M N] (f : F) : M →* N :=
+{ (f : M →ₙ* N), (f : OneHom M N) with }
+
+/-- Any type satisfying `MonoidHomClass` can be cast into `MonoidHom` via
+`MonoidHomClass.toMonoidHom`. -/
+@[to_additive "Any type satisfying `AddMonoidHomClass` can be cast into `AddMonoidHom` via
+`AddMonoidHomClass.toAddMonoidHom`."]
 instance [MonoidHomClass F M N] : CoeTC F (M →* N) :=
-  ⟨fun f => { toFun := f, map_one' := map_one f, map_mul' := map_mul f }⟩
-/-- Any type that is a `AddMonoidHomClass` can be cast into a `AddMonoidHom`. -/
-instance [AddZeroClass M] [AddZeroClass N] [AddMonoidHomClass F M N] : CoeTC F (M →+ N) :=
-  ⟨fun f => { toFun := f, map_zero' := map_zero f, map_add' := map_add f }⟩
+  ⟨MonoidHomClass.toMonoidHom⟩
 
 @[simp, to_additive]
 theorem MonoidHom.coe_coe [MonoidHomClass F M N] (f : F) : ((f : M →* N) : M → N) = f := rfl
@@ -501,9 +525,16 @@ instance MonoidWithZeroHom.monoidWithZeroHomClass : MonoidWithZeroHomClass (M 
 /-- See Note [custom simps projection] -/
 def MonoidWithZeroHom.Simps.apply (f : M →*₀ N) : M → N := f
 
-/-- Any type that is a `MonoidWithZeroHomClass` can be cast into a `MonoidWithZeroHom`. -/
+/-- Turn an element of a type `F` satisfying `MonoidWithZeroHomClass F M N` into an actual
+`MonoidWithZeroHom`. This is declared as the default coercion from `F` to `M →*₀ N`. -/
+@[coe]
+def MonoidWithZeroHomClass.toMonoidWithZeroHom [MonoidWithZeroHomClass F M N] (f : F) : M →*₀ N :=
+{ (f : M →* N), (f : ZeroHom M N) with }
+
+/-- Any type satisfying `MonoidWithZeroHomClass` can be cast into `MonoidWithZeroHom` via
+`MonoidWithZeroHomClass.toMonoidWithZeroHom`. -/
 instance [MonoidWithZeroHomClass F M N] : CoeTC F (M →*₀ N) :=
-  ⟨fun f => { toFun := f, map_one' := map_one f, map_zero' := map_zero f, map_mul' := map_mul f }⟩
+  ⟨MonoidWithZeroHomClass.toMonoidWithZeroHom⟩
 
 @[simp]
 theorem MonoidWithZeroHom.coe_coe [MonoidWithZeroHomClass F M N] (f : F) :
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
@@ -4,6 +4,11 @@ Released under Apache 2.0 license as described in the file LICENSE.
 Authors: Patrick Massot, Kevin Buzzard, Scott Morrison, Johan Commelin, Chris Hughes,
   Johannes Hölzl, Yury Kudryashov
 Ported by: Winston Yin
+
+! This file was ported from Lean 3 source module algebra.hom.group
+! leanprover-community/mathlib commit 8c53048add6ffacdda0b36c4917bfe37e209b0ba
+! Please do not edit these lines, except to modify the commit id
+! if you have ported upstream changes.
 -/
 import Mathlib.Init.CcLemmas
 import Mathlib.Algebra.NeZero

Dependencies 14

15 files ported (100.0%)
7332 lines ported (100.0%)

All dependencies are ported!